Amazon Aurora
Aurora 用户指南 (API 版本 2014-10-31)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用托管计划

要让优化程序为托管语句使用捕获的计划,请将参数 apg_plan_mgmt.use_plan_baselines 设置为 true。以下是本地实例的示例。

SET apg_plan_mgmt.use_plan_baselines = true;

当应用程序运行时,此设置会导致优化程序为各个托管语句使用有效且启用的最低成本、首选或已批准计划。

优化程序如何选择要运行的计划

执行计划的成本是优化程序用于比较不同计划进行的估算。优化程序成本是多种因素的函数,包括计划使用的 CPU 和 I/O 操作。有关 PostgreSQL 查询计划程序成本的更多信息,请参阅 PostgreSQL 查询规划文档

以下流程图显示查询计划管理优化程序如何选择要运行哪个计划。


                    查询计划管理流程图

流程如下:

  1. 优化程序处理各个 SQL 语句时,它会生成最低成本计划。

  2. 如果没有查询计划管理,优化程序仅运行其生成的计划。如果您设置以下一个或两个参数设置,则优化程序使用查询计划管理:

    • apg_plan_mgmt.capture_plan_baselines 设置为 manualautomatic

    • apg_plan_mgmt.use_plan_baselinestrue

  3. 如果同时满足以下情况,优化程序立即运行生成的计划:

    • 优化程序的计划已在 SQL 语句的 apg_plan_mgmt.dba_plans 视图中。

    • 计划的状态为 approvedpreferred

  4. 参数 apg_plan_mgmt.capture_plan_baselinesmanualautomatic 时,优化程序完成捕获计划处理。

    有关优化程序如何捕获计划的详细信息,请参阅捕获执行计划

  5. 如果 apg_plan_mgmt.use_plan_baselinesfalse,则优化程序运行生成的计划。

  6. 如果优化程序的计划不在 apg_plan_mgmt.dba_plans 视图中,则优化程序将计划捕获作为新 unapproved 计划。

  7. 如果同时满足以下情况,优化程序运行生成的计划:

    • 优化程序的计划不是 rejecteddisabled 计划。

    • 计划的总成本低于未批准的执行计划阈值。

    优化程序不运行已禁用计划或者状态为“已拒绝”的任何计划。大部分情况下,优化程序不执行未批准的计划。但是,如果您设置参数 apg_plan_mgmt.unapproved_plan_execution_threshold 的值并且计划的总成本低于阈值,则优化程序会运行未批准的计划。有关更多信息,请参阅 apg_plan_mgmt.unapproved_plan_execution_threshold 参数。

  8. 如果托管语句具有任何已启用且有效的首选计划,则优化程序运行最低成本的计划。

    有效计划是优化程序可以运行的计划。托管计划可以因为多种原因而无效。例如,在计划所依赖的对象(如索引或分区表的分区)被删除时,计划将无效。

  9. 对于托管语句已启用且有效的已批准计划,优化程序确定其最低成本计划。然后,优化程序运行最低成本的已批准计划。

分析优化程序将使用哪个计划

apg_plan_mgmt.use_plan_baselines 参数设置为 true 时,您可以使用 EXPLAIN ANALYZE SQL 语句,使优化程序在要运行语句时显示所使用的计划。以下是示例。

EXPLAIN ANALYZE EXECUTE rangeQuery (1,10000); QUERY PLAN -------------------------------------------------------------------------- Aggregate (cost=393.29..393.30 rows=1 width=8) (actual time=7.251..7.251 rows=1 loops=1) -> Index Only Scan using t1_pkey on t1 t (cost=0.29..368.29 rows=10000 width=0) (actual time=0.061..4.859 rows=10000 loops=1) Index Cond: ((id >= 1) AND (id <= 10000)) Heap Fetches: 10000 Planning time: 1.408 ms Execution time: 7.291 ms Note: An Approved plan was used instead of the minimum cost plan. SQL Hash: 1984047223, Plan Hash: 512153379

优化程序指示将运行什么计划,但请注意,在此示例中,它发现了较低成本的计划。在这种情况下,您通过启用自动计划捕获(如自动捕获计划中所述),捕获这个最低成本计划。

优化程序将新的计划作为未批准计划捕获。使用 apg_plan_mgmt.evolve_plan_baselines 函数可比较计划,并将其更改为已批准、已拒绝或已禁用。有关更多信息,请参阅 评估计划性能