1. 程式人生 > >postgresql 查詢慢sql之四: pg_stat_*、pg_statio_*

postgresql 查詢慢sql之四: pg_stat_*、pg_statio_*

pg_stat_為統計收集檢視, 這裡pg_stat_ 是不包含 pg_stat_statements 這個 extension.其實統計資訊這些都是記錄到具體表,還需要根據反向查詢到 sql。

配置統計收集

因為統計收集給查詢執行增加了一些負荷,系統可以被配置為收集或不收集資訊。這由配置引數控制,它們通常在postgresql.conf中設定(關於設定配置引數的細節請見第 19 章)。

引數 track_activities 允許監控當前被任意伺服器程序執行的命令。 引數 track_counts 控制是否收集關於表和索引訪問的統計資訊。 引數 track_functions 啟用對使用者定義函式使用的跟蹤。 引數 track_io_timing 啟用對塊讀寫次數的監控。

$ vi postgresql.conf

#------------------------------------------------------------------------------
# RUNTIME STATISTICS
#------------------------------------------------------------------------------

# - Query/Index Statistics Collector -

track_activities = on
track_counts = on
track_io_timing = on
track_functions = none                  # none, pl, all
track_activity_query_size = 2048        # (change requires restart)
#stats_temp_directory = '/var/run/postgresql/9.6-main.pg_stat_tmp'
stats_temp_directory = 'pg_stat_tmp'

# - Statistics Monitoring -

#log_parser_stats = off
#log_planner_stats = off
#log_executor_stats = off
#log_statement_stats = off

重置

postgresql 提供了4個重置功能,看名字都很容易理解了。

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 可以被授予給其他人)

查詢 top sql

top seq scan

seq read 為全表掃描,需要關注的是大表的seq read

select * from pg_stat_user_tables where n_live_tup > 100000 and seq_scan > 0 order by seq_tup_read desc limit 20;