捕获 Aurora PostgreSQL 执行计划
Aurora PostgreSQL 查询计划管理提供两种不同的模式来捕获查询执行计划:即自动或手动。您可以通过将 apg_plan_mgmt.capture_plans_baselines
的值设置为 automatic
或 manual
来选择模式。您可以使用手动计划捕获为特定的 SQL 语句捕获执行计划。或者,您可以使用自动计划捕获来捕获应用程序运行时多次执行的所有(或者速度最慢)计划。
捕获计划时,优化程序将托管语句首次捕获的计划的状态设置为 approved
。优化程序将为托管语句捕获的任何其他计划的状态设置为 unapproved
。但是,有时可能有多个计划保存为 approved
状态。在为一个语句并行创建了多个计划并在提交语句的第一个计划之前,可能发生这种情况。
要控制可以捕获并存储在 dba_plans
视图中的最大计划数量,请在数据库实例级参数组中设置 apg_plan_mgmt.max_plans
参数。修改 apg_plan_mgmt.max_plans
参数后需要重启数据库实例,才能让新值生效。有关更多信息,请参阅 apg_plan_mgmt.max_plans 参数。
手动捕获特定 SQL 语句的计划
如果您已知要管理的 SQL 语句集,请将语句放入 SQL 脚本文件,然后手动捕获计划。下面显示了如何为 SQL 语句集手动捕获查询计划的 psql 示例。
psql>
SET apg_plan_mgmt.capture_plan_baselines = manual;psql>
\i my-statements.sqlpsql>
SET apg_plan_mgmt.capture_plan_baselines = off;
在捕获各个 SQL 语句的计划之后,优化程序添加新行到 apg_plan_mgmt.dba_plans
视图。
我们建议您在 SQL 脚本文件中使用 EXPLAIN 或 EXPLAIN EXECUTE 语句。请确保在参数值中加入足够的变体以捕获所有感兴趣的计划。
如果您知道比优化程序最低成本计划更好的计划,则可以强制优化程序使用更好的计划。要这样做,请指定一个或多个优化程序提示。有关更多信息,请参阅“使用 pg_hint_plan 修复计划”。要比较 unapproved
和 approved
计划的性能并批准、拒绝或删除它们,请参阅评估计划性能。
自动捕获计划
对于类似以下的情况,请使用自动计划捕获:
您不知道要管理的具体 SQL 语句。
您有数百乃至数千个 SQL 语句需要管理。
您的应用程序使用客户端 API。例如,JDBC 使用未命名的预编译语句或者批量模式语句,无法在 psql 中表达。
自动捕获计划
通过在数据库实例级参数组中将
apg_plan_mgmt.capture_plan_baselines
设置为automatic
来启用自动计划捕获。有关更多信息,请参阅 在 Amazon Aurora 中修改数据库参数组中的参数。重启数据库实例。
随着应用程序运行,优化程序捕获各个至少运行两次的 SQL 语句的计划。
随着应用程序使用默认查询计划管理参数设置运行,优化程序捕获各个至少运行两次的 SQL 语句的计划。在使用默认值的同时捕获所有计划具有非常小的运行时开销,并且可在生产中启用。
禁用自动计划捕获
-
从数据库实例级参数组,将
apg_plan_mgmt.capture_plan_baselines
参数设置为off
。
要评估未批准计划的性能并批准、拒绝或删除这些计划,请参阅评估计划性能。