ワークロードグループをコンピュートグループに紐付ける:ワークロード間のリソース分離
ワークロードグループをコンピュートグループに紐付ける理由
Doris では、コンピュートグループを使ってクラスター内の BE ノードを論理的にグループ化し、ワークロード間でコンピュートリソースを分離する独立したサブクラスターを構成できます。
以前のバージョンでは、ワークロードグループはすべてのコンピュートグループに対してグローバルに有効であり、異なるワークロードが同じリソース割り当て設定を共有する必要がありました。たとえば、次のような状況です。
- ワークロード A とワークロード B がそれぞれワークロードグループを作成し、そのリソース割り当ての合計がすでに 100% に達していました。
- ワークロード A は追加のワークロードグループを作成できませんでした。
- 二つのワークロードでは必要なワークロードグループの設定が大きく異なっていましたが、従来の構成ではワークロードごとに独立して管理できませんでした。
この問題に対処するため、現行バージョンではワークロードグループをコンピュートグループに紐付ける仕組みが導入され、各コンピュートグループが独立したワークロードグループ設定を持てるようになりました。
コンピュートグループとリソースグループの関係
| 構成の種類 | 対応する概念 | 説明 |
|---|---|---|
| ストレージ・コンピュート分離型 | コンピュートグループ | 独立したサブクラスターを構成するための論理的な分割単位 |
| ストレージ・コンピュート一体型 | リソースグループ | 機能上、コンピュートグループに相当 |
リソース管理については、この二つを論理的に同等の概念として扱えます。本書に記載するワークロードグループとコンピュートグループの紐付けは、ストレージ・コンピュート分離型と一体型の両方の構成に適用されます。
仕組み
以前のバージョンの設計
クラスターに、ワークロード A を処理するコンピュートグループ A と、ワークロード B を処理するコンピュートグループ B があるとします。また、二つのワークロードグループ group_a と group_b があり、そのリソース割り当ての合計は 100% です。
以前のバージョンでは、group_a と group_b はコンピュートグループの境界に制限されず、すべての BE ノードで有効でした。次の図に示します。

その結果、次の問題が生じました。
- ワークロード A が
group_aを作成するとリソース割り当てが上限に達し、追加のワークロードグループを作成できなくなりました。 - 二つのワークロードのワークロードグループ設定が互いに影響し、用途に応じた管理が困難でした。
現行バージョンの設計
現行バージョンでは、ワークロードグループを特定のコンピュートグループに紐付けられます。異なるコンピュートグループは、それぞれ独立したワークロードグループ設定を持ちます。 次の図に示します。

使用方法
Doris にはデフォルトのコンピュートグループの仕組みがあります。所属先を指定せずに新しい BE ノードを追加すると、そのノードは自動的にデフォルトのコンピュートグループに配置されます。
| 構成の種類 | デフォルトのコンピュートグループ名 |
|---|---|
| ストレージ・コンピュート分離型 | default_compute_group |
| ストレージ・コンピュート一体型 | default |
FOR 句の動作は構成によって異なります- クラウド(ストレージ・コンピュート分離)モード:CREATE / ALTER / DROP WORKLOAD GROUP には、
FOR <compute_group>句を明示的に指定する必要があります。省略すると、Must specify compute group via 'FOR <compute_group>' in cloud mode.というエラーが発生します。 - 非クラウド(ストレージ・コンピュート一体)モード:
FOR <compute_group>句は省略可能です。この値は実際のコンピュートグループではなく、リソースグループ(Tag)を指します。クラウドモードと構文を統一するために同じ文法を使用しています。省略した場合は、デフォルトのリソースグループ(default)が使用されます。
ワークロードグループの作成
特定のコンピュートグループに紐付ける場合:
CREATE WORKLOAD GROUP group_a FOR compute_group_a PROPERTIES ('cpu_share'='1024');
コンピュートグループを指定しない場合(非クラウドモードのみ。デフォルトのリソースグループに紐付けられます):
CREATE WORKLOAD GROUP group_a PROPERTIES ('cpu_share'='1024');
ワークロードグループの削除
特定のコンピュートグループから削除する場合:
DROP WORKLOAD GROUP group_a FOR compute_group_a;
コンピュートグループを指定しない場合(非クラウドモードのみ。デフォルトのリソースグループから削除されます):
DROP WORKLOAD GROUP group_a;
ワークロードグループのプロパティの変更
特定のコンピュートグループに属するワークロードグループのプロパティを変更する場合:
ALTER WORKLOAD GROUP group_a FOR compute_group_a PROPERTIES ('cpu_share'='2048');
コンピュートグループを指定しない場合(非クラウドモードのみ。デフォルトのリソースグループに属するワークロードグループが変更されます):
ALTER WORKLOAD GROUP group_a PROPERTIES ('cpu_share'='2048');
ALTER 文は、ワークロードグループのプロパティの変更にのみ使用します。ワークロードグループとコンピュートグループの紐付けは変更できません。
ワークロードポリシーからワークロードグループを参照する
ワークロードポリシーの workload_group プロパティ(CREATE WORKLOAD POLICY / ALTER WORKLOAD POLICY)では、ワークロードグループがコンピュートグループに属するため、値は次の規則に従う必要があります。
-
クラウド(ストレージ・コンピュート分離)モード:
<compute_group>.<workload_group>という完全修飾形式が必要です。例:CREATE WORKLOAD POLICY p1 CONDITIONS(query_time > 3000) ACTIONS(cancel_query)
PROPERTIES('workload_group'='compute_group_a.wg1'); -
非クラウド(ストレージ・コンピュート一体)モード:
<workload_group>(デフォルトのリソースグループ)と<resource_group>.<workload_group>の両方を使用できます。
注意事項
-
紐付けは変更できません:ワークロードグループは作成時に特定のコンピュートグループに割り当てられ、コンピュートグループ間で移動することはできません。
-
アップグレード時の動作:以前のバージョンから現行バージョンにアップグレードすると、システムは既存のワークロードグループを基に、コンピュートグループごとに同名で ID が異なる新しいワークロードグループを自動的に作成します。たとえば、以前のバージョンでコンピュートグループが二つあり、
group_aが存在していた場合、アップグレード後には各コンピュートグループにgroup_aという名前の新しいワークロードグループが作成されます。どのコンピュートグループにも属していなかった元のgroup_aは自動的に削除されます。 -
権限管理は変更されません:ワークロードグループの権限チェックは引き続きワークロードグループ名との紐付けに基づいて行われ、管理方法も以前のバージョンと同じです。
-
normalワークロードグループのライフサイクル:Doris にはnormalという名前のデフォルトのワークロードグループがあります。新しいコンピュートグループが作成されると、対応するnormalワークロードグループがシステムによって自動的に作成されます。コンピュートグループが削除されると、関連するnormalワークロードグループも自動的に削除されます。normalワークロードグループのライフサイクルはシステムがすべて管理するため、手動操作は不要です。