AnalyticDB for MySQL のインタラクティブリソースグループは、クエリの同時実行数をよりきめ細かく制御するための優先度付きキューを提供します。各リソースグループには、LOWEST、LOW、NORMAL、HIGH という名前の優先度付きキューのセットがあります。クエリの優先度を設定して、クエリを異なる優先度付きキューに振り分けることができます。また、各キューの同時実行数を設定することもできます。このトピックでは、クエリの優先度とキューの同時実行数を設定する方法について説明します。
前提条件
-
ご利用のクラスターのバージョンが 3.1.6.3 以降であること。
説明マイナーバージョンを表示および更新するには、AnalyticDB for MySQL コンソールのクラスター情報 ページにある構成情報 セクションに移動します。
-
リソースグループは、XIHE エンジンを使用するインタラクティブリソースグループである必要があります。
機能概要
クエリの優先度
各インタラクティブリソースグループには、LOWEST、LOW、NORMAL、HIGH の 4 つの優先度付きキューのセットがあります。デフォルトでは、通常の SELECT クエリは NORMAL キューに入り、INSERT INTO SELECT、DELETE SELECT、INSERT OVERWRITE SELECT などの他の抽出・変換・書き出し (ETL) クエリは LOWEST キューに入ります。各クエリに優先度を設定して、クエリを異なるキューに振り分けることができます。同じ優先度付きキュー内では、優先度の値が高いクエリが先に実行されます。たとえば、`query_priority=8` のクエリは `query_priority=6` のクエリよりも先に実行されます。
各キューの優先度の範囲は次のとおりです。
キューの同時実行数
各優先度付きキューに対して、最大同時実行クエリ数と最大キューイングクエリ数を設定できます。
-
優先度付きキューで実行中のクエリ数が最大同時実行クエリ数に達すると、新しいクエリはキューに追加されます。
-
キューに追加されたクエリ数が最大値に達すると、新しいクエリは拒否されます。
-
実行中のクエリが完了すると、次に最も優先度の高いキュー内のクエリが実行されます。複数のキュー内のクエリが同じ優先度を持つ場合、それらは先入れ先出し (FIFO) 順で実行されます。
クエリ優先度の有効化
-
クラスターバージョン 3.1.8.2 以降では、クエリの優先度はデフォルトで有効になっています。
-
バージョン 3.1.6.3 から 3.1.8.2 未満のクラスターでは、次のステートメントを実行して、手動でクエリの優先度を有効にする必要があります:
SET ADB_CONFIG XIHE_ENV_QUERY_PRIORITY_QUEUE_ENABLE=true;
クエリ優先度の設定
ETL クエリのデフォルトの優先度は LOWEST (値:5) です。通常の SELECT クエリのデフォルトの優先度は NORMAL (値:25) です。クエリの優先度を上げ下げするには、次のいずれかの方法を使用できます。
注意事項
INSERT INTO ... VALUES(...) ステートメントは、クエリ優先度の設定をサポートしていません。
方法
-
Workload Manager を使用して HINT を自動的に追加することを推奨します。詳細については、「クエリの優先度」をご参照ください。
-
クエリ文の前に次の HINT を追加して、クエリの優先度を設定します。
/*+ query_priority=<Priority value>*/ select_statementPriority value:0 から 39 までの整数を指定できます。数値が大きいほど優先度が高くなります。また、LOWEST、LOW、NORMAL、HIGH のいずれかの文字列値を使用することもできます。これらの文字列は、それぞれ整数値 5、15、25、35 に対応します。
例
-
優先度を HIGH に設定して、クエリを HIGH キューに送信します。
/*+ query_priority=HIGH*/ SELECT * FROM test_table; -
優先度を 35 に設定して、クエリを HIGH キューに送信します。
/*+ query_priority=35*/ SELECT * FROM test_table;
キューの同時実行数の設定
インタラクティブリソースグループの優先度付きキューに対して、最大同時実行クエリ数と最大キューサイズを設定できます。これらの設定は、グローバルに、または単一のリソースグループに対して構成できます。
方法
-
優先度付きキューのグローバルな同時実行数を設定するには、次のステートメントを実行します:
SET ADB_CONFIG <concurrency-parameter> = <value>。 -
特定のリソースグループの優先度付きキューの同時実行数を設定するには、次のステートメントを実行します:
SET ADB_CONFIG <resource_group_name>.<concurrency_parameter> = <value>。
単一のリソースグループに対する優先度付きキューの同時実行数の設定は、予約モードのデータウェアハウス クラスターではサポートされていません。
同時実行数パラメータのリスト
-
クラスターの合計キューサイズは、単一ノードのキューサイズにフロントノードの数を掛けたものです。数式は次のとおりです:クラスターの合計キューサイズ = (単一ノードのキューサイズ) × (フロントノードの数)。
-
優先度付きキューのパラメータ設定は、すべてのフロントノードで同時に有効になります。
-
フロントノードは FrontNode リソースです。詳細については、「アクセスレイヤーの高可用性」をご参照ください。
|
キュー名 |
設定パラメータ |
デフォルト値 |
説明 (単一のリソースグループの場合) |
|
LOWEST (ETL) キュー |
XIHE_ENV_QUERY_ETL_MAX_CONCURRENT_SIZE |
20 |
単一のフロントノードにおける LOWEST キューの最大同時実行クエリ数は 20 です。 |
|
XIHE_ENV_QUERY_ETL_MAX_QUEUED_SIZE |
200 |
単一のフロントノードにおける LOWEST キューの最大キューイングクエリ数は 200 です。 |
|
|
LOW キュー |
XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE |
20 |
単一のフロントノードにおける LOW キューの最大同時実行クエリ数は 20 です。 |
|
XIHE_ENV_QUERY_LOW_PRIORITY_MAX_QUEUED_SIZE |
200 |
単一のフロントノードにおける LOW キューの最大キューイングクエリ数は 200 です。 |
|
|
NORMAL キュー |
XIHE_ENV_QUERY_NORMAL_MAX_CONCURRENT_SIZE |
20 |
単一のフロントノードにおける NORMAL キューの最大同時実行クエリ数は 20 です。 |
|
XIHE_ENV_QUERY_NORMAL_MAX_QUEUED_SIZE |
200 |
単一のフロントノードにおける NORMAL キューの最大キューイングクエリ数は 200 です。 |
|
|
HIGH キュー |
XIHE_ENV_QUERY_HIGH_MAX_CONCURRENT_SIZE |
40 |
単一のフロントノードにおける HIGH キューの最大同時実行クエリ数は 40 です。 |
|
XIHE_ENV_QUERY_HIGH_MAX_QUEUED_SIZE |
400 |
単一のフロントノードにおける HIGH キューの最大キューイングクエリ数は 400 です。 |
例
-
クラスター内のすべてのリソースグループに対して、LOW キューの最大同時実行クエリ数を 5 に設定します。
SET ADB_CONFIG XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE = 5; -
`rg1` リソースグループに対して、LOW キューの最大同時実行クエリ数を 5 に設定します。
SET ADB_CONFIG rg1.XIHE_ENV_QUERY_LOW_PRIORITY_MAX_CONCURRENT_SIZE = 5;
キューの同時実行数の表示
-
実行中のクエリの最大数とキュー内のクエリの最大数のグローバル設定を表示するには、次のステートメントを実行します:
SHOW ADB_CONFIG KEY=<concurrency_parameter>;。 -
特定のリソースグループの実行中のクエリの最大数とキュー内のクエリの最大数を表示するには、次のステートメントを実行します:
SHOW ADB_CONFIG KEY='<resource group name>.<concurrency parameter>';。
キュー内の SQL の表示
どの SQL ステートメントがなぜキューに入れられているかを確認するには、次のステートメントを実行して、キューで待機しているステートメントを含む、現在のすべての SQL ステートメントの実行ステータスを表示します:
SHOW FULL PROCESSLIST;
返された結果で、次のフィールドを確認します:
-
State:SQL ステートメントの実行ステータス。
QUEUEDは、ステートメントが実行を待ってキューに入っていることを示します。このステータスは、同時実行クエリ数がXIHE_ENV_QUERY_NORMAL_MAX_CONCURRENT_SIZEパラメータの値を超えた場合に表示されます。PLANNINGは、ステートメントの実行が計画中であることを示します。 -
Time:ステートメントが実行中またはキューに入っていた時間 (秒単位)。
-
Info:SQL ステートメントの内容。
キューイングが開始されるタイミングを決定するキューの同時実行数パラメータを確認するには、次のステートメントを実行します:
SHOW ADB_CONFIG KEY=XIHE_ENV_QUERY_NORMAL_MAX_CONCURRENT_SIZE;
キューに入れられた SQL ステートメントを調査するには、次のトラブルシューティングプロセスを使用します:
-
SHOW ADB_CONFIGを実行して、現在の同時実行数パラメータ設定を確認します。 -
SHOW FULL PROCESSLISTを実行し、いずれかのステートメントのStateフィールドにQUEUEDが表示されているかどうかを確認します。 -
キューイングの状況に基づいて、同時実行数の設定を調整するか、SQL ステートメントを最適化します。