

# Aurora PostgreSQL 查询计划管理的参数参考
<a name="AuroraPostgreSQL.Optimize.Parameters"></a>

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

**Topics**
+ [apg\_plan\_mgmt.capture\_plan\_baselines](#AuroraPostgreSQL.Optimize.Parameters.capture_plan_baselines)
+ [apg\_plan\_mgmt.plan\_capture\_threshold](#AuroraPostgreSQL.Optimize.Parameters.plan_capture_threshold)
+ [apg\_plan\_mgmt.explain\_hashes](#AuroraPostgreSQL.Optimize.Parameters.explain_hashes)
+ [apg\_plan\_mgmt.log\_plan\_enforcement\_result](#AuroraPostgreSQL.Optimize.Parameters.log_plan_enforcement_result)
+ [apg\_plan\_mgmt.max\_databases](#AuroraPostgreSQL.Optimize.Parameters.max_databases)
+ [apg\_plan\_mgmt.max\_plans](#AuroraPostgreSQL.Optimize.Parameters.max_plans)
+ [apg\_plan\_mgmt.plan\_hash\_version](#AuroraPostgreSQL.Optimize.Parameters.plan_hash_version)
+ [apg\_plan\_mgmt.plan\_retention\_period](#AuroraPostgreSQL.Optimize.Parameters.plan_retention_period)
+ [apg\_plan\_mgmt.unapproved\_plan\_execution\_threshold](#AuroraPostgreSQL.Optimize.Parameters.unapproved_plan_execution_threshold)
+ [apg\_plan\_mgmt.use\_plan\_baselines](#AuroraPostgreSQL.Optimize.Parameters.use_plan_baselines)
+ [auto\_explain.hashes](#AuroraPostgreSQL.Optimize.Parameters.auto_explain.hashes)

## apg\_plan\_mgmt.capture\_plan\_baselines
<a name="AuroraPostgreSQL.Optimize.Parameters.capture_plan_baselines"></a>

捕获优化程序为每条 SQL 语句生成的查询执行计划，并将它们存储在 `dba_plans` 视图中。原定设置情况下，可存储的最大计划数为 10000（由 `apg_plan_mgmt.max_plans` 参数指定）。有关参考信息，请参阅 [apg\_plan\_mgmt.max\_plans](#AuroraPostgreSQL.Optimize.Parameters.max_plans)。

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



- **off**
  - **允许值:** 自动 / **说明:** 在会话级别或参数组中应用此设置，以捕获使用两次或更多次的计划。
  - **允许值:** 手动 / **说明:** 在会话级别或参数组中应用此设置，以捕获使用一次或更多次的计划。
  - **允许值:** off / **说明:** 关闭计划捕获。



有关更多信息，请参阅 [捕获 Aurora PostgreSQL 执行计划](AuroraPostgreSQL.Optimize.CapturePlans.md)。

## apg\_plan\_mgmt.plan\_capture\_threshold
<a name="AuroraPostgreSQL.Optimize.Parameters.plan_capture_threshold"></a>

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

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


| 默认值 | 允许值 | 说明 | 
| --- | --- | --- | 
| 0 | 0 - 1.79769e\+308 | 设置用于捕获计划的 `apg_plan_mgmt` 查询计划总执行成本的阈值。 | 

有关更多信息，请参阅 [在 dba\_plans 视图中检查 Aurora PostgreSQL 查询计划](AuroraPostgreSQL.Optimize.ViewPlans.md)。

## apg\_plan\_mgmt.explain\_hashes
<a name="AuroraPostgreSQL.Optimize.Parameters.explain_hashes"></a>

指定 `EXPLAIN [ANALYZE]` 是否在其输出的结尾显示 `sql_hash` 和 `plan_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
<a name="AuroraPostgreSQL.Optimize.Parameters.log_plan_enforcement_result"></a>

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



- **none**
  - **允许值:** none  / **说明:** 未在日志文件中显示任何计划实施结果。
  - **允许值:** on\_error / **说明:** 仅当 QPM 无法使用托管式计划时，才在日志文件中显示计划实施结果。
  - **允许值:** 全部 / **说明:** 在日志文件中显示所有计划实施结果，不论成功的还是失败的。



## apg\_plan\_mgmt.max\_databases
<a name="AuroraPostgreSQL.Optimize.Parameters.max_databases"></a>

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

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


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

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

## apg\_plan\_mgmt.max\_plans
<a name="AuroraPostgreSQL.Optimize.Parameters.max_plans"></a>

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

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


| 默认值 | 允许值 | 说明 | 
| --- | --- | --- | 
| 10000 | 10-2147483647 | `apg_plan_mgmt.dba_plans` 视图中可存储的最大计划数。<br />Aurora PostgreSQL 版本 10 及更早版本的原定设置值为 1000。 | 

有关更多信息，请参阅 [在 dba\_plans 视图中检查 Aurora PostgreSQL 查询计划](AuroraPostgreSQL.Optimize.ViewPlans.md)。

## apg\_plan\_mgmt.plan\_hash\_version
<a name="AuroraPostgreSQL.Optimize.Parameters.plan_hash_version"></a>

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

 更改此参数的值后，必须调用 `apg_plan_mgmt.validate_plans('update_plan_hash')`。它使用安装的 apg\_plan\_mgmt 和 plans 表中的条目更新每个数据库中的 plan\_hash 值。有关更多信息，请参阅 [验证计划](AuroraPostgreSQL.Optimize.Deleting.md#AuroraPostgreSQL.Optimize.Maintenance.ValidatingPlans)。



- **1**
  - **允许值:** 1 / **说明:** 原定设置的 plan\_hash 计算。
  - **允许值:** 2 / **说明:** 已修改 plan\_hash 计算以支持多架构。
  - **允许值:** 3 / **说明:** 已修改 plan\_hash 计算以支持多架构和分区表。
  - **允许值:** 4 / **说明:** 已修改 plan\_hash 计算以支持并行运算符和具体化节点。



## apg\_plan\_mgmt.plan\_retention\_period
<a name="AuroraPostgreSQL.Optimize.Parameters.plan_retention_period"></a>

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

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


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

有关更多信息，请参阅 [在 dba\_plans 视图中检查 Aurora PostgreSQL 查询计划](AuroraPostgreSQL.Optimize.ViewPlans.md)。

## apg\_plan\_mgmt.unapproved\_plan\_execution\_threshold
<a name="AuroraPostgreSQL.Optimize.Parameters.unapproved_plan_execution_threshold"></a>

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

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

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


| 默认值 | 允许值 | 说明 | 
| --- | --- | --- | 
| 0 | 0-2147483647 | 估计的计划开销，如果低于该值，则将使用未批准的计划。 | 

有关更多信息，请参阅 [使用 Aurora PostgreSQL 托管式计划](AuroraPostgreSQL.Optimize.UsePlans.md)。

## apg\_plan\_mgmt.use\_plan\_baselines
<a name="AuroraPostgreSQL.Optimize.Parameters.use_plan_baselines"></a>

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

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



- **false**
  - **允许值:** true / **说明:** 使用 apg\_plan\_mgmt.dba\_plans 中的“已批准”、“首选”或“未批准”计划。如果这些计划都不符合优化程序的所有评估标准，则它可以使用自己生成的最低成本计划。有关更多信息，请参阅 [优化程序如何选择要运行的计划](AuroraPostgreSQL.Optimize.UsePlans.md#AuroraPostgreSQL.Optimize.UsePlans.ChoosePlans)。
  - **允许值:** false / **说明:** 使用优化程序生成的最低成本计划。



您可以根据需要，评估不同的已捕获计划的响应时间以及变更计划状态。有关更多信息，请参阅 [改进 Aurora PostgreSQL 查询计划](AuroraPostgreSQL.Optimize.Maintenance.md)。

## auto\_explain.hashes
<a name="AuroraPostgreSQL.Optimize.Parameters.auto_explain.hashes"></a>

指定 auto\_explain 输出是否显示 sql\_hash 和 plan\_hash。更改此参数的值不需要重启。



- **0（关闭）**
  - **允许值:** 0（关闭） / **说明:** auto\_explain 结果不显示 sql\_hash 和 plan\_hash。
  - **允许值:** 1（开启） / **说明:** auto\_explain 结果显示 sql\_hash 和 plan\_hash。

