选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

在副本中捕获 Aurora PostgreSQL 执行计划

聚焦模式
在副本中捕获 Aurora PostgreSQL 执行计划 - Amazon Aurora

QPM(查询计划管理)允许您捕获由 Aurora 副本生成的查询计划并将其存储在 Aurora 数据库集群的主数据库实例上。您可以从所有 Aurora 副本中收集查询计划,并在主实例的中央永久表中维护一组最佳计划。然后,您可以在需要时将这些计划应用于其他副本。这将有助于您保持执行计划的稳定性,并跨数据库集群和引擎版本提高查询性能。

先决条件

在 Aurora 副本中开启 capture_plan_baselines parameter - 将 capture_plan_baselines 参数设置为自动或手动在 Aurora 副本中捕获计划。有关更多信息,请参阅 apg_plan_mgmt.capture_plan_baselines

安装 postgres_fdw 扩展 - 必须安装 postgres_fdw 外部数据包装器扩展才能在 Aurora 副本中捕获计划。要安装扩展,请在每个数据库中运行以下命令。

postgres=> CREATE EXTENSION IF NOT EXISTS postgres_fdw;

管理 Aurora 副本的计划捕获

开启 Aurora 副本的计划捕获

您必须具有 rds_superuser 权限才能在 Aurora 副本中创建或删除计划捕获。有关用户角色和权限的更多信息,请参阅了解 PostgreSQL 角色和权限

要捕获计划,请在写入器数据库实例中调用 apg_plan_mgmt.create_replica_plan_capture 函数,如下所示:

postgres=> CALL apg_plan_mgmt.create_replica_plan_capture('endpoint', 'password');
  • 端点:Aurora Global Database 写入器端点或 cluster_endpoint 为 Aurora 副本中的计划捕获提供失效转移支持。

    有关 Aurora Global Database 写入器端点的更多信息,请参阅查看 Amazon Aurora Global Database 的端点

    有关集群端点的更多信息,请参阅 Amazon Aurora 的集群端点

  • password - 我们建议您在创建密码时遵循以下准则以增强安全性:

    • 必须至少包含 8 个字符。

    • 必须包含至少一个大写字母、一个小写字母和一个数字。

    • 必须至少包含一个特殊字符(?!#<>* 等等)。

注意

如果您更改了端点、密码或端口号,则必须使用端点和密码再次运行 apg_plan_mgmt.create_replica_plan_capture(),才能重新初始化计划捕获。否则,从 Aurora 副本中捕获计划将失败。

关闭 Aurora 副本的计划捕获

您可以通过在参数组中将 Aurora 副本中的参数 capture_plan_baselines 设置为 off,来将其关闭。

删除 Aurora 副本的计划捕获

您可以在 Aurora 副本中完全删除计划捕获,但要确保在删除之前执行相关操作。要删除计划捕获,请调用 apg_plan_mgmt.remove_replica_plan_capture,如下所示:

postgres=> CALL apg_plan_mgmt.remove_replica_plan_capture();

您必须再次调用 apg_plan_mgmt.create_replica_plan_capture(),才能使用端点和密码在 Aurora 副本中开启计划捕获。

故障排除

下文介绍了 Aurora 副本中未按预期捕获计划的排查思路和解决方法。

  • 参数设置 - 检查 capture_plan_baselines 参数是否设置为正确的值以开启计划捕获。

  • postgres_fdw 扩展已安装 - 使用以下查询来检查 postgres_fdw 是否已安装。

    postgres=> SELECT * FROM pg_extension WHERE extname = 'postgres_fdw'
  • create_replica_plan_capture() 已调用 - 使用以下命令检查用户映射是否退出。否则,请调用 create_replica_plan_capture() 以初始化该功能。

    postgres=> SELECT * FROM pg_foreign_server WHERE srvname = 'apg_plan_mgmt_writer_foreign_server';
  • 集群端点和端口号:检查端点和端口号是否合适。如果这些值不正确,则不会显示任何错误消息。

    使用以下命令验证是否在 create() 中使用了终端节点,并检查它位于哪个数据库中:

    postgres=> SELECT srvoptions FROM pg_foreign_server WHERE srvname = 'apg_plan_mgmt_writer_foreign_server';
  • reload() - 在 Aurora 副本中调用 apg_plan_mgmt.delete_plan() 之后,必须调用 apg_plan_mgmt.reload() 才能使删除函数生效。这将确保更改成功实施。

  • Password - 您必须按照上述准则在 create_replica_plan_capture() 中输入密码。否则,您将会收到错误消息。有关更多信息,请参阅管理 Aurora 副本的计划捕获。使用其他符合要求的密码。

  • 跨区域连接 - Aurora 全局数据库还支持 Aurora 副本中的计划捕获,其中写入器实例和 Aurora 副本可以位于不同的区域。确保在失效转移或切换事件发生后,使用 Aurora Global Database 写入器端点来保持连接。有关 Aurora Global Database 端点的更多信息,请参阅查看 Amazon Aurora Global Database 的端点。写入器实例和跨区域副本必须能够使用 VPC 对等进行通信。有关更多信息,请参阅 VPC 对等。如果发生跨区域故障转移,则必须将终端节点重新配置为新的主数据库集群终端节点。

    注意

    使用集群端点而不是 Aurora Global Database 写入器端点时,您将需要在执行全局失效转移或切换操作后更新集群端点。

本页内容

隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。