PostgreSQL查询诊断
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/postgresql-query-diagnostics
技能介绍
慢查询诊断的现实困境
在 PostgreSQL 日常运维中,慢查询往往是最先暴露性能问题的表象。但真正的挑战在于:如何从海量执行记录中快速定位根因?开发者通常需要手动查询 pg_stat_statements 统计表、逐条解析 EXPLAIN ANALYZE 输出、翻看数据库日志寻找异常模式,再结合表统计信息判断索引是否合理。这个过程不仅耗时,还容易遗漏关键细节——尤其是当查询计划随数据分布变化而产生偏差时。
技能的核心工作方式
PostgreSQL 查询诊断 技能将这一诊断流程自动化,整合三类核心数据源协同分析:
pg_stat_statements解析:提取数据库中累积的 SQL 执行统计,包括平均执行时间、调用次数和行处理量,快速筛出 TOP 慢查询EXPLAIN ANALYZE输出解读:对目标查询生成实际执行计划,识别全表扫描、嵌套循环退化、排序溢出等瓶颈节点pg_stat_activity监控:捕获当前活跃会话状态,帮助定位正在长时间运行或处于等待状态的查询pgBadger日志集成:分析 PostgreSQL 日志文件,提取慢查询日志模式和错误趋势pg_stat_user_tables索引建议:基于表的实际使用统计(扫描次数、索引命中比例)生成索引优化建议
诊断过程分为三步:首先通过统计表定位候选慢查询,然后对目标 SQL 执行计划分析,最后结合日志和表统计给出可操作的优化方向。
适用边界与注意事项
该技能的诊断精度依赖底层扩展的正确配置。pg_stat_statements 需要在 postgresql.conf 中启用并共享库加载,否则无法采集执行统计;pgBadger 分析需要提供完整的 PostgreSQL 日志路径,且日志中需包含足够详细的 log_min_duration_statement 设置。此外,索引建议基于统计信息而非实际数据分布,对于极端数据倾斜或自定义操作符的场景,建议结合 pg_stat_user_indexes 进一步验证。最后,执行计划分析应配合 ANALYZE 更新统计信息,避免因陈旧统计导致的误判。
使用场景
- 线上PostgreSQL数据库出现查询超时告警,需要快速定位TOP慢查询并分析执行计划瓶颈
- 优化高并发写入场景下业务SQL,需要通过pg_stat_statements找出耗时排名靠前的查询
- 排查数据库性能抖动原因,需要结合pgBadger日志分析慢查询趋势和错误模式
- 需要为频繁全表扫描的业务表生成索引建议,基于pg_stat_user_tables统计判断优化方向
适合人员
- 数据库管理员:需要在生产环境快速诊断慢查询根因,减少故障排查和修复时间
- 后端开发工程师:优化自己编写的业务SQL,需要查看EXPLAIN ANALYZE输出并获取索引建议
- 数据库运维工程师:监控数据库性能趋势,需要基于日志和统计信息给出优化方案
- 数据平台工程师:排查报表查询变慢问题,需要从数据库层面分析性能瓶颈