运行在 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;