一、PG統計信息概述
pg的統計信息主要分為兩種:
第一類統計信息是是負載指標“統計信息”(Monitoring stats),通過stat collector進程進行實時采集更新的負載指標,記錄一些對磁盤塊、表、索引相關的統計信息,SQL語句執行代價信息等。
第二類統計信息是數據分布狀態描述“統計信息”(Data distribution stats),這些統計信息為優化器選擇最優執行計划提供依據。該類統計信息采集的方式有兩種:
- 后台進程autovacuum lancher觸發的統計信息采集
autovacuum : 歷史無效數據、凍結事務、xid信息的清理都是由該進程處理。
vacuum : 標准形式的 vacuum 可以和生產數據庫操作並行運行(select、insert、update、delete等命令將繼續正常工作,但在清理期間你無法使用alter table等命令來更新表的定義)。
vacuum full : vacuum full 類似於表的重建或者說碎片整理,以收回更多磁盤空間但是運行起來更慢,而且vacuum full操作執行期間無法和對此表上的其他操作並發執行。vacuum full不會有后台進程主從觸發(只能手動執行)。
- 手動執行analyze table進行手動采集更新統計信息
二、負載指標統計信息
1、pg_stat_database 指標含義
通過pg_stat_database我們可以大致的了解一個數據庫的歷史運行情況,比較常見的一個問題定位有:
當tup_returned值遠大於tup_fetched時,說明該數據庫下存在較多全表掃描SQL,結合pg_stat_statments來定位具體慢SQL或者結合pg_stat_user_tables來定位全表掃描相關表
當tup_updated的數值比較大時,說明數據庫有很頻繁的更新,這個時候就需要關注一下vacuum相關的指標和長事務,如果沒有及時進行垃圾回收會造成數據膨脹的比較厲害,一定程度會響應表查詢效率
當temp_files的數值比較大時,說明存在很多的排序,hash,或者聚合這種操作,可以通過增大work_mem減少臨時文件的產生,並且同時這些操作的性能也會有較大的提升
2、pg_stat_user_tables 指標含義
通過 pg_stat_user_tables,我們可以知道當前數據庫下哪些表發生全表掃描頻繁,哪些表變更比較頻繁,對於變更較頻繁的表可多關注其vacuum相關的指標,避免表膨脹。
3、pg_stat_user_indexes 指標含義
通過pg_stat_user_indexes我們可以查看對應索引的使用情況,可以協助我們判斷哪些索引當前基本不使用,對這些無效的冗余索引,可進行索引刪除。
4、pg_statio_user_tables 指標含義
通過對pg_statio_user_tables的查詢,如果heap_blks_read,idx_blks_read很高說明shared_buffer較小,存在頻繁需要從磁盤或者page cache讀取到shared_buffer中。
5、pg_stat_bgwriter 指標含義
6、pg_stat_replication 指標含義
pg_stat_replication僅僅在主從架構下才會顯示相關數據。根據對pg_stat_replication表的查詢可以查看當前復制的模式、復制配置信息、復制位點信息等。
7、pg_stat_statement 指標含義
pg_stat_statements模塊提供一種跟蹤執行統計服務器執行的所有SQL語句的手段。該模塊默認是不開啟的,如果需要開啟需要我們手動對其進進行編譯安裝,修改配置文件並重啟數據庫,並在使用前手動載入該模塊。
8、pg_stat_activity視圖
9、pg_statio_all_tables
pg_statio_all_tables視圖將為當前數據庫中的每個表(包括 TOAST 表)包含一行,該行顯示指定表上有關 I/O 的統計信息。pg_statio_user_tables和pg_statio_sys_tables視圖包含相同的信息,但是被過濾得分別只顯示用戶表和系統表。
10、pg_statio_all_indexes
pg_statio_all_indexes視圖將為當前數據庫中的每個索引包含一行,該行顯示指定索引上有關 I/O 的統計信息。pg_statio_user_indexes和pg_statio_sys_indexes視圖包含相同的信息,但是被過濾得分別只顯示用戶索引和系統索引。
11、pg_stat_database
12、pg_stat_user_tables
通過查詢pg_stat_user_tables,可以基本清除哪些表的全表掃描次數較多,表中DML哪種操作多,也可以了解垃圾數據的數量。
三、數據分布類統計信息
1、pg_stats
通過對pg_stats的查詢,可以查看每個字段的數據分析統計信息,類似SQL Server的直方圖,為優化器選擇最佳執行計划提供依據,pg_stats只有管理員賬號才可以訪問。
2、pg_statistic
pg_statistic 是基於pg_stats的視圖,以更加友好以及可讀的方式展現統計信息,普通用戶可以訪問。