PostgreSQL 性能操作手册
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md 中的安装指南,为当前 AI 助手安装 @user_3c6cb52e/postgresql-performance-runbook 技能。
技能介绍
诊断对象:那些“说不清慢在哪”的 PostgreSQL 问题
当数据库出现响应变慢、事务堆积、资源占用异常时,仅靠 pg_stat_database 这类粗粒度指标往往无法定位根因。你需要穿透到会话级别、语句级别,甚至物理存储层面,回答三个核心问题:
- 哪些 SQL 正在消耗资源?
- 它们卡在了哪里——是等锁、等 IO,还是在反复执行却没走索引?
- 是否存在表或索引膨胀,导致扫描成本虚高?
这些问题的答案,散落在 pg_stat_statements、pg_stat_activity、pg_locks 等系统视图中,但手动拼凑查询、解读结果、生成报告既耗时又容易遗漏关键线索。
技能如何工作:从指标采集到决策依据
该技能以操作手册的形式,封装了一套结构化的诊断流程,覆盖从数据采集到优化建议的全链条。
核心步骤包括:
- 调用
pg_stat_statements聚合执行统计,识别 TOP 慢查询; - 结合
pg_stat_activity与pg_locks,分析当前会话状态、锁等待关系与阻塞源; - 使用
pgstattuple扫描表物理结构,量化freespace、dead_tuples等膨胀指标; - 对关键查询生成
EXPLAIN (ANALYZE, BUFFERS)报告,还原执行计划与实际 I/O 行为; - 输出结构化诊断结果,包含问题定位、影响范围与建议动作(如索引优化、锁冲突解决、VACUUM 策略调整)。
整个过程不依赖外部代理或侵入式探针,全部通过标准 SQL 与系统视图完成,适合在生产环境按需触发。
适用边界与注意点
- 依赖
pg_stat_statements扩展,需在shared_preload_libraries中预加载,且track_activities等参数需开启; - 诊断结果受采样窗口与统计刷新策略影响,瞬时问题可能被遗漏;
pgstattuple扫描大表会产生 IO 开销,建议在低峰期执行或限制扫描范围;- 建议输出需结合业务上下文解读,例如慢查询是否为高频事务、锁等待是否影响核心链路;
- 不替代数据库参数调优,仅提供可观测性层面的诊断支持。
使用场景
- 响应变慢时,需查 pg_stat_statements 找出资源消耗最高的慢查询并生成执行计划报告。
- 事务堆积时,需结合 pg_stat_activity 和 pg_locks 排查锁等待关系与具体阻塞源。
- 磁盘占用异常时,需用 pgstattuple 扫描大表检查死元组并确认表膨胀程度。
适合人员
- 数据库管理员,需要在生产环境告警时快速定位慢查询与锁冲突的具体根因。
- 后端开发工程师,需要分析复杂业务 SQL 的执行计划以优化索引并解决超时问题。
- 数据平台运维人员,需要定期排查大表膨胀并制定 VACUUM 等存储治理策略。