概要
MPPエンジンはクエリを分散し、クラスタ内の複数のTDVに処理を分散されます。
これにより、単一のTDVで処理する場合に比べて高いパフォーマンスを発揮する可能性があります。
本記事ではTDVのMPPエンジンを有効にする方法について説明します。
検証環境
製品 | バージョン |
---|---|
TDV Server |
8.5.5 |
TDV Studio |
前提条件
OS
MPPエンジンはLinuxでのみサポートされます。
対象となるLinuxOSについては以下をご参照ください。
データソース
MPPが適用可能なデータソースについては以下をご参照ください。
クエリが参照するデータソースが2つ以上であり、クエリが取得するデータセットが大量(最低でも256MB以上)であることを推奨します。
データセットが少量の場合、セットアップ時間のオーバーヘッドが発生し通常より時間がかかる可能性があります。
ポート
MPPを使用する場合、TDVが通常使用するポートに加えて、7つのポートが追加で必要となります。
詳細は以下をご参照ください。
サーバー
2台以上のクラスタ構成となっていることを推奨します。
手順
データソース設定
MPPエンジンを使用するクエリが参照しているデータソースの設定を行います。
Studioから対象のデータソースを開き、詳細タブに移動します。本手順では例としてPostgresSQLで設定を行います。
Concurrent Request Limitの値を設定します。Concurrent Request LimitではMPPエンジンで分割されたリクエストを同時に処理できる数の上限を設定しています。
Concurrent Request Limitは1以上の値を設定する必要があり、0の場合はMPPエンジンを使用することができません。
本手順ではConcurrent Request Limitを100とします。
MongoDBなどの構成タブに詳細タブが存在せず、オーバーライドタブが存在するアダプタの場合、オーバーライドタブに移動し、Concurrent Request Limitを検索する必要があります。
Concurrent Request Limitの値を設定します。
基数統計タブに移動し、統計の作成をクリックします。
ステータスの有効にチェックを入れ、モードを選択します。
モードは「列の境界統計を収集します」または「すべての統計を収集します」のどちらかを選択します。
本手順では「列の境界統計を収集します」を選択します。
設定を保存し、今すぐ収集をクリックします。
ステータスが「UP」になるまで待機します。データによっては時間がかかる場合があります。
他に使用するデータベースにも同様の設定を行います。
TDVサーバー設定
Studioから管理 > 構成をクリックします。
Server > SQL Engine > Parallel Processing を展開します。
パラメータを設定します。
各パラメータの説明は以下の通りです。
名前 | 説明 |
Enabled |
MPPエンジンを有効にするかどうかを決定します。 デフォルト値はLinux環境では "true"、WindowsとAIX環境では "false "となります。 |
Limit scalar subqueries |
スカラーサブクエリにLIMIT 1句を自動付加するかどうかを決定します。 |
Logging Level |
以下のいずれかの値に設定します。 OFF, LOW, MEDIUM, HIGH LOWでは、TDVクエリからDrillクエリ、パーティション化されたTDV仮想スキャンクエリまでの分散クエリのルーティングをトレースすることができます。 MEDIUMでは、LOWに加えて各クエリに関連するリソース割り当て情報を出力します。 HIGHでは、MEDIUMに加えて非並列化の理由を出力します。 |
Maximum Direct Memory |
MPPの並列処理のJVM プロセスに割り当てられるオフヒープメモリの最大値です。 デフォルト値はシステムメモリ全体の50%で、設定された値は0より大きくする必要があります。 |
Maximum Heap Memory |
MPPの並列処理のJVM プロセスに割り当てられるヒープメモリの最大値です。 デフォルト値はシステムメモリ全体の10%で、設定された値は0より大きくする必要があります。 |
Minimum Partition Volume |
各パーティションでフェッチされる最小データボリューム(MB単位)です。 仮想スキャンクエリ結果のボリューム推定値に基づいているため、おおよその値であることに注意してください。 デフォルト値は256です。 実行計画取得時やクエリ実行時にデータセットのスキャンが行われ、スキャンした推定値がこの設定値を超えない場合、MPPは適用されません。 |
Resource Quota per Request |
並列実行中に各リクエストが制限されるシステムリソースの割合です。 例えば、この値を100に設定するとMPPエンジンでは一度に1つのクエリしか実行できなくなり、50に設定するとMPPエンジンでは2つのクエリを同時に処理できるようになります。 |
Startup Connection Retry Count | サーバー起動時に並列ランタイムエンジンの自動設定を試みる回数です。 |
Startup Connection Retry Interval | サーバーの起動時に並列ランタイムエンジンの自動設定を再試行するまでの待機時間(ミリ秒)です。 |
動作確認
MPPエンジンを使用したいビューを開き、実行計画を表示します。
実行計画にPARALLEL FETCHと表示されていれば、当該クエリ実行時にMPPエンジンが使用されます。
一方で、MPPエンジンの設定を行っているにもかかわらず、実行計画にPARALLEL FETCHが表示されない場合は、当該クエリ実行時にMPPエンジンが使用されません。
MPPエンジンが使用できない原因は、実行計画中のNo Parallelization Reasonから確認することができます。
スクリーンショットの例では、実行計画取得時にスキャンされたテーブルなどのデータセットの推定値が、Minimum Partition Volumeを超えなかったことが原因となっています。
この場合、Minimum Partition Volumeの値を推定値の51.2MBより小さい値に設定することでMPPエンジンを使用することが可能となりますが、データセットが少量の場合、セットアップ時間のオーバーヘッドが発生し通常より時間がかかる場合があるため、注意が必要です。
クラスタ状態のTDVにMPPエンジンが使用可能なクエリを実行する場合、クエリが分散されます。
各ノードで実行されるクエリは、各ノードのリクエストタブから確認することができます。