PG統計信息和系統表


一、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的視圖,以更加友好以及可讀的方式展現統計信息,普通用戶可以訪問。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM