ApsaraDB for SelectDB では、ワークロードグループ機能を使用して、クラスター内のコンピューティングリソースをソフトウェアベースで分離できます。このトピックでは、ApsaraDB for SelectDB のワークロードグループ機能と、この機能を使用してコンピューティングリソースを管理する方法について説明します。
概要
ワークロードグループは、単一のコンピューティングノード上のワークロードグループ内のタスクによるコンピューティングリソースとメモリリソースの使用を制限することにより、コンピューティングクラスター内のタスクのリソース使用量を制限します。
高負荷のクエリとインポートタスクがいつ実行されるかを制御でき、コンピューティングクラスターのリソースを最大限に活用したいビジネスシナリオでは、タスクを個別のワークロードグループに関連付けることができます。たとえば、SelectDB のスケジュールされたオフラインコンピューティングタスクを個別のワークロードグループに関連付けることができます。さらに、ビジネスに定期的なピーク時間がある場合は、ワークロードグループを使用してビジネスタスクのリソースを分離することもできます。
ビジネスシナリオに基づいて、次のディメンションからリソースを分離するためにワークロードグループを使用できます。
大規模クエリと小規模クエリのリソースを分離します。
長時間クエリと短時間クエリのリソースを分離します。
コールドデータとホットデータに対するクエリのリソースを分離します。
オフラインおよびリアルタイムのインポートタスクのリソースを分離します。
ワークロードグループの使用
このセクションでは、ワークロードグループの作成、削除、変更、および表示の方法について説明します。
ワークロードグループに対する操作を実行するには、フルパーミッションを持つ管理者アカウントを使用することをお勧めします。
ワークロードグループの作成
次のステートメントを実行して、ワークロードグループを作成できます。 ワークロードグループを使用して、コンピューティングクラスター内の CPU とメモリリソースを分離できます。
構文
CREATE WORKLOAD GROUP [IF NOT EXISTS] 'rg_name'
PROPERTIES (
property_list
);パラメーター
パラメーター | 必須 | 説明 |
rg_name | はい | ワークロードグループの名前。 |
次の表に、PROPERTIES のパラメーターを示します。
パラメーター | 必須 | 説明 |
cpu_share | はい | ワークロードグループが使用できる CPU 時間。 このパラメーターは、CPU リソースのソフト分離を実装するために使用されます。 cpu_share パラメーターの値は、ワークロードグループが取得できる CPU リソースの重みを表す相対値です。 たとえば、 システムに実行中のワークロードグループが 1 つしかない場合、 |
memory_limit | はい | ワークロードグループが使用できるコンピューティングクラスターメモリの割合。 ワークロードグループのメモリ制限の絶対値は、次の式を使用して計算されます: ほとんどの場合、ワークロードグループのタスクは memory_limit パラメーターで指定されたメモリを使用できます。 ワークロードグループのメモリ使用量がメモリ制限を超えると、このグループでメモリ使用量が多いタスクがキャンセルされ、超過メモリが解放される場合があります。 説明 システム内のすべてのワークロードグループの memory_limit 値の合計は 100% を超えることはできません。 超えると、エラーが報告されます。 |
enable_memory_overcommit | いいえ | ワークロードグループのソフトメモリ分離を有効にするかどうかを指定します。 デフォルト値: false。 このパラメーターを false に設定すると、ワークロードグループに対してハードメモリ分離が有効になります。 システムがワークロードグループのメモリ使用量が制限を超えていることを検出すると、システムはグループ内でメモリ使用量が多いタスクを直ちにキャンセルして、超過メモリを解放します。 このパラメーターを true に設定すると、ワークロードグループに対してソフトメモリ分離が有効になります。 システムにアイドル状態のメモリリソースがある場合、ワークロードグループは、メモリ使用量が memory_limit パラメーターで指定された制限を超えていても、より多くのシステムメモリを取得できます。 システム全体のメモリが不足している場合、システムはメモリ使用量が多いタスクをキャンセルして、超過メモリの一部を解放します。 これにより、システム全体のメモリ使用量が削減されます。 複数のワークロードグループに対してこのパラメーターを true に設定する場合は、memory_limit 値の合計が 100% 未満になるように、すべてのワークロードグループの memory_limit パラメーターを構成することをお勧めします。 こうすることで、メモリをオーバーコミットできるワークロードグループ用に予備メモリが予約されます。 |
max_concurrency | いいえ | ワークロードグループで許可されるクエリの最大同時実行数を制御する変数。 デフォルトでは、クエリの最大同時実行数は制限されていません。 ApsaraDB for SelectDB では、クエリの最大同時実行数は次の式を使用して計算されます: |
max_queue_size | いいえ | クエリキューの最大長を制御する変数。 デフォルトでは、クエリキューの最大長は制限されていません。 ApsaraDB for SelectDB では、クエリキューの最大長は次の式を使用して計算されます: |
queue_timeout | いいえ | クエリがキューで待機する最大時間 (ミリ秒単位) を制御する変数。 デフォルトでは、クエリがキューで待機する最大時間は制限されていません。 ApsaraDB for SelectDB では、最大時間は次の式を使用して計算されます: |
例
g1 という名前のワークロードグループを作成します。
CREATE WORKLOAD GROUP IF NOT EXISTS g1
PROPERTIES (
"cpu_share"="10",
"memory_limit"="30%",
"enable_memory_overcommit"="true"
);ワークロードグループの削除
次のステートメントを実行して、ワークロードグループを削除できます。
構文
DROP WORKLOAD GROUP [IF EXISTS] 'rg_name'例
g1 という名前のワークロードグループを削除します。
DROP WORKLOAD GROUP IF EXISTS g1;ワークロードグループの変更
次のステートメントを実行して、ワークロードグループを変更できます。
構文
ALTER WORKLOAD GROUP "rg_name"
PROPERTIES (
property_list
);パラメーター
PROPERTIES のパラメーターの詳細については、このトピックのパラメーターセクションを参照してください。
例
g1 という名前のワークロードグループを変更します。
ALTER WORKLOAD GROUP g1
PROPERTIES (
"cpu_share"="30",
"memory_limit"="30%"
);memory_limit パラメーターを変更する場合は、すべてのワークロードグループの memory_limit 値の合計が 100% を超えないようにしてください。
パラメーターの一部のみを変更できます。 たとえば、cpu_share パラメーターのみを変更できます。 この場合、PROPERTIES で cpu_share パラメーターのみを指定する必要があります。
ワークロードグループの表示
次のステートメントを実行して、現在のユーザーが USAGE-PRIV 権限を持っているワークロードグループを表示できます。
構文
SHOW WORKLOAD GROUPS;例
すべてのワークロードグループを表示します。
mysql> SHOW WORKLOAD GROUPS;
+----------+--------+--------------------------+---------+
| Id | Name | Item | Value |
+----------+--------+--------------------------+---------+
| 10343386 | normal | cpu_share | 10 |
| 10343386 | normal | memory_limit | 30% |
| 10343386 | normal | enable_memory_overcommit | true |
| 10352416 | g1 | memory_limit | 20% |
| 10352416 | g1 | cpu_share | 10 |
+----------+--------+--------------------------+---------+完全な例
次の例は、SelectDB クラスターでワークロードグループ機能を有効にし、ワークロードグループを使用する方法を示しています。
FE 構成項目
enable_workload_groupを true に設定します。
enable_workload_group=trueこの構成項目は直接指定できません。 この構成項目を指定する場合は、チケットを送信してください。
この構成項目は動的構成項目です。 この構成項目を変更してインスタンスを再起動すると、システムは
normalという名前のデフォルトのワークロードグループを自動的に作成します。 この構成項目を変更してもインスタンスを再起動しない場合は、デフォルトのワークロードグループは作成されません。 この構成項目の変更方法の詳細については、チケットを送信してください。
ワークロードグループを作成します。
CREATE WORKLOAD GROUP IF NOT EXISTS g1
properties (
"cpu_share"="10",
"memory_limit"="30%",
"enable_memory_overcommit"="true"
);セッション変数 experimental_enable_pipeline_engine を true に設定して、パイプライン実行エンジンを有効にします。 ワークロードグループの CPU 分離は、パイプライン実行エンジンに基づいて実装されます。
set experimental_enable_pipeline_engine = true;クエリをワークロードグループに関連付けて、ワークロードグループに指定されたリソース制限を有効にします。 次のいずれかの方法を使用して、クエリをワークロードグループに関連付けることができます。
ユーザー プロパティ default_workload_group を構成して、デフォルトのワークロードグループを指定します。 デフォルトのワークロードグループがシステムによって自動的に作成される場合、このプロパティのデフォルト値は
normalです。set property 'default_workload_group' = 'g1';上記のステートメントは、現在のユーザーのクエリで使用されるデフォルトのワークロードグループとして g1 を指定します。
セッション変数 workload_group を構成して、使用するワークロードグループを指定します。 この変数はデフォルトでは空です。
set workload_group = 'g1';セッション変数
workload_groupの優先度は、ユーザー プロパティdefault_workload_groupよりも高くなります。workload_group変数が空の場合、クエリはdefault_workload_groupプロパティで指定されたワークロードグループに関連付けられます。workload_group変数が空でない場合、クエリはworkload_group変数で指定されたワークロードグループに関連付けられます。管理者でない場合は、最初に SHOW WORKLOAD GROUPS ステートメントを実行して、使用するワークロードグループを表示できるかどうかを確認する必要があります。 ワークロードグループが表示されない場合は、ワークロードグループが存在しないか、ワークロードグループを使用する権限がない可能性があります。 この場合、クエリを実行するとエラーが報告されます。
クエリを実行します。 クエリは、指定されたワークロードグループに関連付けられます。 この場合、ワークロードグループに指定されたリソース制限が有効になります。