用途
Database Optimizer 是一个数据库性能优化技能,面向 PostgreSQL 和 MySQL 系统,用于优化数据库查询并提升性能。它定位为资深数据库优化角色,覆盖性能调优、查询优化和多数据库系统的可扩展性。
主要能力
该技能覆盖以下方向:
- 分析慢查询与执行计划
- 设计最优索引策略
- 调优数据库配置参数
- 优化模式设计与分区
- 减少锁竞争与死锁
- 提升缓存命中率与内存使用效率
技能内置按上下文加载的参考指南,包括:查询优化(references/query-optimization.md,用于分析慢查询、执行计划)、索引策略(references/index-strategies.md,用于设计索引、覆盖索引)、PostgreSQL 调优(references/postgresql-tuning.md)、MySQL 调优(references/mysql-tuning.md)、监控与分析(references/monitoring-analysis.md,用于性能指标与诊断)。
使用方式
技能定义了核心工作流:
- 分析性能——在任何变更前采集基线指标并运行 EXPLAIN ANALYZE。
- 识别瓶颈——找出低效查询、缺失索引、配置问题。
- 设计方案——制定索引策略、查询重写、模式改进。
- 实施变更——增量应用优化并监控;在进入下一步前验证每一项变更。
- 验证结果——重新运行 EXPLAIN ANALYZE,对比成本,测量实际耗时改进,记录变更。
技能提供了常用操作示例,包括:
- 识别最慢查询(PostgreSQL,依赖 pg_stat_statements 扩展),按 mean_exec_time 排序取前 20 条。
- 捕获执行计划,使用 EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) 以暴露缓存命中与磁盘读取比例。
- 解读 EXPLAIN 输出的关键模式,例如大表上的 Seq Scan、外层集合较大的 Nested Loop、估算行数与实际行数差异过大(统计信息过期)、缓冲区命中率低、排序溢出到磁盘等,并给出对应的典型补救措施。
- 创建覆盖索引,使用 CREATE INDEX CONCURRENTLY 并配合 INCLUDE 覆盖过滤列与投影列,消除堆表回表。
- 验证改进,对比优化前后的执行时间与成本,并通过 pg_stat_user_indexes 确认索引确实被使用。
- MySQL 侧查找慢查询,查询 performance_schema.events_statements_summary_by_digest,并使用 EXPLAIN FORMAT=JSON 获取执行计划。
适用场景
适用于调查慢查询、分析执行计划、设计索引、调优数据库配置、优化模式与分区、降低锁竞争与死锁、提升缓存命中率与内存使用等数据库性能相关工作。
限制与约束
技能明确列出必须做与禁止做的约束。
必须做:
- 优化前捕获 EXPLAIN (ANALYZE, BUFFERS) 输出作为基线。
- 每次变更前后都要测量性能。
- 在 PostgreSQL 中使用 CONCURRENTLY 创建索引以避免表锁。
- 在非生产环境测试;若写入性能或复制延迟恶化则回滚。
- 用前后指标记录所有优化决策。
- 批量数据变更后运行 ANALYZE 刷新统计信息。
禁止做:
- 在没有测量基线的情况下应用优化。
- 创建冗余或未使用的索引。
- 同时进行多项变更(无法归因影响)。
- 忽视新索引带来的写入放大。
- 忽略 VACUUM / 统计信息维护。
此外,技能要求在任何变更前先在非生产环境测试,若写入性能下降或复制延迟增加应立即回退。输出模板要求提供:带基线指标的性能分析、识别出的瓶颈与根因(附 EXPLAIN 证据)、含具体变更的优化策略、实施用 SQL / 配置变更、用于衡量改进的验证查询、监控建议以及文档记录。
关于该技能的收费、价格、平台支持范围等具体信息,资料中暂未提供。