PostgreSQL開發與實戰(4)查詢性能Top SQL

作者:太陽

一、查詢當前正在運行的Top SQL

查詢當前正在運行的會話中耗時最長的Top SQL,where條件可按需修改
SELECT pgsa.datname AS database_name, pgsa.usename AS user_name, pgsa.client_addr AS client_addr, pgsa.application_name AS application_name, pgsa.state AS state, pgsa.backend_start AS backend_start, pgsa.xact_start AS xact_start, extract(epoch FROM now() - pgsa.xact_start) AS xact_time, pgsa.query_start AS query_start, extract(epoch FROM now() - pgsa.query_start) AS query_time, pgsa.query AS query_sql
FROM pg_stat_activity pgsa
WHERE pgsa.state != 'idle'AND pgsa.state != 'idle in transaction'AND pgsa.state != 'idle in transaction (aborted)'
ORDER BY query_time DESC
LIMIT 20;

pg_stat_activity視圖各字段含義:http://postgres.cn/docs/13/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW

二、查詢某個時間點之后的Top SQL

1、pg_stat_statements介紹

pg_stat_statements可跟蹤服務器執行的所有SQL語句的計劃信息和執行統計信息,詳見官方文檔說明:[http://postgres.cn/docs/13/pgstatstatements.html](http://postgres.cn/docs/13/pgstatstatements.html)

2、安裝配置

1)修改配置文件

# su - postgres
$ vi /data/pgsql13/data/postgresql.conf
shared_preload_libraries='pg_stat_statements,pg_pathman'        
pg_stat_statements.max = 10000
pg_stat_statements.track = all
2)重啟生效:$ pg_ctl -D /data/pgsql13/data restart

3)載入pg_stat_statement插件

postgres=# \x
Expanded display is on.--查看可用模塊
postgres=# SELECT * FROM pg_available_extensions WHERE name = 'pg_stat_statements';
-[ RECORD 1 ]-----+-----------------------------------------------------------------------
name              | pg_stat_statements
default_version   | 1.8
installed_version | 
comment           | track planning and execution statistics of all SQL statements executed--載入模塊,載入后pg_stat_statements表可正常使用
postgres=# create extension pg_stat_statements; 
CREATE EXTENSION

3、pg_stat_statements各字段含義

postgres=# select * from  pg_stat_statements limit 1;
-[ RECORD 1 ]-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
userid              | 16480				//用戶oid
dbid                | 163959				//數據庫oid
queryid             | -7584655433466348220	        //查詢id
query               | SELECT ......			//SQL語句
plans               | 0 				//計劃語句的次數,單位ms(啟用pg_stat_statements.track_planning才會統計,默認關閉)
total_plan_time     | 0 				//計劃語句所花費的總時間,單位ms(啟用pg_stat_statements.track_planning才會統計,默認關閉)
min_plan_time       | 0 				//計劃語句所花費的最短時間,單位ms(啟用pg_stat_statements.track_planning才會統計,默認關閉)
max_plan_time       | 0 				//計劃語句所花費的最長時間,單位ms(啟用pg_stat_statements.track_planning才會統計,默認關閉)
mean_plan_time      | 0 				//計劃語句所花費的平均時間,單位ms(啟用pg_stat_statements.track_planning才會統計,默認關閉)
stddev_plan_time    | 0 				//計劃語句花費的時間的總體標準偏差,單位ms(啟用pg_stat_statements.track_planning才會統計,默認關閉)
calls               | 92545				//語句被執行的次數
total_exec_time     | 1563.9699899999862		//執行語句所花費的總時間,單位ms
min_exec_time       | 0.005605			        //執行語句所花費的最短時間,
max_exec_time       | 7.055763			        //執行語句所花費的最長時間,
mean_exec_time      | 0.01689956226700567		//執行語句所花費的最長時間,
stddev_exec_time    | 0.036137014177393116	        //執行語句花費的時間的總體標準偏差,
rows                | 17277				//語句檢索或影響的總行數
shared_blks_hit     | 394706				//語句的共享塊緩存命中總數
shared_blks_read    | 7 				//語句讀取的共享塊總數
shared_blks_dirtied | 6 				//被語句弄臟的共享塊總數
shared_blks_written | 0 				//語句寫入的共享塊總數
local_blks_hit      | 0 				//語句的本地塊緩存命中總數
local_blks_read     | 0 				//語句讀取的本地塊總數
local_blks_dirtied  | 0 				//被語句弄臟的本地塊總數
local_blks_written  | 0 				//語句寫入的本地塊總數
temp_blks_read      | 0 				//語句讀取的臨時塊總數
temp_blks_written   | 0 				//語句寫入的臨時塊總數
blk_read_time       | 0 				//語句讀取塊所花費的總時間
blk_write_time      | 0 				//語句寫入塊所花費的總時間
wal_records         | 7874 				//語句生成的 WAL 記錄總數
wal_fpi             | 5 				//語句生成的 WAL 整頁圖像總數
wal_bytes           | 450177 				//語句生成的 WAL 字節總數

oid是唯一標識,查詢用戶名與用戶oid的關系:

postgres=# select userid,userid::regrole from pg_stat_statements group by userid;
-[ RECORD 1 ]----
userid | 10
userid | postgres
...

查詢Top SQL:

-- 按總執行時間查詢Top SQL
select userid::regrole as user_name,* from pg_stat_statements order by total_exec_time desc limit 20;
-- 按總IO消耗查詢Top SQL
select userid::regrole as user_name,* from pg_stat_statements order by blk_read_time+blk_write_time desc limit 20;
-- 按總調用次數查詢Top SQL
select userid::regrole as user_name,* from pg_stat_statements order by calls desc limit 20;

4、pg_stat_statements的限制

pg_stat_statements是累積的統計,累積的是pg_stat_statements配置后至當前時刻,無法查詢這期間指定時間范圍內的Top SQL情況;
可通過如下命令,清理歷史統計信息:

select pg_stat_statements_reset();

5、通過pg_stat_statements實現查詢指定時間范圍內的Top SQL

通過定時清理歷史統計信息+定時查詢pg_stat_statements的方式可實現查詢指定時間范圍內的Top SQL;

如在每天0點清理歷史統計信息,在每天9、11、17點分別查詢pg_stat_statements,可得到每天0~9、0~11、0~17這3個時間范圍內的Top SQL。

更多技術信息請查看云掣官網https://yunche.pro/?t=yrgw

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714419.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714419.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714419.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

你知道什么是回調函數嗎?

c語言中的小小白-CSDN博客c語言中的小小白關注算法,c,c語言,貪心算法,鏈表,mysql,動態規劃,后端,線性回歸,數據結構,排序算法領域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 給大家分享一句我很喜歡我話: 知不足而奮進,望遠山而前行&am…

Unity3D外包 北京動點軟件:基于U3D開發自動駕駛技術分析

在Unity3D中開發自動駕駛AI是一個充滿挑戰和潛力的領域。以下是一些關鍵步驟和考慮因素: 來百度APP暢享高清圖片 1. 創建虛擬環境: 使用Unity3D創建一個逼真的虛擬環境,模擬現實世界的道路、交通標志、車輛和障礙物等。 確保場景具有真實的…

4款免費且實用的.NET反編譯工具

.NET 反編譯工具的作用 .NET反編譯工具能夠將已經編譯好的.NET程序集轉換為易于理解的源代碼,它們可以幫助開發人員恢復丟失的源代碼、理解和分析第三方組件dll、學習其他人的代碼、更好的查找修復 bug 或進行逆向工程等(注意:請在法律允許范…

【C++ 標準流,文件流】

C 標準流&#xff0c;文件流 ■ 標準輸入&#xff0c;輸出流&#xff0c;■ 文件流&#xff08;ofstream寫入&#xff0c;ifstream讀取&#xff0c;fstream創建-寫入-讀取&#xff09;■ open()■ ofstream■ ifstream■ 流插入<<■ 文件位置指針 ■ 標準輸入&#xff0c…

SpringBoot系列(一):SpringBoot介紹

SpringBoot系列(一)&#xff1a;SpringBoot介紹 1. SpringBoot介紹 SpringBoot是由Pivotal團隊提供的一套用于構建微服務的基礎框架&#xff0c;它旨在簡化Spring應用程序的創建和開發過程。 SpringBoot通過設計大量的自動化配置等方式來簡化Spring原有樣板化的配置&#xff…

用Visual Studio 2015成功編譯、發布UMDF驅動到目標機!!

開發工具&#xff1a;Visual Studio 2015企業版 主 機&#xff1a;windows10 X64企業版&#xff0c;主機是安裝了Visual Studio 2015的操作系統&#xff0c;主要進行驅動開發和調試。 目 標 機&#xff1a;windows10 X86企業版&#xff0c;目標機是安裝和調試驅動的操作…

阿里巴巴面試必備:數據庫集群知識全面解讀!

大家好,我是小米。今天,我們將深入探討阿里巴巴面試題中一個備受關注的話題:數據庫集群。作為技術領域中的一項重要實踐,數據庫集群不僅是企業架構中的核心組成部分,更是保障系統穩定性和數據可靠性的關鍵一環。讓我們一起來揭秘數據庫集群的奧秘吧! 主從復制過程 主從…

文件操作(超詳細版本)

本章重點 為什么使用文件什么是文件文件的打開和關閉文件的順序讀寫文件的隨機讀寫文件讀取結束的判定 為什么使用文件 我們前面學習結構體時&#xff0c;寫通訊錄的程序&#xff0c;當通訊錄運行起來的時候&#xff0c;可以給通訊錄中增加、刪除數 據&#xff0c;此時數據是…

手勢識別應用介紹

目錄 一、功能介紹 二、安裝部署說明 2.1 文件目錄說明 2.2 手勢識別部分 一、功能介紹 這是一個通過攝像頭捕獲手勢&#xff0c;根據不同的手勢來做出不同操作的計算機程序。目前可以識別9種手勢&#xff0c;可以根據識別到的手勢&#xff0c;進行打開應用、增大音量、減小音量…

[AIGC] 請舉例說明在運行時讀取注解的應用場景。

很高興你對于在運行時讀取注解的應用場景感興趣。以下是我為你整理的一些典型場景&#xff1a; 1. Spring框架 Spring框架廣泛地使用了運行時注解。例如Autowired注解&#xff0c;它可以在運行時實現依賴注入的功能。Spring在啟動時&#xff0c;會通過反射機制尋找到被Autowi…

mkfs.ext4 --- 對磁盤設備進行Ext4格式化

mkfs.ext4命令來自于英文詞組“make filesystem Ext4”的縮寫&#xff0c;其功能是用于對磁盤設備進行Ext4格式化的操作。 mkfs.ext4 參數-b block-size 塊大小&#xff08;1k,2k,4k&#xff09; -c 壞塊測試 -l filename從文件讀壞塊列表 -C cluster-size 簇大小 (大塊分配持性…

交友社交軟件開發-php交友聊天系統-

為了開發一個高效的交友系統&#xff0c;需要一個完善的信息管理和篩選機制。這個系統應該能夠根據用戶的個人信息、興趣愛好、價值觀等標準進行篩選&#xff0c;并向用戶提供符合他們要求心儀的人的信息。為了實現這個目標&#xff0c;系統可以利用人工智能技術&#xff0c;分…

MySQL基礎-----SQL語句之DDL語句

目錄 前言 開啟登錄數據庫 一、數據庫操作 1.查詢所有數據庫 2.切換使用數據庫 3.查詢當前使用的數據庫 4.創建數據庫 創建一個hello數據庫, 使用數據庫默認的字符集。 創建一個itheima數據庫&#xff0c;并且指定字符集 5.刪除數據庫 二、表操作 1.查詢當前數據庫所有…

JAVA的學習日記

JAVA的學習日記&#xff08;2024.3.1&#xff09;&#xff08;b站韓順平老師課程學習筆記版&#xff09; ps:撿起忘光光的Java語言 Sublime //1. public是公有&#xff0c;class是類 //2. public class Hello表示Hello是一個類&#xff0c;是一個public公有的類 //3. Hello{…

解決Unable to load class ‘org.gradle.api.attributes.VerificationType‘

在使用AdnroidStudio開發過程中難免會遇到Unable to load class org.gradle.api.attributes.VerificationType報錯&#xff0c;可以嘗試清理緩存重啟解決 打開 File-》Invalidate Caches... 重啟AndroidStudio后&#xff0c;重新加載即可&#xff0c;但也不是百分百解決。

【MySQL】:高效利用MySQL函數實用指南

&#x1f3a5; 嶼小夏 &#xff1a; 個人主頁 &#x1f525;個人專欄 &#xff1a; MySQL從入門到進階 &#x1f304; 莫道桑榆晚&#xff0c;為霞尚滿天&#xff01; 文章目錄 &#x1f4d1;前言一. MySQL函數概論二. 字符串函數三. 數值函數四. 日期函數五. 流程函數&#x1…

基于NSFW數據集的違規圖片檢測系統

目錄 一、功能介紹 二、安裝部署說明 2.1數據集簡介 2.2文件目錄說明 一、功能介紹 本程序是一個違規圖片檢測系統&#xff0c;能夠識別用戶上傳的信息圖片&#xff0c;是否包含有敏感&#xff08;NSFW&#xff0c;Not Safe For Work&#xff09;信息。 本程序使用雅虎開源的NS…

前后端分離開發

目錄 前言 一、前后端分離開發 1. 介紹 2. 開發流程 3. 前端技術棧 &#xff08;1&#xff09;開發工具: &#xff08;2&#xff09;技術框架: 二、Yapi 1. 介紹 2. 使用 &#xff08;1&#xff09;準備 &#xff08;2&#xff09;定義接口 &#xff08;3&#x…

芯科科技為全球首批原生支持Matter-over-Thread的智能鎖提供強大助力,推動Matter加速成為主流技術

智能鎖領域的先鋒企業U-tec和Nuki選擇芯科科技解決方案&#xff0c;成為Matter-over-Thread應用的領先者 致力于以安全、智能無線連接技術&#xff0c;建立更互聯世界的全球領導廠商Silicon Labs&#xff08;亦稱“芯科科技”&#xff0c;NASDAQ&#xff1a;SLAB&#xff09;今…

2024廣東水展即將開幕 | 聚焦凈水行業熱點搶占行業新機遇

2024廣東水展即將開幕 | 聚焦凈水行業熱點搶占行業新機遇 隨著消費升級和人們對環境健康的意識增強&#xff0c;人們除了關注凈水產品的性能外&#xff0c;對產品的設計、服務、多應用場景化等需求也愈發多樣化。節能環保、智能化成為產品迭代升級主要方向。據奧維云網數據顯示…