AnalyticDB for MySQL は、ワークロード管理モジュールを提供します。Workload Management (WLM) コマンドを使用して、さまざまなワークロードを詳細に制御し、クラスター全体の実行ステータスを向上させるルールを構成できます。このトピックでは、WLM コマンドを使用してワークロード管理ルールを作成、変更、有効化、無効化、および削除する方法について説明します。
前提条件
お使いの AnalyticDB for MySQL クラスターのカーネルバージョンは 3.1.6.3 以降である必要があります。
AnalyticDB for MySQL クラスターのマイナーバージョンを表示および更新するには、AnalyticDB for MySQL コンソールにログインし、クラスター情報 ページの 構成情報 セクションに移動します。
使用上の注意
WLM コマンドを使用してルールを変更できるのは、カーネルバージョンが 3.1.10.0 以降のクラスターのみです。
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 | はい | クエリがルールの条件を満たしたときに実行されるアクション。 アクションの詳細については、「アクション」をご参照ください。 |
predicate | はい | 述語条件。 述語の構文:
|
attrs | いいえ | action が RESUBMIT_RESOURCE_GROUP、ADD_PROPERTIES、または BLOCK_WITH_PROB に設定されている場合、attrs パラメーターは必須です。 attrs の指定方法については、「アクション」の構成メソッドをご参照ください。 説明 このパラメーターの値は一重引用符 (') で囲む必要があります。 |
resource_group | いいえ | リソースグループの名前。デフォルト値は user_default です。 説明 AnalyticDB for MySQL コンソールにログインし、クラスターの ID をクリックしてから、[リソースグループ管理] ページに移動して、クラスターのリソースグループを表示できます。 |
description | いいえ | 説明。 説明 このパラメーターの値は一重引用符 (') で囲む必要があります。 |
compatible_group | いいえ | 互換グループ。 デフォルトでは、ルールは優先度の降順で照合されます。ルールが照合されると、照合プロセスは停止します。同時に照合する必要があるルールに対して互換グループを設定することもできます。ルールが照合されるとき、最も優先度の高いルールが最初に照合されます。照合されたルールに互換グループがある場合、互換グループ内の残りのルールが照合可能であれば同時に照合されます。 |
enabled | いいえ | ルールを有効にするかどうかを指定します。有効値:
|
priority | いいえ | ルールの優先度。デフォルト値は 0 です。 ルールが照合されるたびに、最も優先度の高いルールのみが照合されます。複数のルールが同じ優先度を持つ場合、最初に作成されたルールが最初に照合されます。 |
例
例 1: testRule1 という名前のルールを作成します。このルールは、ユーザー名が test で、クエリパターンの履歴実行時間の 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ヒントワードを追加して、クエリの優先度を 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 コマンドを使用してルールを変更できるのは、カーネルバージョンが 3.1.10.0 以降のクラスターのみです。
AnalyticDB for MySQL クラスターのマイナーバージョンを表示および更新するには、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>]等号 (=) の前後にスペースを追加しないでください。
パラメーター
パラメーター | 必須 | 説明 |
id | いいえ | ルールの ID。ルール ID は一意であり、対応するルールを照合するために使用され、変更することはできません。 説明
|
name | いいえ | ルール名。ルール名を変更するときは、ルール ID を使用して対応するルールを照合する必要があります。 説明 変更されたルールは、作成されたルールと同じ名前にすることはできません。そうしないと、同じ名前で作成されたルールが上書きされます。 |
type | いいえ | ルールのタイプ。値を query に設定します。 |
action | いいえ | クエリがルールの条件を満たしたときに実行されるアクション。 アクションの詳細については、「アクション」をご参照ください。 |
predicate | いいえ | 述語条件。 述語の構文:
|
attrs | いいえ | action が RESUBMIT_RESOURCE_GROUP、ADD_PROPERTIES、または BLOCK_WITH_PROB に設定されている場合、attrs パラメーターは必須です。 attrs の指定方法については、「アクション」の構成メソッドをご参照ください。 このパラメーターの値は一重引用符 (') で囲む必要があります。 |
resource_group | いいえ | リソースグループの名前。デフォルト値は user_default です。 説明 AnalyticDB for MySQL コンソールにログインし、クラスターの ID をクリックしてから、[リソースグループ管理] ページに移動して、クラスターのリソースグループを表示できます。 |
description | いいえ | 説明。 説明 このパラメーターの値は一重引用符 (') で囲む必要があります。 |
compatible_group | いいえ | 互換グループ。 デフォルトでは、ルールは優先度の降順で照合されます。ルールが照合されると、照合プロセスは停止します。同時に照合する必要があるルールに対して互換グループを設定することもできます。ルールが照合されるとき、最も優先度の高いルールが最初に照合されます。照合されたルールに互換グループがある場合、互換グループ内の残りのルールが照合可能であれば同時に照合されます。 |
enabled | いいえ | ルールを有効にするかどうかを指定します。有効値:
|
priority | いいえ | ルールの優先度。デフォルト値は 0 です。 ルールが照合されるたびに、最も優先度の高いルールのみが照合されます。複数のルールが同じ優先度を持つ場合、最初に作成されたルールが最初に照合されます。 |
例
例 1: ID 2 のルールの名前を Rule に変更します。
wlm update_rule id=2 name=Rule;次の結果が返されます。
+-----------------+ | result | +-----------------+ | update rule 2 | +-----------------+例 2: testRule1 ルールの条件を変更します。このルールは、ユーザー名が test で、クエリパターンの履歴実行時間の 50 パーセンタイルが 80,000 ms を超える場合にクエリを終了するようになります。
wlm update_rule name=testRule1 predicate='user=test && PATTERN_RT_P50>80000';または、testRule1 ルールの ID を使用してルールを変更することもできます。
wlm update_rule id=1 predicate='user=test && PATTERN_RT_P50>80000';次の結果が返されます。
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+例 3: testRule1 ルールの条件を満たすクエリを testgroup リソースグループに配信して実行します。
変更前は、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 の指定方法については、「アクション」の構成メソッドをご参照ください。
次の結果が返されます。
+-----------------+ | result | +-----------------+ | update rule 1 | +-----------------+
ルールのクエリ
構文
wlm list_rule
[id=<ruleID>]
[name='<ruleName>'\G]パラメーター
パラメーター | 必須 | 説明 |
id | いいえ | ルールの ID。 説明 ID と名前を指定しない場合、ルール 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
pattern_hash の計算
構文
wlm calc_pattern_hash <SQL>パラメーター
パラメーター | 必須 | 説明 |
SQL | はい | SELECT 文、または SELECT を含む書き込み文。 |
例
クエリ文の pattern_hash を計算します。
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: プロパティ
カテゴリ | フィールド | データの型 | 説明 |
クエリプロパティ | user | 文字列 | クエリを送信するユーザー。 |
source_ip | 文字列 | クエリの送信元 IP アドレス。 | |
query_task_type | 数値 | クエリのタイプ。有効値:
| |
query_table_list | 文字列リスト | クエリによってスキャンされるテーブル。 | |
query_db_list | 文字列リスト | クエリによってスキャンされるデータベース。 | |
pattern_hash | 数値 | クエリパターンのハッシュ値。同じパターンのクエリを識別するために使用されます。 | |
sql | 文字列 | クエリの元の SQL 文。 重要 このプロパティは、カーネルバージョンが 3.1.8.3 以降のクラスターでのみサポートされます。 | |
クエリランタイムメトリック 説明 クエリランタイムメトリックは、クエリがキューに入った後にクエリを制御するために使用されます。 | QUERY_PROCESS_TIME | 数値 | クエリプロセス内のすべてのタスクによって消費される合計時間。このメトリックは、クエリのコンピューティングワークロードを大まかに測定するために使用できます。単位: ms。 |
QUERY_EXECUTION_TIME | 数値 | クエリの実行時間。キュー時間と実行計画の生成に消費された時間は除きます。単位: ms。 重要
| |
QUERY_SUBMITTED_TIME | 数値 | クエリが作成されたときのタイムスタンプ。 | |
QUERY_TOTAL_TASK | 数値 | クエリの物理実行計画におけるタスクの総数。 | |
QUERY_INPUT_DATA_SIZE | 数値 | クエリによって読み取られたデータ量。単位: MB。 | |
QUERY_SHUFFLE_DATA_SIZE | 数値 | クエリのシャッフルされたデータ量。単位: MB。 | |
QUERY_OUTPUT_DATA_SIZE | 数値 | クエリの出力データ量。単位: MB。 | |
QUERY_PEAK_MEMORY | 数値 | クエリのピークメモリ。単位: MB。 | |
QUERY_TOTAL_STAGES | 数値 | クエリの実行計画におけるステージの総数。 | |
クエリパターンプロパティ 説明 クエリパターンプロパティは、クエリの履歴実行を反映します。 | PATTERN_RT_P50 | 数値 | 同じパターンのクエリの履歴実行時間の 50 パーセンタイル。単位: ms。 |
PATTERN_RT_P90 | 数値 | 同じパターンのクエリの履歴実行時間の 90 パーセンタイル。単位: ms。 | |
PATTERN_EXECUTION_TIME_P50 | 数値 | 同じパターンのクエリの履歴実行時間 (キュー時間を除く) の 50 パーセンタイル。単位: ms。 | |
PATTERN_EXECUTION_TIME_P90 | 数値 | 同じパターンのクエリの履歴実行時間 (キュー時間を除く) の 90 パーセンタイル。単位: ms。 | |
PATTERN_WALL_TIME_P50 | 数値 | 同じパターンのクエリの履歴ウォールタイムの 50 パーセンタイル。単位: ms。 | |
PATTERN_WALL_TIME_P90 | 数値 | 同じパターンのクエリの履歴ウォールタイムの 90 パーセンタイル。単位: ms。 | |
PATTERN_SHUFFLE_SIZE_AVG | 数値 | 同じパターンのクエリの履歴シャッフルデータ量の平均。単位: byte。 | |
PATTERN_PEAK_MEMORY_AVG | 数値 | 同じパターンのクエリの履歴ピークメモリの平均。単位: byte。 | |
PATTERN_INPUT_POSITION_AVG | 数値 | 同じパターンのクエリの履歴入力レコード数の平均。単位: row。 | |
PATTERN_OUTPUT_POSITION_AVG | 数値 | 同じパターンのクエリの履歴出力レコード数の平均。単位: row。 |
付録 2: オペレーター
オペレーター | 適用可能なデータの型 | 説明 |
> | 数値 | なし |
< | 数値 | なし |
= | 数値、文字列 | なし |
>= | 数値 | なし |
<= | 数値 | なし |
!= | 数値、文字列 | なし |
in | 文字列リスト | 文字列リストに共通部分があるかどうかを確認します。 |
contains | 文字列 | 文字列に特定の文字列が含まれているかどうかを確認します。これは主に元の SQL 文をクエリするために使用されます。 重要 このオペレーターは、カーネルバージョンが 3.1.8.3 以降のクラスターでのみサポートされます。 |
付録 3: アクション
制御措置 | 説明 | attrs 構成メソッド |
KILL | クエリを終了します。 | なし |
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 です。 |