

# Aurora MySQL での並列クエリの最適化
<a name="aurora-mysql-parallel-query-optimizing"></a>

DB クラスターを並列クエリ用に最適化するには、どの DB クラスターが並列クエリの恩恵を受けられるか、また並列クエリ用にアップグレードするかどうかを検討します。次に、ワークロードを調整し、並列クエリ用のスキーマオブジェクトを作成します。

**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>

パラレルクエリが有効な DB クラスターを計画するには、いくつかの選択を行う必要があります。これには、セットアップステップ (完全な Aurora MySQL クラスターの作成または復元) の実行、および DB クラスター全体でパラレルクエリを有効にする範囲の決定が含まれます。

計画の一環として、以下の点を検討してください。
+ MySQL 5.7 と互換性のある Aurora MySQL を使用する場合は、プロビジョニングされたクラスターを作成する必要があります。その上で、`aurora_parallel_query` パラメータを使用してパラレルクエリを有効にします。

  既存の Aurora MySQL クラスターがある場合は、パラレルクエリを使用するために新しいクラスターを作成する必要はありません。クラスターまたはクラスター内の特定の DB インスタンスを、 `aurora_parallel_query` パラメータが有効になっているパラメータグループに関連付けることができます。これにより、パラレルクエリで使用する関連データを設定する時間と手間を減らすことができます。
+ アクセス時にパラレルクエリを使用できるように見直す必要がある大きなテーブルについての計画を立てます。いくつかの大きなテーブルでは、パラレルクエリが役立つように新しいものを作成する必要がある場合があります。例えば、全文検索インデックスを削除するなどが必要になる場合があります。詳細については、「[パラレルクエリを利用するためのスキーマオブジェクトの作成](#aurora-mysql-parallel-query-tables)」を参照してください。

### パラレルクエリと Aurora MySQL のバージョンの互換性の確認
<a name="aurora-mysql-parallel-query-checking-compatibility"></a>

パラレルクエリを使用するクラスターと互換性のある Aurora MySQL のバージョンを確認するには、AWS CLI コマンドの `describe-db-engine-versions` を使用して、`SupportsParallelQuery` フィールドの値を確認します。次のコード例は、指定された AWS リージョンのパラレルクエリクラスターで使用可能な組み合わせを確認する方法を示しています。`--query` パラメータのすべての文字列は、必ず 1 行で指定してください。

```
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
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>

 SQL ステートメント、句、およびデータタイプのいくつかには、Aurora MySQL バージョン 3 からスタートした新しいパラレルクエリサポートまたは改善されたサポートが含まれています。バージョン 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 DB クラスターのマイナーバージョンまたはパッチレベルのアップグレード](AuroraMySQL.Updates.Patching.md)」で説明されているアップグレード手順に従ってクラスターをアップグレードできます。古いクラスターでは、パラレルクエリを使用するクラスターかプロビジョニングされたクラスターかにかかわらずアップグレードできます。[**Engine version (エンジンバージョン)**] メニューの選択肢の数を減らすには、[**Show versions that support the parallel query feature (パラレルクエリ機能がサポートされているバージョンを表示)**] をオンにしてメニューのエントリをフィルタリングします。その上で、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_pq_supported` と `aurora_pq` ではなく、`aurora_parallel_query=ON` と `aurora_disable_hash_join=OFF` の設定パラメータを使用してパラレルクエリを有効にするようにしてください。`aurora_pq_supported` パラメータと `aurora_pq` パラメータは、Aurora MySQL の新しいバージョンでは非推奨になっています。

 アップグレードしたクラスターでは、`EngineMode` 属性の値は `provisioned` ではなく、`parallelquery` になります。指定したエンジンバージョンでパラレルクエリが使用できるかどうかを確認するには、`SupportsParallelQuery` コマンドの `describe-db-engine-versions` の出力の AWS CLI フィールドの値を確認します。Aurora MySQL の以前のバージョンでは、`parallelquery` の一覧に `SupportedEngineModes` があることを確認していました。

Aurora MySQL バージョン 2.09 以上にアップグレードすると、以下の機能を利用できるようになります。これらの機能は、Aurora MySQL の古いバージョンが実行されているパラレルクエリを使用するクラスターでは使用できません。
+ パフォーマンスインサイト。詳細については、「[Amazon Aurora での Performance Insights を使用したDB 負荷のモニタリング](USER_PerfInsights.md)」を参照してください。
+ バックトラック。詳細については、「[Aurora DB クラスターのバックトラック](AuroraMySQL.Managing.Backtrack.md)」を参照してください。
+ クラスターの停止とスタート。詳細については、「[Amazon Aurora DB クラスターの停止と開始](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` に切り替える前には、元のテーブルと新しいテーブルでワークロードのパフォーマンスをテストします。また、データ量の増加などの潜在的な影響も考慮してください。