PostgreSQL 查询分析器
将以下提示词粘贴到你的 AI 对话框中:
请根据官方安装指南 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/postgresql-query-analyzer 到你的 AI 助手。
技能介绍
要解决的具体问题
PostgreSQL 慢查询的定位往往卡在两个地方:EXPLAIN (ANALYZE, BUFFERS) 输出的指标过多,人工筛选成本高;pg_stat_statements 里的执行频率信息又和表扫描模式缺乏关联,导致缺索引这类基础问题难以快速确认。很多团队只能靠运维经验反复试错,而不是基于数据做出判断。
技能如何工作
该技能的核心是把两路数据拼在一起:一是带 BUFFERS 的 EXPLAIN 结果,能看到实际行数、缓冲区命中和排序开销;二是 pg_stat_statements 视图,用来对照同类 SQL 的累计执行代价。
它的典型工作流程可以拆成三步:
- 采集诊断信息:拉取指定查询的
EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)输出,并关联pg_stat_statements的统计行。 - 扫描统计定位异常:通过
pg_stat_user_tables里的seq_scan与idx_scan计数器,找出顺序扫描占比偏高、且查询经常命中的大表。 - 生成优化建议:结合执行计划中的
Seq Scan节点和过滤条件,给出可执行的CREATE INDEX语句建议,并借助HypoPG扩展在不真正创建索引的情况下验证效果。
适用边界与注意点
- 该技能聚焦查询层优化,不负责数据库实例级别的容量规划,也无法替代对硬件、配置参数(如
shared_buffers)的调整。 - 索引建议依赖统计信息的新鲜度,
pg_stat_user_tables和pg_stat_statements的更新周期由postgresql.conf中的设置决定,延迟过长可能导致判断偏差。 HypoPG模拟出的索引只是可行性参考,上线前仍需在测试环境验证写入性能和存储开销,避免在高并发写入表上引入不必要的维护成本。
使用场景
- 线上接口突然变慢,需要快速定位是否存在全表扫描
- 新业务上线前,对关键 SQL 做执行计划检查并确认索引覆盖
- 夜间批处理耗时异常,用统计信息找出循环扫描大表的语句
- 已有索引很多但仍慢,用 HypoPG 模拟候选索引验证收益
适合人员
- 数据库管理员,需要定期排查实例中的慢查询和缺索引
- 后端工程师,在代码上线前验证 PostgreSQL 查询的执行计划
- 数据分析工程师,优化大表关联和聚合查询的耗时
- SRE 工程师,处理线上数据库延迟告警并给出优化方案