用途:把“数据库很慢”转化为可量化的数字,定位耗时来源,做最小改动并验证效果。适用于慢查询、慢接口、慢作业等性能问题排查。
主要能力:提供只读诊断脚本 <skill-dir>/scripts/pg-diagnose.sh "$DATABASE_URL",按服务器版本自适应 SQL,输出按总耗时与平均耗时排序的语句、缓存命中率、顺序扫描表、未使用/重复/无效索引、死元组与 autovacuum 滞后、膨胀估算、阻塞锁等。配套参考文档覆盖诊断、执行计划解读、索引设计、查询重写、维护(vacuum、统计、分区、reindex)、安全上线及 MySQL/MariaDB。
使用方式:先确认版本与配置,运行 SELECT version(); 与 pg_settings、pg_extension 查询;未安装 pg_stat_statements 需先说明并征得同意(需 shared_preload_libraries 与重启)。用 EXPLAIN (ANALYZE, BUFFERS, VERBOSE, SETTINGS, FORMAT TEXT) 获取真实计划,自下而上关注估算与实际行数比、buffers、loops。按症状分类(缺索引、统计过期、谓词不可 sargable、Nested Loop 循环过多、排序/哈希落盘、膨胀、锁竞争)后只改一处,再以同一指标复测对比。
限制与规则:诊断阶段保持只读;不在生产上测试全局 SET;不信任不同数据分布的测试计划;批量导入后先 ANALYZE;索引变更需走 CREATE INDEX CONCURRENTLY、lock_timeout 与回滚路径,且该命令不能在事务块内执行,失败会留下 INVALID 索引。版本差异需注意,如 total_exec_time 为 PG 13+、shared_blk_read_time 为 PG 17+、EXPLAIN ANALYZE 自动含 buffers 为 PG 18+、B-tree skip scan 为 PG 18+。具体收费与平台支持暂未提供。