在 Aurora MySQL 中优化并行查询 - Amazon Aurora

在 Aurora MySQL 中优化并行查询

要优化数据库集群来进行并行查询,请考虑哪些数据库集群将从并行查询中受益,以及是否要升级来进行并行查询。然后,调整工作负载并创建用于并行查询的架构对象。

规划并行查询集群

规划开启并行查询的数据库集群需要做出一些选择。其中包括执行设置步骤(创建或还原完整 Aurora MySQL 集群),以及确定在整个数据库集群中开启并行查询的范围。

作为规划的一部分,考虑以下事项:

  • 如果您使用与 MySQL 5.7 兼容的 Aurora MySQL,则必须选择 Aurora MySQL 2.09 或更高版本。在这种情况下,您始终创建预置的集群。然后,使用 aurora_parallel_query 参数开启并行查询。

    如果您的现有 Aurora MySQL 集群运行版本 2.09 或更高版本,则无需创建新集群即可使用并行查询。您可以将集群或集群中的特定数据库实例与开启了 aurora_parallel_query 参数的参数组相关联。这样,您可以减少设置要与并行查询结合使用的相关数据的时间和精力。

  • 规划需要重新组织的任何大型表,以便在访问它们时可以使用并行查询。您可能需要创建一些大型表的新版本,其中并行查询非常有用。例如,您可能需要删除全文搜索索引。有关详细信息,请参阅创建架构对象以利用并行查询

检查并行查询的 Aurora MySQL 版本兼容性

要检查哪些 Aurora MySQL 版本与并行查询集群兼容,请使用 describe-db-engine-versions AWS CLI CLI 命令并检查 SupportsParallelQuery 字段的值。以下代码示例说明了如何检查哪些组合适用于指定 AWS 区域中的并行查询集群。确保在单行上指定完整的 --query 参数字符串。

aws rds describe-db-engine-versions --region us-east-1 --engine aurora-mysql \ --query '*[]|[?SupportsParallelQuery == `true`].[EngineVersion]' --output text

上述命令生成类似于以下内容的输出。输出可能因指定AWS区域中可用的 Aurora MySQL 版本而异。

5.7.mysql_aurora.2.11.1 8.0.mysql_aurora.3.01.0 8.0.mysql_aurora.3.01.1 8.0.mysql_aurora.3.02.0 8.0.mysql_aurora.3.02.1 8.0.mysql_aurora.3.02.2 8.0.mysql_aurora.3.03.0

开始对集群使用并行查询后,可以监视性能并消除使用并行查询的障碍。有关这些说明,请参阅并行查询的性能优化

并行查询的升级注意事项

根据升级并行查询集群时的原始版本和目标版本,您可能会发现并行查询可以优化的查询类型的增强功能。您可能还会发现不需要为并行查询指定特殊的引擎模式参数。以下各节介绍了升级已开启并行查询的集群时的注意事项。

将并行查询集群升级到 Aurora MySQL 版本 3

从 Aurora MySQL 版本 3 开始,一些 SQL 语句、子句和数据类型具有新的或改进的并行查询支持。从版本 3 之前的版本升级时,请检查其他查询是否可以从并行查询优化中受益。有关这些并行查询增强的信息,请参阅 列数据类型分区表聚合函数、GROUP BY 子句和 HAVING 子句

如果您要从 Aurora MySQL 2.08 或更低版本升级并行查询集群,还可以了解开启并行查询的方式的变化。为此,请阅读 升级到 Aurora MySQL 2.09 及更高版本

原定设置情况下,哈希联接优化在 Aurora MySQL 版本 3 中处于开启状态。早期版本中的 aurora_disable_hash_join 配置选项未使用。

升级到 Aurora MySQL 2.09 及更高版本

在 Aurora MySQL 版本 2.09 及更高版本中,并行查询适用于预调配的集群,但不需要 parallelquery 引擎模式参数。因此,您无需创建新集群或从现有快照还原,即可将并行查询与这些版本结合使用。您可以使用 升级 Aurora MySQL 数据库集群的次要版本或补丁程序级别中介绍的升级过程将集群升级到此类版本。您可以升级较旧的集群,无论它是并行查询集群还是预置集群。要减少引擎版本菜单中的选项数,可以选择显示支持并行查询功能的版本来筛选该菜单中的条目。然后,选择 Aurora MySQL 2.09 或更高版本。

将较早的并行查询集群升级到 Aurora MySQL 2.09 或更高版本后,您可以在升级后的集群中开启并行查询。默认情况下,在这些版本中,并行查询处于关闭状态,并且启用该查询的过程不同。预设情况下,哈希联接优化也处于关闭状态,必须单独开启。因此,请确保在升级后再次开启这些设置。有关此操作的说明,请参阅 在 Aurora MySQL 中开启和关闭并行查询为并行查询集群开启哈希联接

特别是,您可以通过使用配置参数 aurora_parallel_query=ONaurora_disable_hash_join=OFF 而不是 aurora_pq_supportedaurora_pq 来开启并行查询。aurora_pq_supportedaurora_pq 参数在较新 Aurora MySQL 版本中已弃用。

在升级的集群中,EngineMode 属性的值是 provisioned 而不是 parallelquery。要检查并行查询是否可用于指定的引擎版本,现在您检查 SupportsParallelQuery describe-db-engine-versions 命令输出中 AWS CLI 字段的值。在早期 Aurora MySQL 版本中,您已检查 parallelquery 列表中 SupportedEngineModes 是否存在。

升级到 Aurora MySQL 版本 2.09 或更高版本后,您可以利用以下功能。这些功能不适用于运行较旧 Aurora MySQL 版本的并行查询集群。

并行查询的性能优化

要管理并行查询工作负载的性能,请确保将并行查询用于该优化最有用的查询。

为此,您可以执行以下操作:

创建架构对象以利用并行查询

在创建或修改您计划用于并行查询的表之前,请确保自行熟悉 先决条件 限制中描述的要求。

由于并行查询要求表使用 ROW_FORMAT=CompactROW_FORMAT=Dynamic 设置,请检查 Aurora 配置设置以了解对 INNODB_FILE_FORMAT 配置选项的任何更改。发出 SHOW TABLE STATUS 语句以确认数据库中的所有表的行格式。

在更改架构以开启并行查询来处理更多表之前,请确保进行测试。测试应确认并行查询是否会导致这些表的性能净增加。此外,还要确保并行查询的架构要求与您的目标相符。

例如,在从 ROW_FORMAT=Compressed 切换到 ROW_FORMAT=CompactROW_FORMAT=Dynamic 之前,请针对原始表和新表测试工作负载的性能。此外,还要考虑其他潜在影响,例如,数据量增加。