主要观点:Aurora 的 Query Plan Manager(QPM)可解决 Postgresql 查询规划器选择不佳导致执行时间和性能差异巨大的问题,能在生产问题出现时快速纠正规划错误,使数据库恢复稳定状态。
关键信息:
- 操作上用 QPM 处理生产问题分三步:识别问题查询、连接数据库强制使用好计划(通过提示等方式)、用 QPM 锁定好计划为“Approved”,坏计划为“Rejected”。
- 示例中先创建有规划问题的表,模拟数据修改导致表统计信息出错,使 Postgresql 从使用索引快速执行变为不使用索引缓慢执行,然后通过 QPM 修复,包括开启 QPM 跟踪计划、强制使用好计划让 QPM 捕捉、拒绝坏计划并锁定好计划等步骤。
重要细节: - QPM 处于实际世界,注重解决问题而非理论纯净,能快速纠正规划错误,从检测到纠正时间以分钟计。
- 启用 QPM 及参数设置在 AWS 文档中有详细说明,本文假设已设置好
apg_plan_mgmt
扩展。 - 表统计信息
histogram_bounds
影响查询规划,远离分布边缘时行估计较准确,可利用此特性让 Postgresql 改变使用索引的计划。 dba_plans
表中各字段含义,如sql_hash
、plan_hash
、enabled
、status
等。- 强制使用好计划可通过运行
explain analyze
并设置set_enable_x
标志,如禁用顺序扫描。 - 使用
apg_plan_mgmt.set_plan_status
函数拒绝坏计划和锁定好计划,QPM 虽不是万能,但能在一定程度上影响规划器选择。 - QPM 存在局限性,如作为扩展存在于核心规划器之外,处理 SQL 规范化和计划哈希时可能出现问题,工具原始,需要提前练习和准备。
有用链接:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。