用途:该技能用于诊断与解决 PostgreSQL 性能问题,适用于排查接口变慢(>500ms)、查询超时、数据库 CPU/内存过高、连接耗尽等场景。
使用方式:给出一个清晰的诊断与优化工作流——先用 EXPLAIN ANALYZE、pg_stat_statements、慢查询日志、连接池指标等工具定位问题;再按“测量→识别→假设→应用→验证→监控”的循环执行:用真实查询跑 EXPLAIN ANALYZE,判断是否存在 Seq Scan、Nested Loop、高 cost,假设是否为缺索引、N+1 或过度取数,随后创建索引或重写查询,重新执行 EXPLAIN 并对比,最后在生产环境监控效果。
主要能力:
- 解读 EXPLAIN ANALYZE 结果,区分 Seq Scan/Nested Loop 与 Index Scan 的典型特征及对应处理方向;
- 处理常见性能问题:N+1 查询(改用 join 或批量 whereIn 后在内存分组)、缺失索引(创建复合索引)、过度取数(只选必要列、加 LIMIT);
- 索引指南:B-tree(默认,支持 =、<、>、BETWEEN、ORDER BY)、GIN(数组、JSONB、全文检索)、Partial(仅在满足条件行上建索引)、Covering(INCLUDE 额外列);复合索引列顺序很重要,(a,b,c) 可服务 a、a+b、a+b+c、a ORDER BY b,但无法单独服务 b 或 c;
- 连接池:示例给出 Knex.js 的 pool 配置(min/max/acquireTimeoutMillis/idleTimeoutMillis)及池内用量、空闲、等待数的定时打印监控;
- 提供性能检查清单,覆盖索引、查询、配置(shared_buffers、work_mem、statement timeout)与监控(慢查询日志、pg_stat_statements、>1s 告警、DB 指标看板)。
限制:资料以 PostgreSQL 为主,所举代码为 JavaScript/Knex.js 与 SQL 示例,未提供其他语言或 ORM 的适配;文档中的经验数据(如 800ms 降至 50ms)为示例叙述,非通用效果承诺;未说明安装方式、收费与平台信息。具体命令与代码需按自身环境验证。