

# 在 Aurora MySQL 中开启和关闭并行查询
<a name="aurora-mysql-parallel-query-enabling"></a>

如果开启了并行查询，Aurora MySQL 确定是否在运行时为每个查询使用该功能。对于联接、联合和子查询等，Aurora MySQL 确定每个查询块是否在运行时使用并行查询。有关详细信息，请参阅 [验证哪些语句使用 Aurora MySQL 的并行查询](aurora-mysql-parallel-query-verifying.md) 和 [Aurora MySQL 中用于并行查询的 SQL 构造](aurora-mysql-parallel-query-sql.md)。

您可以使用 **aurora\$1parallel\$1query** 选项，在数据库实例的全局和会话级别动态开启和关闭并行查询。默认情况下，您可以更改数据库集群组中的 `aurora_parallel_query` 设置，以启用或关闭并行查询。

```
mysql> select @@aurora_parallel_query;
+------------------------+
| @@aurora_parallel_query|
+------------------------+
|                      1 |
+------------------------+
```

 要在会话级别切换 `aurora_parallel_query` 参数，请使用标准方法更改客户端配置设置。例如，可以通过 `mysql` 命令行或在 JDBC 或 ODBC 应用程序中执行此操作。标准 MySQL 客户端上的命令是 `set session aurora_parallel_query = {'ON'/'OFF'}`。您还可以将会话级参数添加到 JDBC 配置或应用程序代码中，以动态开启或关闭并行查询。

 您可以为特定数据库实例或整个集群永久更改 `aurora_parallel_query` 参数的设置。如果您在数据库参数组中指定参数值，则该值仅适用于集群中的特定数据库实例。如果在数据库集群参数组中指定参数值，则集群中的所有数据库实例都将继承相同的设置。要切换 `aurora_parallel_query` 参数，请使用处理参数组的方法，如[Amazon Aurora 的参数组](USER_WorkingWithParamGroups.md)中所述。按照以下步骤进行操作：

1.  创建自定义集群参数组（推荐）或自定义数据库参数组。

1.  在此参数组中，将 `parallel_query` 更新为所需的值。

1.  根据您创建的是数据库集群参数组还是数据库参数组，将参数组附加到 Aurora 集群或计划使用并行查询功能的特定数据库实例。
**提示**  
因为 `aurora_parallel_query` 是一个动态参数，所以在更改此设置后不需要重启集群。但是，在切换选项之前使用并行查询的任何连接都将继续执行此操作，直到连接关闭或实例重启。

 您可以使用 [ModifyDBClusterParameterGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBClusterParameterGroup.html) 或 [ModifyDBParameterGroup](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBParameterGroup.html) API 操作或 AWS 管理控制台修改并行查询参数。

可以为并行查询集群开启哈希联接，使用 Amazon RDS 控制台或 AWS CLI 开启和关闭并行查询，并覆盖并行查询优化器。

**Contents**
+ [为并行查询集群开启哈希联接](#aurora-mysql-parallel-query-enabling-hash-join)
+ [使用控制台开启和关闭并行查询](#aurora-mysql-parallel-query-enabling-console)
+ [使用 CLI 开启和关闭并行查询](#aurora-mysql-parallel-query-enabling-cli)
+ [覆盖并行查询优化程序](#aurora-mysql-parallel-query-enabling.aurora_pq_force)

## 为并行查询集群开启哈希联接
<a name="aurora-mysql-parallel-query-enabling-hash-join"></a>

并行查询通常用于受益于哈希联接优化的各种资源密集型查询。因此，确保为计划使用并行查询的集群开启哈希联接非常有用。有关如何有效使用哈希联接的信息，请参阅 [使用哈希联接优化大型 Aurora MySQL 联接查询](AuroraMySQL.BestPractices.Performance.md#Aurora.BestPractices.HashJoin)。

## 使用控制台开启和关闭并行查询
<a name="aurora-mysql-parallel-query-enabling-console"></a>

 通过使用参数组，可以在数据库实例级别或数据库集群级别开启或关闭并行查询。

**要使用 AWS 管理控制台 开启或关闭数据库集群的并行查询**

1.  创建一个自定义参数组，如[Amazon Aurora 的参数组](USER_WorkingWithParamGroups.md)中所述。

1. 将 **aurora\$1parallel\$1query** 更新为 **1**（开启）或 **0**（关闭）。对于可以使用并行查询功能的集群，将原定设置关闭 **aurora\$1parallel\$1query**。

1.  如果使用自定义集群参数组，请将其附加到计划使用并行查询功能的 Aurora 数据库集群。如果您使用自定义数据库参数组，请将其附加到集群中的一个或多个数据库实例。我们建议使用集群参数组。这样做可确保集群中的所有数据库实例对并行查询和关联功能（如哈希联接）具有相同的设置。

## 使用 CLI 开启和关闭并行查询
<a name="aurora-mysql-parallel-query-enabling-cli"></a>

 您可以使用 `modify-db-cluster-parameter-group` 或 `modify-db-parameter-group` 命令修改并行查询参数。根据您是通过数据库集群参数组还是通过数据库参数组指定 `aurora_parallel_query` 的值，选择相应的命令。

**要使用 CLI 开启或关闭数据库集群的并行查询**
+  使用 `modify-db-cluster-parameter-group` 命令修改并行查询参数。使用如下命令。用适当的名称替换您自己的自定义参数组。用 `ON` 或 `OFF`替换 `ParameterValue` 选项的 `--parameters` 部分。

  ```
  $ aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name cluster_param_group_name \
    --parameters ParameterName=aurora_parallel_query,ParameterValue=ON,ApplyMethod=pending-reboot
  {
      "DBClusterParameterGroupName": "cluster_param_group_name"
  }
  
  aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name cluster_param_group_name \
    --parameters ParameterName=aurora_pq,ParameterValue=ON,ApplyMethod=pending-reboot
  ```

 您还可以在会话级别开启或关闭并行查询，例如，通过 `mysql` 命令行或在 JDBC 或 ODBC 应用程序中。为此，请使用标准方法更改客户端配置设置。例如，对于 Aurora MySQL，标准 MySQL 客户端上的命令是 `set session aurora_parallel_query = {'ON'/'OFF'}`。

 您还可以将会话级参数添加到 JDBC 配置或应用程序代码中，以动态开启或关闭并行查询。

## 覆盖并行查询优化程序
<a name="aurora-mysql-parallel-query-enabling.aurora_pq_force"></a>

您可以使用 `aurora_pq_force` 会话变量覆盖并行查询优化程序并为每个查询请求并行查询。我们建议您仅出于测试目的这样做。以下示例显示如何在会话中使用 `aurora_pq_force`。

```
set SESSION aurora_parallel_query = ON;
set SESSION aurora_pq_force = ON;
```

要关闭覆盖，请执行以下操作：

```
set SESSION aurora_pq_force = OFF;
```