PostgreSQL 优化
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/postgres-optimization-sh-g3z1h6。
技能介绍
要解决的问题
PostgreSQL 在生产环境中的慢查询通常不是单点参数问题,而是索引选择、查询计划、分区策略、连接模型和反模式叠加的结果。资料聚焦于一组可直接落地的检查项:如何从 EXPLAIN ANALYZE 中识别缺失索引,何时对超过 10M 行的表做分区,JSONB 字段应如何避免误用,以及连接池应使用 transaction-level 还是 session-level 模型。
技能如何工作
该技能以优化清单方式组织内容,而不是简单罗列参数。核心步骤包括:
- 阅读查询计划:关注
Seq Scan on large tables、高行数估计的Nested Loop、没有索引支撑的Sort,以及shared hit与shared read的缓存效率差异。 - 索引策略:建议索引匹配真实查询模式,并优先检查
pg_stat_statements;复合索引按 equality、sort、range 列排序。 - 分区与数据模型:对持续按分区键过滤的大表考虑分区;大型二进制内容不建议直接塞进 JSONB,而应使用独立表和合适类型。
- 连接池与调优:Web 应用通常适合事务级连接池;使用 prepared statements 或 temp tables 的应用更适合会话级连接池。清单还建议启用
pg_stat_statements,并定期识别未使用索引。
注意边界:这份资料适合已有 PostgreSQL 服务并需要排查慢查询的工程场景,不适合当作安装手册或通用数据库入门教程。它强调先分析真实查询路径,再做索引、分区和连接池调整。
使用场景
- 上线前用 `EXPLAIN ANALYZE` 复核关键查询,确认索引和连接池配置没有遗漏。
- 排查大表 `Seq Scan`,判断是否为缺失索引或复合索引顺序错误导致慢查询。
- 对超过 10M 行且按分区键过滤的表,评估分区改造并识别未使用索引。
- 为 Web 应用选择 `PgBouncer` / `pgcat` 的事务级或会话级连接池模型。
适合人员
- 负责线上 PostgreSQL 慢查询排查的后端工程师,需要依据查询计划和索引清单定位问题。
- 需要为大表设计索引和分区策略的数据库工程师,希望避免全表扫描和锁表风险。
- 维护 Web 服务连接池的应用开发者,需要选择事务级或会话级连接模型。
- 做上线前数据库性能检查的技术负责人,需要核对 JSONB、连接池与 `pg_stat_statements` 配置。