AnalyticDB for MySQLは、ワークロード管理ルールの設定、クラスター管理のきめ細かい実装、およびクラスターパフォーマンスの向上に使用できるワークロード管理メカニズムを提供します。 このトピックでは、WLM構文を使用してワークロード管理ルールを作成、変更、有効化、無効化、および削除する方法について説明します。
前提条件
AnalyticDB for MySQLクラスターはData Warehouse Edition (V3.0) です。
クラスターのエンジンバージョンはV3.1.6.3以降です。
説明AnalyticDB for MySQLのマイナーバージョンを照会するには
Data Lakehouse Editionクラスターで、
SELECT adb_version();
文を実行します。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。
使用上の注意
WLM構文を使用して、V3.1.10.0以降のAnalyticDB for MySQLクラスターのワークロード管理ルールのみを変更できます。
AnalyticDB for MySQLは、ワークロード管理ルールにソフト削除ポリシーを採用しています。 新しいルールは、削除されたルールと同じ名前を使用できません。
ワークロード管理ルールの作成
構文
wlm add_rule
name=<ruleName>
type=query
action=<ruleAtion>
predicate='<property><operator><value> && <property><operator><value>'
[attrs='<ruleAttrs>']
[resource_group=<ruleResource_group>]
[description='<ruleDescription>']
[compatible_group=<compatible_group_name>]
[enabled=<ruleEnabled>]
[priority=<rulePriority>]
等号 (=) の両側にスペースは使用できません。
パラメーター
パラメーター | 必須 | 説明 |
name | 必須 | ルールの名前を設定します。 説明 ルール名は、既存のルールと削除されたルール間で一意である必要があります。 |
type | 必須 | ルールのタイプ。 パラメーターをqueryに設定します。 |
action | 必須 | クエリがルールの条件を満たしたときに実行されるアクション。 アクションの詳細については、このトピックの「付録3: アクション」を参照してください。 |
predicate | 必須 | ルールの述語条件。 構文:
説明
|
attrs | 選択可能 | ルールの属性。 actionパラメーターの値がRESUBMIT_RESOURCE_GROUP、ADD_PROPERTIES、またはBLOCK_WITH_PROBの場合、このパラメーターを指定する必要があります。 attrsパラメーターの指定方法については、このトピックの「付録3: 操作」を参照してください。 説明 このパラメーターの値を一重引用符 (') で囲みます。 |
resource_group | 選択可能 | リソースグループの名前。 デフォルト値はuser_defaultです。 説明 クラスターのリソースグループ名を取得するには、AnalyticDB for MySQLコンソールにログインし、クラスターIDをクリックして、[リソースグループ] ページに移動します。 |
description | 選択可能 | ルールの説明。 説明 このパラメーターの値を一重引用符 (') で囲みます。 |
compatible_group | 選択可能 | 互換性グループ。 システムは、クエリを、ルールの優先度の高い順に1つずつワークロード管理ルールと照合します。 ルールが一致すると、システムは一致を停止し、ルールで指定されたアクションを実行します。 複数のルールを一致させたい場合は、ルールを互換性グループに追加できます。 ルールが一致すると、システムは同じ互換性グループ内の他のルールもチェックし、優先順位に関係なく、他の一致するルールで指定されたアクションを実行します。 |
enabled | 選択可能 | ルールを有効にするかどうかを指定します。 有効な値:
|
priority | 選択可能 | ルールの優先度。 デフォルト値:0 システムは、クエリを、ルールの優先度の高い順に1つずつワークロード管理ルールと照合します。 ルールが一致すると、システムは一致を停止し、ルールで指定されたアクションを実行します。 同じ優先度を持つ複数のルールが一致する場合、最も早く作成されたルールが有効になります。 |
例
例1: testRule1という名前のルールを作成します。 ユーザー名がtestで、SQLパターンの履歴実行期間の50パーセンタイルが60,000 msより長い場合、クエリは終了します。
wlm add_rule name=testRule1 type=query action=kill predicate='user=test && PATTERN_RT_P50>60000';
サンプル結果:
+---------------------------------+ | result | +---------------------------------+ | insert rule 'testRule1' success | +---------------------------------+
例2: testRule2という名前のルールを作成します。 ユーザー名がtestで、ユーザーIPアドレスが10.10.10.10、192.168.0.1、または192.0.2.1の場合、
query_priority=low
ヒントがクエリに追加されます。wlm add_rule name=testRule2 type=query action=ADD_PROPERTIES attrs='{"add_prop":{"query_priority":"low"}}' predicate='user=test && source_ip in 10.10.10.10,192.168.0.1,192.0.2.1';
サンプル結果:
+---------------------------------+ | result | +---------------------------------+ | insert rule 'testRule2' success | +---------------------------------+
例3: testResourceGroupリソースグループの優先度が5であるtestRule3という名前のルールを作成します。 ユーザー名がtestで、クエリの種類がSELECTの場合、クエリは終了します。
wlm add_rule name=testRule3 type=query resource_group=testResourceGroup description='just a test' priority=5 action=kill predicate='user=test && query_task_type=1';
サンプル結果:
+---------------------------------+ | result | +---------------------------------+ | insert rule 'testRule3' success | +---------------------------------+
ワークロード管理ルールの変更
WLM構文を使用して、V3.1.10.0以降のAnalyticDB for MySQLクラスターのワークロード管理ルールのみを変更できます。
構文
wlm update_rule
id=<ruleId>
name=<ruleName>
type=query
action=<ruleAtion>
predicate='<property><operator><value> && <property><operator><value>'
[attrs='<ruleAttrs>']
[resource_group=<ruleResource_group>]
[description='<ruleDescription>']
[compatible_group=<compatible_group_name>]
[enabled=<ruleEnabled>]
[priority=<rulePriority>]
等号 (=) の両側にスペースは使用できません。
Parameters
パラメーター | 必須 | 説明 |
id | 選択可能 | ルールの ID です。 ルールIDは一意であり、対応するルールを照合するために使用されます。 ルールIDは変更できません。 説明
|
name | 選択可能 | ルールの名前を設定します。 ルール名を変更するときは、対応するルールと一致するようにルールIDを使用する必要があります。 説明 新しいルール名は、既存のルールの名前と同じにすることはできません。 それ以外の場合、既存のルールは上書きされます。 |
type | 選択可能 | ルールのタイプ。 パラメーターをqueryに設定します。 |
action | 選択可能 | クエリがルールの条件を満たしたときに実行されるアクション。 アクションの詳細については、このトピックの「付録3: アクション」を参照してください。 |
predicate | 選択可能 | ルールの述語条件。 構文:
説明
|
attrs | 選択可能 | ルールの属性。 actionパラメーターの値がRESUBMIT_RESOURCE_GROUP、ADD_PROPERTIES、またはBLOCK_WITH_PROBの場合、このパラメーターを指定する必要があります。 attrsパラメーターの指定方法については、このトピックの「付録3: 操作」を参照してください。 このパラメーターの値を一重引用符 (') で囲みます。 |
resource_group | 選択可能 | リソースグループの名前。 デフォルト値はuser_defaultです。 説明 クラスターのリソースグループ名を取得するには、AnalyticDB for MySQLコンソールにログインし、クラスターIDをクリックして、[リソースグループ] ページに移動します。 |
description | 選択可能 | ルールの説明。 説明 このパラメーターの値を一重引用符 (') で囲みます。 |
compatible_group | 選択可能 | 互換性グループ。 システムは、クエリを、ルールの優先度の高い順に1つずつワークロード管理ルールと照合します。 ルールが一致すると、システムは一致を停止し、ルールで指定されたアクションを実行します。 複数のルールを一致させたい場合は、ルールを互換性グループに追加できます。 ルールが一致すると、システムは同じ互換性グループ内の他のルールもチェックし、優先順位に関係なく、他の一致するルールで指定されたアクションを実行します。 |
enabled | 選択可能 | ルールを有効にするかどうかを指定します。 有効な値:
|
priority | 選択可能 | ルールの優先度。 デフォルト値:0 システムは、クエリを、ルールの優先度の高い順に1つずつワークロード管理ルールと照合します。 ルールが一致すると、システムは一致を停止し、ルールで指定されたアクションを実行します。 同じ優先度を持つ複数のルールが一致する場合、最も早く作成されたルールが有効になります。 |
例
例1: IDが2のルールの名前をruleに変更します。
wlm update_rule id=2 name=Rule;
サンプル結果:
+-----------------+ | result | +-----------------+ | update rule 2 | +-----------------+
例2: testRule1ルールの条件を変更します。 ユーザー名がtestで、SQLパターンの履歴実行期間の50パーセンタイルが80,000 msより長い場合、クエリは終了します。
wlm update_rule name=testRule1 predicate='user=test && PATTERN_RT_P50>80000';
または、対応するルールIDを使用してtestRule1ルールを変更します。
wlm update_rule id=1 predicate='user=test && PATTERN_RT_P50>80000';
サンプル結果:
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+
例3: testRule1ルールの要件を満たすすべてのクエリをtestgroupリソースグループに再送信して実行します。
アクションがKILLに設定されているtestRule1という名前のルールを作成します。
wlm add_rule name=testRule1 type=query action=kill predicate='user=test && PATTERN_RT_P50>60000';
testRule1ルールを変更して、現在のリソースグループからtestgroupリソースグループにクエリを再送信して実行します。
wlm update_rule name=testRule1 action=RESUBMIT_RESOURCE_GROUP attrs='{ "resubmit":{ "resource_group": "testgroup" } }'
説明attrsパラメーターの指定方法については、このトピックの「付録3: 操作」を参照してください。
サンプル結果:
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+
ワークロード管理ルールに関する情報の照会
構文
wlm list_rule
[id=<ruleID>]
[name='<ruleName>'\G]
パラメーター
パラメーター | 必須 | 説明 |
id | 選択可能 | ルールの ID です。 説明 idパラメーターとnameパラメーターを指定しない場合、既存のすべてのルールに関する情報 (ルールidを含む) が返されます。 |
name | 選択可能 | ルールの名前を設定します。 説明
|
\G | 選択可能 | 返された各パラメータを別々の行に表示します。 |
例
例1: IDがtestID1であるルールに関する情報を照会します。
wlm list_rule id=1 \G;
サンプル結果:
id: 1 name: testRule4 description: NULL type: QUERY resource_group: user_default enabled: 1 priority: 0 version: 1 life_cycle: BEFORE_QUEUEING compatible_group: valid_begin: null valid_end: null creator: kepler update_user: kepler create_time: 2022-09-16 14:00:18 update_time: 2022-09-16 14:00:18 predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.source_ip}","value":"1,2,3","operator":"in"}] action: ADD_PROPERTIES attrs: {"add_prop":{"query_priority":"low"}} 1 row in set (0.11 sec)
例2: IDがtestID1で名前がtestRule4であるルールに関する情報を照会します。
mysql> wlm list_rule id=1 name='testRule4' \G;
サンプル結果:
id: 1 name: testRule4 description: NULL type: QUERY resource_group: user_default enabled: 1 priority: 0 version: 1 life_cycle: BEFORE_QUEUEING compatible_group: valid_begin: null valid_end: null creator: kepler update_user: kepler create_time: 2022-09-16 14:00:18 update_time: 2022-09-16 14:00:18 predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.source_ip}","value":"1,2,3","operator":"in"}] action: ADD_PROPERTIES attrs: {"add_prop":{"query_priority":"low"}} 1 row in set (0.09 sec)
ワークロード管理ルールの無効化
構文
wlm disable_rule id=<ruleID>
パラメーター
パラメーター | 必須 | 説明 |
id | 必須 | ルールの ID です。 説明
|
例
例1: IDがtestID1のルールを無効にします。
wlm disable_rule id=1;
サンプル結果:
+------------------+ | result | +------------------+ | disable rule 1 | +------------------+
例2: IDがtestID1であるルールに関する情報を照会します。
wlm list_rule id=1\G;
サンプル結果:
id: 1 name: testRule4 description: NULL type: QUERY resource_group: user_default enabled: 0 priority: 0 version: 1 life_cycle: BEFORE_QUEUEING compatible_group: valid_begin: null valid_end: null creator: kepler update_user: kepler create_time: 2022-09-16 14:00:18 update_time: 2022-09-16 14:00:18 predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.source_ip}","value":"1,2,3","operator":"in"}] action: ADD_PROPERTIES attrs: {"add_prop":{"query_priority":"low"}}
ワークロード管理ルールの有効化
構文
wlm enable_rule id=<ruleID>
パラメーター
パラメーター | 必須 | 説明 |
id | 必須 | ルールの ID です。 説明
|
例
例1: IDがtestID1のルールを有効にします。
wlm enable_rule id=1;
サンプル結果:
+----------------+ | result | +----------------+ | enable rule 1 | +----------------+
例2: IDがtestID1であるルールに関する情報を照会します。
wlm list_rule id=1\G;
サンプル結果:
id: 1 name: testRule4 description: NULL type: QUERY resource_group: user_default enabled: 1 priority: 0 version: 1 life_cycle: BEFORE_QUEUEING compatible_group: valid_begin: null valid_end: null creator: kepler update_user: kepler create_time: 2022-09-16 14:00:18 update_time: 2022-09-16 14:00:18 predicate: [{"property":"${session.user}","value":"test","operator":"equal"},{"property":"${session.source_ip}","value":"1,2,3","operator":"in"}] action: ADD_PROPERTIES attrs: {"add_prop":{"query_priority":"low"}}
ワークロード管理ルールの削除
構文
wlm delete_rule id=<ruleID>
パラメーター
パラメーター | 必須 | 説明 |
id | 必須 | ルールの ID です。 説明
|
例
例1: IDがtestID1のルールを削除します。
wlm delete_rule id=1;
サンプル結果:
+----------------+ | result | +----------------+ | delete rule 1 | +----------------+
例2: IDがtestID1であるルールに関する情報を照会します。
wlm list_rule id=1\G;
サンプル結果:
Empty set
クエリのパターンハッシュ値の取得
構文
wlm calc_pattern_hash <SQL>
パラメーター
パラメーター | 必須 | 説明 |
SQL | 必須 | SELECTクエリまたはSELECTステートメントを含む書き込みクエリ。 |
例
クエリのパターンハッシュ値を取得します。
wlm calc_pattern_hash select * from t where a=1 and b=2;
サンプル結果:
+-----------------------------------+----------------------+
| raw_sql | pattern_hash |
+-----------------------------------+----------------------+
| select * from t where a=1 and b=2 | -4759960226441980963 |
+-----------------------------------+----------------------+
WLMステートメントのリストの照会
パラメーターなしでWLMステートメントを実行します。
wlm;
サンプル結果:
+---------------------------+-------------------------------------+
| command | description |
+---------------------------+-------------------------------------+
| calc_pattern_hash | calculate pattern_hash of query |
| add_rule | add a new rule |
| list_rule id=[x]|name=[x] | list all rules OR filter by id/name |
| disable_rule id=[x] | disable a rule by id |
| enable_rule id=[x] | enable a rule by id |
| delete_rule id=[x] | delete a rule by id |
| update_rule id=[x] | update a rule by id |
+---------------------------+-------------------------------------+
付録
付録1: プロパティ
カテゴリ | プロパティ | データ型 | 説明 |
Query | user | String | クエリを送信するユーザー。 |
source_ip | String | クエリの送信元のIPアドレス。 | |
query_task_type | Numeric | クエリのタイプです。 有効な値:
| |
query_table_list | String list | クエリに含まれるテーブル。 | |
query_db_list | String list | クエリに関与するデータベース。 | |
pattern_hash | Numeric | クエリが属するSQLパターンのハッシュ値。 | |
sql | String | クエリの元のSQLステートメント。 重要 このプロパティは、V3.1.8.3以降のAnalyticDB for MySQLクラスターでのみサポートされます。 | |
Runtime 説明 このカテゴリのプロパティは、実行統計に基づいてクエリを識別するために使用されます。 | QUERY_PROCESS_TIME | Numeric | クエリのすべてのタスクによって消費されたCPU時間の合計。 値は、クエリによって必要とされるコンピューティングリソースのおおよその量を示すことができる。 単位:ミリ秒。 |
QUERY_EXECUTION_TIME | Numeric | クエリの実行時間 (キュー時間を除く) 。 単位:ミリ秒。 | |
QUERY_SUBMITTED_TIME | Numeric | クエリが送信された時刻。 | |
QUERY_TOTAL_TASK | Numeric | 物理実行プラン内のタスクの総数。 | |
QUERY_INPUT_DATA_SIZE | Numeric | クエリによって読み取られたデータの量。 単位:MB。 | |
QUERY_SHUFFLE_DATA_SIZE | Numeric | クエリのシャッフルされたデータの量。 単位:MB。 | |
QUERY_OUTPUT_DATA_SIZE | Numeric | クエリの出力データの量。 単位:MB。 | |
QUERY_PEAK_MEMORY | Numeric | クエリのピークメモリ使用量。 単位:MB。 | |
QUERY_TOTAL_STAGES | Numeric | 実行プランのステージの総数。 | |
Pattern 説明 このカテゴリのプロパティは、実行履歴に基づいてクエリを識別するために使用されます。 | パターンRT_P50 | Numeric | SQLパターンのクエリの履歴実行期間の50パーセンタイル。 単位:ミリ秒。 |
パターンRT_P90 | Numeric | SQLパターンのクエリの履歴実行期間の90パーセンタイル。 単位:ミリ秒。 | |
PATTERN_EXECUTION_TIME_P50 | Numeric | キュー時間を除く、SQLパターンのクエリの履歴実行期間の50パーセンタイル。 単位:ミリ秒。 | |
PATTERN_EXECUTION_TIME_P90 | Numeric | SQLパターンのクエリの過去の実行時間の90パーセンタイル (キューイング時間を除く) 。 単位:ミリ秒。 | |
パターンWALL_TIME_P50 | Numeric | SQLパターンのクエリのウォールタイムの50パーセンタイル。 単位:ミリ秒。 | |
パターンWALL_TIME_P90 | Numeric | SQLパターンのクエリのウォールタイムの90パーセンタイル。 単位:ミリ秒。 | |
PATTERN_SHUFFLE_SIZE_AVG | Numeric | SQLパターンのクエリのシャッフルされたデータの平均量。 単位はバイトです。 | |
パターンPEAK_MEMORY_AVG | Numeric | SQLパターンのクエリの平均ピークメモリ使用量。 単位はバイトです。 | |
パターンINPUT_POSITION_AVG | Numeric | SQLパターンのクエリのデータの入力行の平均数。 | |
PATTERN_OUTPUT_POSITION_AVG | Numeric | SQLパターンのクエリのデータの出力行の平均数。 |
付録2: 演算子
演算子 | データ型 | 説明 |
> | Numeric | 非該当 |
< | Numeric | 非該当 |
= | 数値と文字列 | 非該当 |
>= | Numeric | 非該当 |
<= | Numeric | 非該当 |
!= | 数値と文字列 | 非該当 |
in | String list | 2つの文字列リストが交差するかどうかを決定します。 |
contains | String | 文字列に別の文字列が含まれるかどうかを決定します。 この演算子は、元のSQL文を照会するために使用されます。 重要 この演算子は、V3.1.8.3以降のAnalyticDB for MySQLクラスターでのみサポートされます。 |
付録3: アクション
Action | 説明 | attrsパラメーターの設定方法 |
KILL | クエリを終了します。 | N/A |
RESUBMIT_RESOURCE_GROUP | 現在のリソースグループの要件を満たすクエリの実行を停止し、クエリを別のリソースグループに再送信して実行します。 | {"resubmit": {"resource_group":"<resource_group_name>"}} resource_group_name: 宛先リソースグループの名前。 説明 クラスターのリソースグループ名を取得するには、AnalyticDB for MySQLコンソールにログインし、クラスターIDをクリックして、[リソースグループ] ページに移動します。 |
ADD_PROPERTIES | クエリのプロパティを変更します。 クエリの優先度を変更したり、ヒントの他のクエリプロパティを変更したりするために使用できます。 | {"add_prop": {"query_priority": "<Priority level>", "force": "false"}}
|
BLOCK_WITH_PROB | クエリがキューに入る前に、特定の確率でクエリを終了します。 それは絞ることに使用することができます。 | {"block_prob": {"prob":<prob_value >}} prob_value: 確率。 有効な値は 0~1 です。 |