AnalyticDB for MySQLは、対話型リソースグループの優先キュー機能を提供し、同時クエリの数を正確に制御できます。 各リソースグループは、LOWEST、LOW、NORMAL、およびHIGHキューである優先度キューのセットを有する。 クエリの優先度を設定して、クエリが異なる優先度キューに入ることを許可できます。 キューの同時クエリ数を設定することもできます。 このトピックでは、キューのクエリ優先度と同時クエリ数を設定する方法について説明します。
前提条件
V3.1.6.3以降のAnalyticDB for MySQLクラスターが作成されます。
AnalyticDB For MySQLのマイナーバージョンを表示する方法の詳細については、 Data Lakehouse Editionクラスターについては、「クラスターのマイナーバージョンを表示する方法」をご参照ください。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。
AnalyticDB For MySQL Data Warehouse Editionクラスターのマイナーバージョンを表示および更新する方法については、「クラスターのマイナーバージョンの更新」をご参照ください。
概要
クエリの優先度
各対話型リソースグループは、LOWEST、LOW、NORMAL、およびHIGHキューである優先度キューのセットを有する。 デフォルトでは、一般的なSELECTクエリがNORMALキューに入り、INSERT INTO SELECT
、DELETE SELECT
、およびINSERT OVERWRITE SELECT
クエリなどの抽出、変換、読み込み (ETL) クエリがLOWESTキューに入ります。 クエリの優先度を設定して、クエリが異なる優先度キューに入ることを許可できます。 各優先度キューでは、優先度の高いクエリが優先的に実行される。 例えば、query_priorityパラメーターが8に設定されたクエリは、query_priorityパラメーターが6に設定されたクエリよりも優先的に実行されます。
各優先度キューの優先度範囲を次の図に示します。
キューの同時実行
優先度キューごとに、実行できるクエリの最大数とキューイングできるクエリの最大数を設定できます。
優先度キューで実行されているクエリの数が、実行可能なクエリの最大数以上の場合、新しいクエリはキュー状態になります。
優先度キュー内のキューに入れられたクエリの数が、キューに入れることができるクエリの最大数と実行できるクエリの最大数の合計以上の場合、新しいクエリは拒否されます。
クエリが実行された後、最高の優先順位を持つキューに入れられたクエリは実行状態に入ります。 2つのクエリが同じ優先度を有する場合、それらは先入れ先出し (FIFO) 順序で実行される。
クエリの優先キュー機能の有効化
デフォルトでは、優先キュー機能はV3.1.8.2以降のAnalyticDB for MySQLクラスターで有効になっています。
V3.1.6.3〜V3.1.8.1のAnalyticDB for MySQLクラスターの優先キュー機能を有効にするには、次のステートメントを実行します。
SET ADB_CONFIG XIHE_ENV_QUERY_PRIORITY_QUEUE_ENABLE=true;
クエリ優先度の設定
デフォルトでは、優先度レベルの値は、ETLクエリの場合はLOWEST (5) 、一般的なSELECTクエリの場合はNORMAL (25) です。 次のセクションでは、クエリの優先度を設定する方法について説明します。
使用上の注意
INSERT INTOの優先順位を設定できません... VALUES(...)
ステートメント。
設定方法
(推奨) WLMステートメントを実行して、クエリにヒントを追加します。 詳細については、WLMトピックのADD_PROPERTIESパラメーターの設定方法をご参照ください。
クエリ文の前にヒントを追加します。 構文:
/*+ query_priority=<priority level>*/ select_statement
priority level: 値は0から39までの整数です。 より大きな値は、より高い優先度を指定する。 値は、整数5、15、25、および35に相当するLOWEST、LOW、NORMAL、およびHIGHを含む文字列にすることもできます。
例
クエリの優先度を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>
予約モードのData Warehouse Editionクラスターのリソースグループ内のキューの同時クエリ数を設定することはできません。
同時実行パラメーター
priority queueパラメータの値は、フロントエンドノードのキューサイズを指定します。 クラスターの合計キューサイズは、次の式を使用して計算できます。クラスターの合計キューサイズ=キューのサイズ × フロントエンドノードの数。
優先キューパラメーターの設定は、すべてのフロントエンドノードに対して同時に有効になります。
フロントエンドノードの詳細については、「アクセス層の高可用性」をご参照ください。
キュー | パラメーター | デフォルト値 | 説明 (リソースグループごと) |
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です。 | |
通常のキュー | XIHE_ENV_QUERY_NORMAL_MAX_CONCURRENT_SIZE | 20 | フロントエンドノードのNORMALキューに対して実行できるクエリの最大数は20です。 |
XIHE_ENV_QUERY_NORMAL_MAX_QUEUED_SIZE | 200 | フロントエンドノードのNORMALキューにキューイングできるクエリの最大数は200です。 | |
ハイキュー | 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>;