すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:スプリットフロー制御

最終更新日:Jun 12, 2024

AnalyticDB for MySQLは、タスクまたはノードで実行される同時分割スキャンを管理できる分割フロー制御機能を提供します。 この機能は、高いスキャン同時実行性と過剰なリソース使用によって引き起こされるノードの不安定性を防ぎます。 このトピックでは、分割フロー制御機能を有効にし、同時分割スキャンのクォータを設定する方法について説明します。

前提条件

V3.1.10.0以降のAnalyticDB for MySQLクラスターが作成されます。

説明

クラスターのマイナーバージョンをクエリする方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

背景情報

AnalyticDB for MySQLでクエリを実行すると、システムはデータソースからデータをスキャンし、分割スキャンはストレージノードまたは計算ノードで実行されます。 ノードで多数の同時分割スキャンを実行すると、次の問題が発生する可能性があります。

  • 内部テーブルの場合、同時分割スキャンはストレージノードのI/Oリソースを競合します。 これにより、CPU使用率とメモリ使用量が増加します。 この場合、ストレージノードが不安定になる。

  • 外部テーブルの場合、スキャン効率はデータソースによって異なります。 同時分割スキャンの数がクォータを超えると、新しい分割スキャンは計算ノードのリソースを消費し、スキャン全体を高速化する代わりに他のクエリに影響を与えます。

上記の問題を解決するために、AnalyticDB for MySQLは分割フロー制御機能を提供します。 デフォルトでは、スプリットフロー制御機能は有効になっています。

用語

タスク

AnalyticDB for MySQLでクエリを実行すると、クエリは複数の段階に分けられます。 各ステージは、ノード間で実行される複数のタスクで構成されます。

スプリット

AnalyticDB for MySQLでテーブルをスキャンすると、テーブルは複数の分割に分割されます。 各分割は、分割スキャンを実行するタスクに割り当てられます。 タスクには複数の分割スキャンを含めることができます。

概要

各タスクには、同時分割スキャンのクォータがあります。 タスクで実行される同時分割スキャンの数がクォータ未満の場合、タスクは新しい分割スキャンを開始できます。 クォータに達すると、実行中の分割スキャンが完了した後にのみ、新しい分割スキャンを開始できます。 AnalyticDB for MySQLは、ノードとタスクのスプリットフロー制御機能を提供します。 タスクの同時分割スキャンのクォータは、タスクが実行されるノードの同時分割スキャンの全体的なクォータに基づいて動的に調整できます。

スプリットフロー制御機能の無効化または再有効化

デフォルトでは、スプリットフロー制御機能は有効になっています。 次のいずれかのステートメントを実行して、分割フロー制御機能を無効化または再有効化することができます。

  • クラスターのスプリットフロー制御機能を無効化または再有効化します。

    SET ADB_CONFIG SPLIT_FLOW_CONTROL_ENABLED=true | false;
  • クエリの分割フロー制御機能を無効化または再有効化します。

    /* + SPLIT_FLOW_CONTROL_ENABLED=true | false */ SELECT * FROMテーブル;

タスクの同時分割スキャンのクォータをで動的に調整できるようにする

タスク内の同時分割スキャンのクォータを動的に調整できる機能を有効または無効にする

タスクの同時分割スキャンのクォータを動的に調整できる機能を無効にすると、タスクの同時分割スキャンのデフォルトのクォータは32になります。 デフォルト値を変更するには、SET ADB_CONFIG TARGET_RUNNING_SPLITS_LIMIT_PER_TASK=<value>; 文を実行します。

この機能を有効にすると、タスクの同時分割スキャンのクォータを、タスクが実行されるノードの同時分割スキャンの全体的なクォータに基づいて動的に調整できます。

SET ADB_CONFIG NODE_LEVEL_SPLIT_FLOW_CONTROL_ENABLED=true | false;
重要

タスクの同時分割スキャンのクォータを動的に調整できる機能を有効にする前に、分割フロー制御機能が有効になっていることを確認してください。 SHOW ADB_CONFIG KEY=SPLIT_FLOW_CONTROL_ENABLED; ステートメントを実行して、スプリットフロー制御機能が有効になっているかどうかを確認できます。

タスクで同時分割スキャンのクォータを調整する

移動方法

SETステートメントを実行するか、ヒントを使用して、クラスターまたはクエリのタスクで同時分割スキャンのクォータを調整できます。

  • クラスターのタスクで同時分割スキャンのクォータを調整します。

    SET ADB_CONFIG <クォータ関連パラメーター >=< 値>;
  • クエリのタスクで同時分割スキャンのクォータを調整します。

    /* + <クォータ関連パラメーター >=< value>*/SELECT * FROM注文;

クォータ関連のパラメーター

次の表に、タスクで同時分割スキャンのクォータを動的に調整するために使用できるパラメーターを示します。

パラメーター

説明

MIN_RUNNING_SPLITS_LIMIT_PER_TASK

タスク内の同時分割スキャンの最小クォータ。 デフォルト値は 1 です。 有効な値の範囲は、1からTARGET_RUNNING_SPLITS_LIMIT_PER_TASKパラメーターの値までです。

タスクの同時分割スキャンのクォータを動的に調整できる機能を有効にした後、ノードで多数の同時分割スキャンを実行する場合、タスクの同時分割スキャンのクォータは動的に減少し、減少後のクォータはこのパラメーターの値以上になります。

TARGET_RUNNING_SPLITS_LIMIT_PER_TASK

タスクの同時分割スキャンの中間クォータ。 実際のクォータは、このパラメーターの値に基づいて動的に増減されます。 デフォルト値は32です。 有効な値は、MIN_RUNNING_SPLITS_LIMIT_PER_TASKパラメーターの値からMAX_RUNNING_SPLITS_LIMIT_PER_TASKパラメーターの値までの範囲です。

ノード上のすべてのタスクのクォータの中間値の合計がノードのクォータを超えない場合、各タスクのクォータは動的に増加します。 それ以外の場合、各タスクのクォータは動的に減少します。

MAX_RUNNING_SPLITS_LIMIT_PER_TASK

タスクの同時分割スキャンの最大クォータ。 デフォルト値は64です。 このパラメーターの値は、TARGET_RUNNING_SPLITS_LIMIT_PER_TASKパラメーターの値より大きくなければなりません。

タスクの同時分割スキャンのクォータを動的に調整できる機能を有効にした後、ノードで少数の同時分割スキャンを実行すると、タスクの同時分割スキャンのクォータが動的に増加し、増加後のクォータはこのパラメーターの値以下になります。

タスク で同時分割スキャンのクォータを調整する方法に関する提案

AnalyticDB for MySQLを使用すると、異なるクエリのタスクで同時分割スキャンのために異なるクォータを設定できます。 これにより、ビジネス要件に基づいてタスクにリソースを割り当てることができます。 例:

  • 点クエリなど、短い応答時間 (RT) と少数の分割スキャンが必要なクエリの場合は、MIN_RUNNING_SPLITS_LIMIT_PER_TASKTARGET_RUNNING_SPLITS_LIMIT_PER_TASKMAX_RUNNING_SPLITS_LIMIT_PER_TASKパラメーターを大きい値に設定するか、set ADB_CONFIG SPLIT_FLOW_CONTROL_ENABLED=false; を実行して、分割フロー制御機能を無効にできます。 このようにして、クエリのすべての分割スキャンを迅速に開始できます。

  • クエリが多数の分割スキャンを必要とするが、より高い優先度を必要としない場合は、TARGET_RUNNING_SPLITS_LIMIT_PER_TASKパラメーターを小さい値に設定して、リソースが不足しているときに重要なクエリに与える影響を減らすことができます。 リソースがアイドル状態の場合、タスク内の同時分割スキャンのクォータを動的に増やして、スキャン効率を向上させることができます。

  • 外部テーブルをクエリする場合は、データソースの送信制限などの要因に基づいてクォータを設定できます。

  • クラスターのすべてのタスクで同時分割スキャンの最小クォータを24に設定します。

    SET ADB_CONFIG MIN_RUNNING_SPLITS_LIMIT_PER_TASK=24;
  • クエリの特定のタスクでの同時分割スキャンの最小クォータを10に設定します。

    /* + MIN_RUNNING_SPLITS_LIMIT_PER_TASK=10 */SELECT * から注文;
  • クラスターのすべてのタスクで同時分割スキャンの最大クォータを128に設定します。

    SET ADB_CONFIG MAX_RUNNING_SPLITS_LIMIT_PER_TASK=128;
  • クエリの特定のタスクでの同時分割スキャンの最大クォータを100に設定します。

    /* + MAX_RUNNING_SPLITS_LIMIT_PER_TASK=100 */SELECT * からadb_test;

ノードでの同時分割スキャンのクォータの設定

  • ストレージノード

    デフォルトでは、ストレージノードでの同時分割スキャンのクォータは256です。 クォータが大きすぎるか小さすぎるとクラスターのパフォーマンスに影響を与える可能性があるため、デフォルト値は変更しないことをお勧めします。 次のステートメントを実行して、ストレージノードで同時分割スキャンのクォータを設定できます。

    SET ADB_CONFIG WORKER_MAX_RUNNING_SOURCE_SPLITS_PER_NODE=256;
  • 計算ノード

    デフォルトでは、計算ノードでの同時分割スキャンのクォータは256です。 クォータが大きすぎるか小さすぎるとクラスターのパフォーマンスに影響を与える可能性があるため、デフォルト値は変更しないことをお勧めします。 次のステートメントを実行して、コンピュートノードで同時分割スキャンのクォータを設定できます。

    SET ADB_CONFIG EXECUTOR_MAX_RUNNING_SOURCE_SPLITS_PER_NODE=256;
重要
  • SHOW ADB_CONFIGステートメントを実行して、ノードに設定された同時分割スキャンのクォータを照会できます。 詳細については、「SHOW ADB_CONFIG」をご参照ください。

  • ノードで同時分割スキャンのクォータを設定した後、次の理由により、クォータがすぐに有効にならない場合があります。

    • 設定したクォータは、ノードで実行されている分割スキャンではなく、開始されていない分割スキャンでのみ有効になります。 同時分割スキャンのクォータを減らすと、クォータは実行中の分割スキャンが完了した後にのみ有効になります。

    • 分割フロー制御機能を使用すると、各タスクで実行される同時分割スキャンの数が、タスクに対して設定した最小クォータよりも大きくなります。 ノード上のすべてのタスクのクォータの最小値の合計がノードのクォータよりも大きい場合、ノードで実行されている同時分割スキャンの数が、ノードに対して設定したクォータを超える可能性があります。