PostgreSQL 慢查詢SQL跟蹤


PostgreSQL 開啟慢SQL捕獲在排查問題時是個很有效的手段。根據慢SQL讓我在工作中真正解決了實際問題,很有幫助。

PostgreSQL 日志支持的輸出格式有 stderr(默認)、csvlog 、syslog

一般的錯誤跟蹤,只需在配置文件 【postgresql.conf】簡單設置幾個參數,當然還有錯誤級別等要設置。

logging_collector = on
log_destination = 'stderr'
log_directory = 'log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

SELECT
name,
setting,
vartype,
boot_val,
reset_val
FROM pg_settings where name in('logging_collector','log_destination','log_directory','log_filename');

 

默認的跟蹤日志記錄在 pgdate/log 中,如 /usr/local/pgsql/data/log 。
其他幾個重要參數說明:

log_rotation_age = 1440    #minute,多長時間創建新的文件記錄日志。0 表示禁擴展。
log_rotation_size = 10240    #kb,文件多大后創建新的文件記錄日志。0 表示禁擴展。
log_truncate_on_rotation = on #可重用同名日志文件

當需要跟蹤SQL語句或者慢語句,得需要設置以下參數:

log_statement = all    #需設置跟蹤所有語句,否則只能跟蹤出錯信息
log_min_duration_statement = 5000    #milliseconds,記錄執行5秒及以上的語句

log_statement:
設置跟蹤的語句類型,有4種類型:none(默認), ddl, mod, all。跟蹤所有語句時可設置為 "all"。

log_min_duration_statement:
跟蹤慢查詢語句,單位為毫秒。如設置 5000,表示日志將記錄執行5秒以上的SQL語句。

當 log_statement=all 和 log_min_duration_statement 同時設置時,將跟蹤所有語句,忽略log_min_duration_statement 設置。所以需按情況設置其中一個或兩個值。

加載配置

select pg_reload_conf();

show log_min_duration_statement;

針對某個用戶或者某數據庫進行設置

 alter database test set log_min_duration_statement=5000;

 

捕獲正在查詢的慢SQL

select * from pg_stat_activity where state<>'idle' and now()-query_start > interval '5 s' order by query_start ; 

 


免責聲明!

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



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