このトピックでは、PolarDBのインメモリ列インデックス (IMCI) 機能によって提供されるマルチノード超並列処理 (MPP) 機能について説明します。
背景情報
PolarDBは、ハイブリッドトランザクション /分析処理 (HTAP) ソリューションとしてIMCIを提供します。 クエリに含まれるデータ量の増加、クエリの複雑さ、およびObject Storage Service (OSS) テーブルのクエリ数に伴い、単一の読み取り専用列ストアノードで大量のデータのクエリを処理できなくなります。 この問題に対処するために、IMCIはマルチノードMPPおよびリソーススケーリング機能を提供します。
アーキテクチャ
次の図は、IMCIベースのマルチノードMPPのアーキテクチャを示しています。
IMCIベースのマルチノードMPPは、複数の読み取り専用列ストアノードで構成され、IMCIのマルチノード並列実行を実装するマルチノード実行グループです。 クエリのワークロードが変更された場合、読み取り専用列ストアノードの数をすばやく増減して、クエリのパフォーマンスとコンピューティングコストのバランスを取ることができます。
マルチノードMPPは、幅広い分析処理 (AP) ワークロードを処理できます。 IMCIオプティマイザは、SQL文のトランザクション処理 (TP) メソッドを正確に決定し、SQL文のシングルノード実行またはマルチノード並列実行を選択し、ビジネス要件に基づいてSQL文を目的の列ストアノードに配布できます。
シナリオ
マルチノードMPPが提供するスケーリング機能を使用して、クエリで使用されるCPUリソースとIOPSを増やし、レイテンシを削減する必要があります。
スループットを高めるためにクエリを複数のノードに分散して、メモリ内クエリ処理を実装する必要があります。
サポートされているバージョン
管理するクラスターは、リビジョンバージョンが8.0.1.1.38以降のEnterprise EditionのPolarDB for MySQL 8.0.1クラスターである必要があります。
使用上の注意
複数の読み取り専用列ストアノードをクラスターに追加できます。 詳細については、「読み取り専用列ストアノードの追加」をご参照ください。
マルチノードMPPを有効にして使用する方法の詳細については、テクニカルサポートのDingTalkグループ (ID: 27520023189) に参加してください。
ベストプラクティス
パーティションキー
PolarDBでは、レベル1またはレベル2のパーティションは、HASHまたはKEYパーティショニング戦略を使用します。 マルチノードMPPの実行中、パーティションは共有なし戦略を使用します。 共有なし戦略は、各パーティションが1つのノードのみによって処理されることを示します。 これにより、次の利点が得られます。
データキャッシュ機能の向上: 各ノードは特定のパーティションを処理するだけで済みます。これにより、各ノードはローカルメモリを使用してデータをより効率的にキャッシュできます。
最適化されたクエリパフォーマンス: パーティションキーに基づいて
JOIN操作とGROUP BYクエリを実行する場合、各ノードでデータをローカルで処理するだけで済みます。これにより、複数のノード間のデータ転送量が大幅に削減されます。
上記の利点のために、テーブルの作成時に共通パーティションキーJOINとGROUP BYに基づいて、テーブルにHASHまたはKEYタイプのレベル1またはレベル2のパーティションを設定することをお勧めします。 さらに、すべてのHASHまたはKEYテーブルに同じ数のパーティションが含まれている必要があります。 2つのテーブルのパーティション数が異なる場合、テーブル間のJOIN操作はローカルで処理できません。
パーティションの数として大きな素数を指定することを推奨します。 これにより、不均一なデータ分散の可能性を減らし、クエリのパフォーマンスとシステムリソースの効率的な利用をさらに向上させます。
ソートキー
大量のデータをフィルタリングするには、RANGEパーティションを作成するか、列ストアにソートキーを追加します。 RANGEパーティションを作成し、WHERE句の述語でフィルタリングできる列のソートキーを追加することをお勧めします。 たとえば、次のクエリ条件を指定します。WHERE date > '2024-10-01 'AND date < '2024-10-07' AND customer_id = 'X231。 この場合、date列にRANGEパーティションを作成し、customer_id列にIMCIソートキーを追加できます。 これにより、処理する必要のあるデータ量を大幅に削減でき、クエリのパフォーマンスが向上します。 IMCIのパーティションとソートキーを適切に設定して、データ処理効率を向上させ、大量のデータに対するクエリの応答速度を向上させることができます。 詳細については、「概要」および「IMCIのソートキーの設定」をご参照ください。
パフォーマンステスト
マルチノードMPPのパフォーマンステスト結果の詳細については、「IMCIパフォーマンス」をご参照ください。
関連する API
マルチノードMPPを使用して現在のSQL文を実行できるかどうかを確認します。
SET_VAR(imci_plan_use_mpp=forced)ヒントをSQL文に追加して、SQL文の実行計画を表示できます。 これにより、マルチノードMPPを使用してSQL文を実行できるかどうかを判断できます。 例:EXPLAIN SELECT /*+ SET_VAR(imci_plan_use_mpp=forced) */ COUNT(*) FROM nation;サンプル結果:
+----+----------------------------+--------+---------------------------------------------------------------------------------+ | ID | Operator | Name | Extra Info | +----+----------------------------+--------+---------------------------------------------------------------------------------+ | 1 | Select Statement | | IMCI Execution Plan (max_dop = 11, max_query_mem = 37438953472) | | 2 | └─Compute Scalar | | | | 3 | └─Aggregation | | | | 4 | └─Consume | | Consume ProducerPipeId: 1 | | 5 | └─Exchange | | PipeId: 1, Consumers: 23377031, Producers: 23377031,23377032, Part Type: Gather | | 6 | └─Aggregation | | | | 7 | └─Table Scan | nation | | +----+----------------------------+--------+---------------------------------------------------------------------------------実行プランにExchange演算子が含まれている場合、マルチノードMPPを使用してSQL文を実行できます。
マルチノードMPPを使用してSQL文を並列実行するかどうかを確認します。
マルチノードMPPを使用してSQL文を実行できることを確認した後、SQL文の実行計画を表示して、SQL文の実行にマルチノードMPPが使用されるかどうかを確認できます。 実行プランにExchange演算子が含まれている場合、SQL文はマルチノードMPPを使用して並列に実行されます。