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:可以取all、pl和none,如果是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 波羅