1. 程式人生 > >PostgreSQL 之 統計資訊

PostgreSQL 之 統計資訊

PG用於收集統計資訊的程序

stats collector process    

原始碼路徑 "src/backend/postmaster/pgstat.c"

統計資訊的存放地

啟動時, 讀入已存在的統計檔案, 或初始化0. 資料庫執行過程中儲存在記憶體和temp檔案;

啟動時 : shared buffer -> "src/backend/postmaster/pgstat.c" -> PgstatCollectorMain -> pgstat_read_statsfiles

資料庫關閉時儲存到非易失儲存

postgresql.conf ->stats_temp_directory , 推薦配置在高速磁碟或記憶體檔案系統中。

資料庫正常關閉時會把統計資訊從tmp目錄拷貝到$PGDATA/pg_stat目錄中, 確保統計資訊不會丟失。

pg_stat開頭的統計表和試圖是否產生統計資料,主要由以下引數決定:  

track_activities:是否收集當前正在執行的SQL,預設為on  

track_counts:  是否收集表和索引上的統計資訊,預設為on  

track_functions:可以取allplnone,如果是pl則只收集pl/pgsql寫的函式的統計資訊all表示收集所有型別的函式,包括C語言和SQL寫的函式。預設為none

track_io_timing:是否收集I/O的時間資訊。預設為off

引數名

作用

track_activities (boolean)          

收集SQL執行開始時間以及SQL語句的內容. 預設開啟.

track_activity_query_size (integer) 

指定統計資訊中允許儲存的SQL長度, 超出長度的SQL被截斷. 預設1024. pg_stat_activity.query

track_counts (boolean)              

收集資料庫的活動資訊(如表新增的行數, 刪除的行數等), autovacuum程序需要用到這部分資訊. 必須開啟

track_io_timing (boolean)           

收集IO操作的時間開銷,因為需要不斷的呼叫系統當前時間,所以某些系統中會帶來極大的負面影響.被用於pg_stat_database, pg_stat_statements 顯示IO時間. (使用pg_test_timing測試時間統計的影響)

track_functions (enum)              

跟蹤函式的呼叫次數和時間開銷. 可配置pl(僅包括plpgsql函式), all(包括SQL,C,plpgsql函式), off

update_process_title (boolean)      

每次服務端process接收到新的SQL時更新command狀態. (ps命令可見)

log_statement_stats (boolean)       

類似unix的getrusage()作業系統函式, 用於收集SQL語句級的資源開銷統計. 

包含以下3種層面的全部. 

log_parser_stats (boolean)     

同上, 但是隻包含SQL parser部分的資源開銷統計.      

log_planner_stats (boolean)     

同上, 但是隻包含SQL planner部分的資源開銷統計.  

log_executor_stats (boolean)    

同上, 但是隻包含SQL executor部分的資源開銷統計.

各個物件級別的統計資訊檢視:  

pg_stat_database  

pg_stat_all_tables  

pg_stat_sys_tables  

pg_stat_user_tables  

pg_stat_all_indexes  

pg_stat_sys_indexes  

pg_stat_user_indexes

資料庫內函式呼叫統計資訊(呼叫次數及其他資訊)的檢視

pg_stat_user_functions         

各個物件上發生I/O情況的統計檢視:  

pg_statio_all_tables  

pg_statio_sys_tables  

pg_statio_user_tables  

pg_statio_all_indexes  

pg_statio_sys_indexes  

pg_statio_user_indexes  

pg_statio_all_sequences  

pg_statio_sys_sequences  

pg_statio_user_sequences  

相關sql參考:

檢視所有系統表

 select relkind,relname from pg_class where relnamespace = (select oid from pg_namespace where nspname='pg_catalog') and relkind='v' order by 1,2;

檢視所有系統檢視

select relkind,relname from pg_class where relnamespace = (select oid from pg_namespace where nspname='pg_catalog') and relkind='v' order by 1,2;  

檢視或重置統計資訊的函式

函式名稱引數型別說明
pg_stat_get_activity(integer)setof record返回具有指定 PID 的後端相關的一個記錄,或者在指定NULL的情況下為系統中每一個活動後端返回一個記錄。被返回的域是pg_stat_activity檢視中的那些域的一個子集。
pg_stat_get_snapshot_timestamp()帶時區的時間戳返回當前統計資訊快照的時間戳
pg_stat_clear_snapshot()void拋棄當前的統計快照
pg_stat_reset()void把用於當前資料庫的所有統計計數器重置為零(預設要求超級使用者許可權,但這個函式的 EXECUTE 可以被授予給其他人)。
pg_stat_reset_shared(text)void把某些集簇範圍的統計計數器重置為零,具體哪些取決於引數(預設要求超級使用者許可權,但這個函式的 EXECUTE 可以被授予給其他人)。呼叫pg_stat_reset_shared('bgwriter')pg_stat_bgwriter 檢視中顯示的所有計數器清零。呼叫pg_stat_reset_shared('archiver') 將會把pg_stat_archiver檢視中展示的所有計數器清零。
pg_stat_reset_single_table_counters(oid)void把當前資料庫中用於單個表或索引的統計資料重置為零(預設要求超級使用者許可權,但這個函式的 EXECUTE 可以被授予給其他人)
pg_stat_reset_single_function_counters(oid)void把當前資料庫中用於單個函式的統計資訊重置為零(預設要求超級使用者許可權,但這個函式的 EXECUTE 可以被授予給其他人)

 by 波羅