Aurora PostgreSQL 查询计划管理的参数参考 - Amazon Aurora

Aurora PostgreSQL 查询计划管理的参数参考

您可以使用本节中列出的参数设置 apg_plan_mgmt 扩展的首选项。这些参数可在自定义数据库集群参数以及与 Aurora PostgreSQL 数据库集群关联的数据库参数组中使用。这些参数控制查询计划管理功能的行为及其影响优化程序的方式。有关设置查询计划管理的信息,请参阅开启 Aurora PostgreSQL 查询计划管理。如果没有按照本节中的详细说明设置 apg_plan_mgmt 扩展,则更改以下参数将不起作用。有关修改参数的信息,请参阅在 Amazon Aurora 中修改数据库集群参数组中的参数Amazon Aurora 数据库实例的数据库参数组

apg_plan_mgmt.capture_plan_baselines

捕获优化程序为每条 SQL 语句生成的查询执行计划,并将它们存储在 dba_plans 视图中。原定设置情况下,可存储的最大计划数为 10000(由 apg_plan_mgmt.max_plans 参数指定)。有关参考信息,请参阅 apg_plan_mgmt.max_plans

您可以在自定义数据库集群参数组或自定义数据库参数组中设置此参数。更改此参数的值不需要重启。

默认 允许值 描述
off 自动 为数据库实例上的所有数据库开启计划捕获。针对每条运行两次或更多次的 SQL 语句收集计划。将此设置用于大型或不断变化的工作负载,以提供计划稳定性。
手动 仅为后续语句开启计划捕获,直到您再次将其关闭。使用此设置,您可以仅针对特定关键 SQL 语句或针对已知有问题的查询来捕获查询执行计划。
off 关闭计划捕获。

有关更多信息,请参阅 捕获 Aurora PostgreSQL 执行计划

apg_plan_mgmt.plan_capture_threshold

指定一个阈值,这样如果查询执行计划的总成本低于该阈值,便不会在 apg_plan_mgmt.dba_plans 视图中捕获该计划。

更改此参数的值不需要重启。

默认 允许值 描述
0 0 - 1.79769e+308

设置用于捕获计划的 apg_plan_mgmt 查询计划总执行成本的阈值。

有关更多信息,请参阅 在 dba_plans 视图中检查 Aurora PostgreSQL 查询计划

apg_plan_mgmt.explain_hashes

指定 EXPLAIN [ANALYZE] 是否在其输出的结尾显示 sql_hashplan_hash。更改此参数的值不需要重启。

默认 允许值 描述
0 0(关闭) EXPLAIN 不显示 sql_hash 和 plan_hash(不带 hashes true 选项)。
1(开启) EXPLAIN 显示 sql_hash 和 plan_hash(不带 hashes true 选项)。

apg_plan_mgmt.log_plan_enforcement_result

指定是否必须记录结果,以查看 QPM 托管式计划是否得到正确使用。使用存储的通用计划时,日志文件中不会写入任何记录。更改此参数的值不需要重启。

默认 允许值 描述
none none 未在日志文件中显示任何计划实施结果。
on_error 仅当 QPM 无法使用托管式计划时,才在日志文件中显示计划实施结果。
all 在日志文件中显示所有计划实施结果,不论成功的还是失败的。

apg_plan_mgmt.max_databases

在您的 Aurora PostgreSQL 数据库集群的写入器实例上,指定可以使用查询计划管理的最大数据库数量。原定设置情况下,最多 10 个数据库可以使用查询计划管理。如果实例上的数据库数量超过 10 个,则可以更改此设置的值。要了解给定实例上有多少数据库,请使用 psql 连接到该实例。然后,使用 psql 元命令 \l 列出数据库。

更改此参数的值要求您重启实例才能使设置生效。

默认 允许值 描述
10 10-2147483647 实例上可以使用查询计划管理的最大数据库数量。

您可以在自定义数据库集群参数组或自定义数据库参数组中设置此参数。

apg_plan_mgmt.max_plans

设置查询计划管理器可以在 apg_plan_mgmt.dba_plans 视图中维持的 SQL 语句的最大数量。我们建议为所有的 Aurora PostgreSQL 版本将此参数设置为 10000 或更高的值。

您可以在自定义数据库集群参数组或自定义数据库参数组中设置此参数。更改此参数的值要求您重启实例才能使设置生效。

默认 允许值 描述
10000 10-2147483647

apg_plan_mgmt.dba_plans 视图中可存储的最大计划数。

Aurora PostgreSQL 版本 10 及更早版本的原定设置值为 1000。

有关更多信息,请参阅 在 dba_plans 视图中检查 Aurora PostgreSQL 查询计划

apg_plan_mgmt.plan_hash_version

指定 plan_hash 计算旨在涵盖的使用案例。apg_plan_mgmt.plan_hash_version 的较高版本涵盖了较低版本的所有功能。例如,版本 3 涵盖了版本 2 支持的使用案例。

更改此参数的值后,必须调用 apg_plan_mgmt.validate_plans('update_plan_hash')。它使用安装的 apg_plan_mgmt 和 plans 表中的条目更新每个数据库中的 plan_hash 值。有关更多信息,请参阅 验证计划

默认 允许值 描述
1 1 原定设置的 plan_hash 计算。
2 已修改 plan_hash 计算以支持多架构。
3 已修改 plan_hash 计算以支持多架构和分区表。
4 已修改 plan_hash 计算以支持并行运算符和具体化节点。

apg_plan_mgmt.plan_retention_period

指定要在 apg_plan_mgmt.dba_plans 视图中保留计划的天数,此天数之后将自动删除计划。原定设置情况下,自上次使用计划(apg_plan_mgmt.dba_plans 视图中的 last_used 列)起 32 天后,计划将被删除。您可以将此设置更改为任意数字,1 及更多。

更改此参数的值要求您重启实例才能使设置生效。

默认 允许值 描述
32 1-2147483647 自上次使用计划后至删除计划的最大天数。

有关更多信息,请参阅 在 dba_plans 视图中检查 Aurora PostgreSQL 查询计划

apg_plan_mgmt.unapproved_plan_execution_threshold

指定一个成本阈值,如果低于该阈值,优化器可以使用未批准的计划。默认情况下,该阈值为 0,所以优化器不运行未批准的计划。将此参数设置为极低的成本阈值(例如 100)可以避免普通计划的计划实施开销。您也可以使用反应式计划管理将此参数设置为一个非常大的值,比如 10000000。这样,优化器就可以在没有计划实施开销的情况下使用所有选定的计划。但是,当发现错误的计划时,您可以手动将其标记为“已拒绝”,这样下次就不会使用该计划。

此参数的值表示运行给定计划的成本估计。如果未批准的计划低于该估计成本,则优化程序会将其用于 SQL 语句。您可以在 dba_plans 视图中查看已捕获的计划及其状态(已批准、未批准)。要了解更多信息,请参阅 在 dba_plans 视图中检查 Aurora PostgreSQL 查询计划

更改此参数的值不需要重启。

默认 允许值 描述
0 0-2147483647 估计的计划开销,如果低于该值,则将使用未批准的计划。

有关更多信息,请参阅 使用 Aurora PostgreSQL 托管式计划

apg_plan_mgmt.use_plan_baselines

指定优化程序应使用捕获的并存储在 apg_plan_mgmt.dba_plans 视图中的已批准计划之一。原定设置情况下,此参数处于关闭状态(false),这会导致优化程序使用其生成的最低成本计划,而无需进行任何进一步评估。启用此参数(将其设置为 true)会强制优化程序从其计划基准中为该语句选择查询执行计划。有关更多信息,请参阅 使用 Aurora PostgreSQL 托管式计划。要查找详细说明此过程的图像,请参阅优化程序如何选择要运行的计划

您可以在自定义数据库集群参数组或自定义数据库参数组中设置此参数。更改此参数的值不需要重启。

默认 允许值 描述
false true 使用 apg_plan_mgmt.dba_plans 中的“已批准”、“首选”或“未批准”计划。如果这些计划都不符合优化程序的所有评估标准,则它可以使用自己生成的最低成本计划。有关更多信息,请参阅 优化程序如何选择要运行的计划
false 使用优化程序生成的最低成本计划。

您可以根据需要,评估不同的已捕获计划的响应时间以及变更计划状态。有关更多信息,请参阅 改进 Aurora PostgreSQL 查询计划

auto_explain.hashes

指定 auto_explain 输出是否显示 sql_hash 和 plan_hash。更改此参数的值不需要重启。

默认 允许值 描述
0(关闭) 0(关闭) auto_explain 结果不显示 sql_hashplan_hash
1(开启) auto_explain 结果显示 sql_hashplan_hash