運行在 AWS RDS 上的 PostgreSql 今天 TransactionID 耗盡,原因是有一個 SQL 執行佔用 CPU 超過 12 小時
-- 查詢正在執行的 SQL
select * from pg_stat_activity where datname='schema 名稱 ';
-- 結束正在進行的 R 查詢
select pg_cancel_backend(pid);
-- 結束正在執行 CUD 操作
select pg_terminate_backend(pid);
如何找到那些 SQL 執行時間長的 SQL? STEP1. 開啟 pg_stat_statements 擴展, 此處需要 PostgreSql 支援,部分版本需要編譯安裝。
create extension pg_stat_statements;
select pg_stat_reset();
select pg_stat_statements_reset();
STEP2. 等待一段時間 STEP3. 查詢最耗時的 SQL
select * from pg_stat_statements order by total_time desc limit 5;
STEP4. 查詢使用 Buffer 次數最多的 SQL
select * from pg_stat_statements order by shared_blks_hit+shared_blks_read desc limit 5;