Aurora MySQL での並列クエリの最適化 - Amazon Aurora

Aurora MySQL での並列クエリの最適化

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

パラレルクエリクラスターの計画

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

計画の一環として、以下の点を検討してください。

  • MySQL 5.7 と互換性がある Aurora MySQL を使用する場合は、Aurora MySQL 2.09 以上を選択する必要があります。その場合、必ずプロビジョニングされたクラスターを作成します。その上で、aurora_parallel_query パラメータを使用してパラレルクエリを有効にします。

    バージョン 2.09 以上を実行している既存の Aurora MySQL クラスターがある場合は、パラレルクエリを使用するために新しいクラスターを作成する必要はありません。クラスターまたはクラスター内の特定の DB インスタンスを、 aurora_parallel_query パラメータが有効になっているパラメータグループに関連付けることができます。これにより、パラレルクエリで使用する関連データを設定する時間と手間を減らすことができます。

  • アクセス時にパラレルクエリを使用できるように見直す必要がある大きなテーブルについての計画を立てます。いくつかの大きなテーブルでは、パラレルクエリが役立つように新しいものを作成する必要がある場合があります。例えば、全文検索インデックスを削除するなどが必要になる場合があります。詳細については、「パラレルクエリを利用するためのスキーマオブジェクトの作成」を参照してください。

パラレルクエリと Aurora MySQL のバージョンの互換性の確認

パラレルクエリを使用するクラスターと互換性のある 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 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 への パラレルクエリクラスターのアップグレード

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

以前のパラレルクエリクラスターを Aurora MySQL 2.09 以上にアップグレードした後、アップグレードしたクラスターでパラレルクエリを有効にします。これらのバージョンではパラレルクエリはデフォルトで無効になっており、有効にする手順も異なります。またハッシュ結合の最適化もデフォルトで無効になっているため、個別に有効にする必要があります。そのため、アップグレード後にはこれらの設定をもう一度有効にしてください。その手順については、「Aurora MySQL での並列クエリのオン/オフの切り替え」および「パラレルクエリクラスターのハッシュ結合の有効化」を参照してください。

特に、aurora_pq_supportedaurora_pq ではなく、aurora_parallel_query=ONaurora_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 の古いバージョンが実行されているパラレルクエリを使用するクラスターでは使用できません。

パラレルクエリのパフォーマンスチューニング

パラレルクエリを使用してワークロードのパフォーマンスを管理するには、この最適化が最も役立つクエリに対してパラレルクエリが使用されていることを確認します。

そのためには、以下を実行できます。

パラレルクエリを利用するためのスキーマオブジェクトの作成

パラレルクエリで使用するテーブルを作成または変更するには、「前提条件」および「制限事項」で説明されている要件を理解しておく必要があります。

パラレルクエリでは、テーブルに ROW_FORMAT=Compact または ROW_FORMAT=Dynamic の設定が使用されている必要があるため、Aurora の設定で INNODB_FILE_FORMAT 設定オプションへの変更を確認してください。SHOW TABLE STATUS ステートメントを発行して、データベース内のすべてのテーブルの行形式を確認します。

より多くのテーブルを処理するためにパラレルクエリをオンにするようにスキーマを変更する前に、必ずテストを行ってください。テストでは、パラレルクエリによってそれらのテーブルのパフォーマンスが実際に向上するかどうかを確認する必要があります。また、パラレルクエリのスキーマ要件が目標に適合していることを確認してください。

例えば、ROW_FORMAT=Compressed から ROW_FORMAT=Compact または ROW_FORMAT=Dynamic に切り替える前には、元のテーブルと新しいテーブルでワークロードのパフォーマンスをテストします。また、データ量の増加などの潜在的な影響も考慮してください。