banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

PostgreSql查询正在执行的SQL和查询执行耗时的SQL

在 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? 步骤 1:开启 pg_stat_statements 扩展,这需要 PostgreSql 的支持,部分版本需要进行编译安装。

create extension pg_stat_statements;
select pg_stat_reset();
select pg_stat_statements_reset();

步骤 2:等待一段时间。 步骤 3:查询最耗时的 SQL。

select * from pg_stat_statements order by total_time desc limit 5;

步骤 4:查询使用 Buffer 次数最多的 SQL。

select * from pg_stat_statements order by shared_blks_hit+shared_blks_read desc limit 5;

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。