本文是Postgres监控系列终篇,介绍如何查询pg_stat_statements定位问题。故障时应先查pg_stat_activity查看当前活动,而非pg_stat_statements,因为后者只记录已完成查询的累计数据。获取时间窗口有两种方法:间隔取两次快照做差值,或重置指标重新观察。可按总执行时间、调用次数、平均耗时、磁盘读写等维度排序,最慢查询未必是真正问题。建议使用监控工具保存历史趋势。
在检查pgdoc.link的日志时,发现用户搜索系统视图pg_stat_activity和pg_stat_all_tables,已知关键词总数从1840增加到1883,虽然增幅不大,但仍是进步。
排查Postgres锁问题:先在pg_stat_activity中查找wait_event非空的等待进程,再用pg_locks定位持锁进程并追溯其操作。可通过COMMIT、ROLLBACK、pg_cancel_backend或pg_terminate_backend解除阻塞。常见锁源有ALTER TABLE、ORM事务、非并发建索引和VACUUM FULL。建议开启log_lock_waits并设置lock_timeout以预防。
文章介绍了使用PostgreSQL时,pg_stat_activity系统视图提供实时信息,但在Citus部署中不足够。为解决问题,引入了citus_stat_activity视图,提供集群级别的信息。citus_stat_activity可帮助了解分片活动和查询分布情况。
介绍Postgres 14的新功能,通过在pg_stat_activity中添加query_id来匹配pg_stat_statements中的queryid,从而获取当前正在运行的查询的持续时间估计。安装pg_stat_statements并运行查询,可以在pg_stat_activity中查找运行的query_id,然后在pg_stat_statements中查找平均执行时间。这种方法可以帮助估计大多数SQL查询的持续时间。
完成下面两步后,将自动完成登录并继续当前操作。