

# 在 Aurora MySQL 中优化并行查询
<a name="aurora-mysql-parallel-query-optimizing"></a>

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

**Contents**
+ [规划并行查询集群](#aurora-mysql-parallel-query-planning)
  + [检查并行查询的 Aurora MySQL 版本兼容性](#aurora-mysql-parallel-query-checking-compatibility)
+ [并行查询的升级注意事项](#aurora-mysql-parallel-query-upgrade)
  + [将并行查询集群升级到 Aurora MySQL 版本 3](#aurora-mysql-parallel-query-upgrade-pqv2)
  + [升级到 Aurora MySQL 2.09 及更高版本](#aurora-mysql-parallel-query-upgrade-2.09)
+ [并行查询的性能优化](#aurora-mysql-parallel-query-performance)
+ [创建架构对象以利用并行查询](#aurora-mysql-parallel-query-tables)

## 规划并行查询集群
<a name="aurora-mysql-parallel-query-planning"></a>

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

作为规划的一部分，考虑以下事项：
+ 如果您使用与 MySQL 5.7 兼容的 Aurora MySQL，则必须创建预置集群。然后，使用 `aurora_parallel_query` 参数开启并行查询。

  如果已有 Aurora MySQL 集群，则无需创建新集群即可使用并行查询。您可以将集群或集群中的特定数据库实例与开启了 `aurora_parallel_query` 参数的参数组相关联。这样，您可以减少设置要与并行查询结合使用的相关数据的时间和精力。
+ 规划需要重新组织的任何大型表，以便在访问它们时可以使用并行查询。您可能需要创建一些大型表的新版本，其中并行查询非常有用。例如，您可能需要删除全文搜索索引。有关详细信息，请参阅[创建架构对象以利用并行查询](#aurora-mysql-parallel-query-tables)。

### 检查并行查询的 Aurora MySQL 版本兼容性
<a name="aurora-mysql-parallel-query-checking-compatibility"></a>

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

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

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

```
5.7.mysql_aurora.2.11.1
5.7.mysql_aurora.2.11.2
5.7.mysql_aurora.2.11.3
5.7.mysql_aurora.2.11.4
5.7.mysql_aurora.2.11.5
5.7.mysql_aurora.2.11.6
5.7.mysql_aurora.2.12.0
5.7.mysql_aurora.2.12.1
5.7.mysql_aurora.2.12.2
5.7.mysql_aurora.2.12.3
5.7.mysql_aurora.2.12.4
8.0.mysql_aurora.3.04.0
8.0.mysql_aurora.3.04.1
8.0.mysql_aurora.3.04.2
8.0.mysql_aurora.3.04.3
8.0.mysql_aurora.3.05.2
8.0.mysql_aurora.3.06.0
8.0.mysql_aurora.3.06.1
8.0.mysql_aurora.3.07.0
8.0.mysql_aurora.3.07.1
```

 开始对集群使用并行查询后，可以监视性能并消除使用并行查询的障碍。有关这些说明，请参阅[并行查询的性能优化](#aurora-mysql-parallel-query-performance)。

## 并行查询的升级注意事项
<a name="aurora-mysql-parallel-query-upgrade"></a>

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

### 将并行查询集群升级到 Aurora MySQL 版本 3
<a name="aurora-mysql-parallel-query-upgrade-pqv2"></a>

 从 Aurora MySQL 版本 3 开始，一些 SQL 语句、子句和数据类型具有新的或改进的并行查询支持。从版本 3 之前的版本升级时，请检查其他查询是否可以从并行查询优化中受益。有关这些并行查询增强的信息，请参阅 [列数据类型](aurora-mysql-parallel-query-sql.md#aurora-mysql-parallel-query-sql-datatypes)、[分区表](aurora-mysql-parallel-query-sql.md#aurora-mysql-parallel-query-sql-partitioning) 和 [聚合函数、GROUP BY 子句和 HAVING 子句](aurora-mysql-parallel-query-sql.md#aurora-mysql-parallel-query-sql-aggregation)。

如果您要从 Aurora MySQL 2.08 或更低版本升级并行查询集群，还可以了解开启并行查询的方式的变化。为此，请阅读 [升级到 Aurora MySQL 2.09 及更高版本](#aurora-mysql-parallel-query-upgrade-2.09)。

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

### 升级到 Aurora MySQL 2.09 及更高版本
<a name="aurora-mysql-parallel-query-upgrade-2.09"></a>

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

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

特别是，您可以通过使用配置参数 `aurora_parallel_query=ON` 和 `aurora_disable_hash_join=OFF` 而不是 `aurora_pq_supported` 和 `aurora_pq` 来开启并行查询。`aurora_pq_supported` 和 `aurora_pq` 参数在较新 Aurora MySQL 版本中已弃用。

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

升级到 Aurora MySQL 版本 2.09 或更高版本后，您可以利用以下功能。这些功能不适用于运行较旧 Aurora MySQL 版本的并行查询集群。
+ Performance Insights。有关更多信息，请参阅“[在 Amazon Aurora 上使用性能详情监控数据库负载](USER_PerfInsights.md)”。
+ 正在回溯。有关更多信息，请参阅“[回溯 Aurora 数据库集群](AuroraMySQL.Managing.Backtrack.md)”。
+ 停止并启动集群。有关更多信息，请参阅“[停止和启动 Amazon Aurora 数据库集群](aurora-cluster-stop-start.md)”。

## 并行查询的性能优化
<a name="aurora-mysql-parallel-query-performance"></a>

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

 为此，您可以执行以下操作：
+  确保您的最大表与并行查询兼容。您可以更改表属性或重新创建一些表，以便对这些表的查询可以利用并行查询优化。要了解如何操作，请参阅[创建架构对象以利用并行查询](#aurora-mysql-parallel-query-tables)。
+  监控哪些查询使用并行查询。要了解如何操作，请参阅[监控 Aurora MySQL 的并行查询](aurora-mysql-parallel-query-monitoring.md)。
+  验证并行查询正用于数据最密集且长时间运行的查询（工作负载具有适当的并发级别）。要了解如何操作，请参阅[验证哪些语句使用 Aurora MySQL 的并行查询](aurora-mysql-parallel-query-verifying.md)。
+  优化 SQL 代码以开启并行查询，以应用于您期望的查询。要了解如何操作，请参阅[Aurora MySQL 中用于并行查询的 SQL 构造](aurora-mysql-parallel-query-sql.md)。

## 创建架构对象以利用并行查询
<a name="aurora-mysql-parallel-query-tables"></a>

 在创建或修改您计划用于并行查询的表之前，请确保自行熟悉 [先决条件](aurora-mysql-parallel-query.md#aurora-mysql-parallel-query-prereqs)和 [限制](aurora-mysql-parallel-query.md#aurora-mysql-parallel-query-limitations)中描述的要求。

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

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

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