pg_profile,這款工具是個戰斗民族寫的。我們之所以選擇這款工具是因為它足夠簡單,和OracleAWR報告工作方式很像。而且它最大的優點是用純粹pl/pgsql編寫,勿需使用任何外部庫或者軟件。
接下來我們看下怎么安裝和配置pg_profile,并通過報告分析問題。
首先需要配置數據庫相關StatisticsCollector參數,具體配置參數如下:
track_activities = on track_counts = on track_io_timing = on track_functions = all/p1 |
這四個參數建議打開,不然使用會有一些影響。其中track_activities和track_counts默認是打開的。track_activities允許監控當前被任意服務器進程執行的命令。track_counts控制是否收集關于表和索引訪問的統計信息。track_io_timing啟用對塊讀寫次數的監控。參數track_functions啟用對用戶定義函數使用的跟蹤。
打開上述4個參數之后,還需要配置pg_stat_statements
pg_stat_statements.max是跟蹤語句的最大數目(即pg_stat_statements視圖中行的最大數量)。如果語句超過這個數量,最少被執行的語句的信息將會被丟棄。作者說此參數的設置太低可能會導致在抽取樣本之前會清除某些語句的統計信息。建議設置大一些。當前參數我們設置的50000,足夠使用。
pg_stat_statements.track指定top可以跟蹤頂層語句(直接由客戶端發出的語句),指定all還可以跟蹤嵌套的語句(例如在函數中調用的語句),指定none則禁用語句統計信息收集。默認值是top。如果你設置的是all,作者說可能會影響報告中%Totalfields字段的精確值。
上面參數修改稍為簡單,因為基本上都是默認打開的。只有少數沒開,打開也不需要重啟。
1.下載安裝文件上傳到服務器。
在服務器解壓文件,并存放到PG安裝目錄的extension文件夾下
tar xzf pg_profile- |
2.安裝擴展
這里有兩種方式安裝,一種是公共模式安裝,這種安裝方式最簡單。第二種是獨立Schema安裝,這種安裝將在自己創建的Schema中建自己的表,視圖,序列和函數,可以和其他用戶有效的進行隔離。我選擇了第二種安裝方式。
postgres=# CREATE EXTENSION dblink;
postgres=# CREATE EXTENSIONpg_stat_statements;
postgres=# CREATE SCHEMA profile;
postgres=# CREATE EXTENSION pg_profileSCHEMA profile;
默認pg_profile需要使用dblink和pg_stat_statements擴展包,這兩個屬于系統自帶插件,可選插件是pg_stat_kcache
還可以安裝pg_stat_kcache數據,提供有關語句CPU使用率和文件系統負載的信息,因為是生產環境,我這里沒有多帶帶編譯安裝這個插件。
接下來我們可以執行函數創建快照。
postgres=# SELECT profile.snapshot(); snapshot ------------------------ (local,OK,00:00:01.08) |
執行完成之后,可以通過profile.show_samples()函數,查看生成的快照。
postgres=# select profile.show_samples(); show_samples --------------------------------- (1,"2020-10-15 16:46:37+08",,,) (2,"2020-10-15 16:47:12+08",,,) (3,"2020-10-15 16:47:24+08",,,) (4,"2020-10-15 17:11:43+08",,,) (5,"2020-10-15 17:16:26+08",,,) (6,"2020-10-15 17:32:27+08",,,) (7,"2020-10-15 17:57:29+08",,,) (8,"2020-10-16 10:40:17+08",,,) (9,"2020-10-16 11:00:55+08",,,) (9 rows) |
當前總共有9個快照,執行profile.get_report命令,取2個時間段就可以生成AWR報告了。如果要生產對比報告,可以執行profile.get_diffreport命令。
psql -qtc "select profile.get_report(8,9)" --output awr_report_postgres_8_9.html |
如果要每半個小時生成快照,需要把腳本放在contab下執行。
*/30 * * * * psql -c SELECT profile.snapshot() > /tmp/pg_awr.log 2>&1 |
報告輸出如下所示,這里我修改了一下存儲過程,稍微把標題改動了一下。大家有興趣也可以自行修改想要的標題還有樣式。
報告總共有6個部分:
第一部分是服務器統計。包含了數據庫在此快照期間的統計信息,例如事務數、內存命中率、元組的操作統計等、數據庫的調用次數等、數據庫聚簇的統計信息,表空間的增長等等。
第二部分是我們熟悉的TopSQL。包括了執行時長、執行次數、執行消耗I/O、執行消耗的邏輯讀等topN的排序,還包含了完整的SQL語句。
第三部分是Schema的對象信息。包含了Top對象的信息,類似于OracleAWR報告的segmentstatistics部分,從這里我們可以輕松定位DML最頻繁的表、增長最快的表等等。
第四部分是用戶函數統計。可以看到我們自建的to_char使用次數最多。
第五部分是Vacuum相關統計
第六部分是報告快照期間的參數設置
pg_profile的介紹就到這里,相對于Oracle的awr報告還是有一定的差距的。但是好在開源軟件可以自行進行增強。當前執行快照的函數是take_sample(),當執行該函數的時候,會采集相關信息存入我們創建的schema的相關表中,如下圖所示:
如果要增加新的指標,只需要創建相關表,增加與之相關的insert語句采集就可以了。
而get_report函數,則是生成html報告的函數,在這里需要把我們新增的一些指標給顯示出來。
參考文檔:
http://postgres.cn/docs/12/monitoring-stats.html
http://postgres.cn/docs/12/pgstatstatements.html
https://github.com/zubkov-andrei/pg_profile
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/130109.html
摘要:最近研究了的兩種集群方案,分別是和,在這里總結一下二者的機制結構優劣測試結果等。其中的前身的,的前身是。為了避免單點故障,可以為所有節點配置對應的節點。測試測試結果測試結果顯示,兩種集群與單機的性能指標幾乎一致,無法分辨高下。 最近研究了PG的兩種集群方案,分別是Pgpool-II和Postgres-XL,在這里總結一下二者的機制、結構、優劣、測試結果等。 1、 Pgpool-I...
摘要:接上篇初識寫一下簡稱的部署與測試。如果執行報錯則根據提示安裝相應的庫即可,如等。默認的安裝目錄是,和原生相同,很順手。 接上篇《初識Postgres-XL》https://segmentfault.com/a/11...寫一下Postgres-XL(簡稱PGXL)的部署與測試。 第一節 安裝安裝很簡單,源碼安裝,和PG的安裝基本相同,可能比PG多一個依賴庫。在所有節點上執行相同操作。 ...
摘要:表示用戶操作花費的時間,包括時間和等待事件。當內存中排序空間不足時,使用臨時表空間進行排序,這個是內存排序對總排序的百分比。過低說明有大量排序在臨時表空間進行。要確保,否則存在嚴重的性能問題,比如綁定等會影響該參數。 Oracle中的AWR,全稱為Automatic Workload Repository,自動負載信息庫。它收集關于特定數據庫的操作統計信息和其他統計信息,Oracle以...
閱讀 1353·2023-01-11 13:20
閱讀 1699·2023-01-11 13:20
閱讀 1211·2023-01-11 13:20
閱讀 1902·2023-01-11 13:20
閱讀 4161·2023-01-11 13:20
閱讀 2751·2023-01-11 13:20
閱讀 1397·2023-01-11 13:20
閱讀 3664·2023-01-11 13:20