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