Resource group
リソースグループ
このトピックでは、StarRocksのリソースグループ機能について説明します。
この機能を使用すると、複数のワークロード(ショートクエリ、アドホッククエリ、ETLジョブなど)を1つのクラスタで同時に実行できるため、複数のクラスタを展開する余分なコストを節約できます。技術的には、実行エンジンはユーザーの指定に基づいて同時にワークロードをスケジュールし、それらの間の干渉を分離します。
リソースグループのロードマップ:
- StarRocks v2.2以降、StarRocksはクエリのリソース消費を制限し、同じクラスタ内のテナント間でリソースの分離と効率的な使用を実現します。
- StarRocks v2.3では、大規模なクエリのリソース消費をさらに制限し、オーバーサイズのクエリリクエストによるクラスタリソースの枯渇を防いでシステムの安定性を保証します。
- StarRocks v2.5では、データローディング(INSERT)の計算リソース消費を制限します。
内部テーブル | 外部テーブル | 大規模クエリ制限 | ショートクエリ | データインジェクション | スキーマ変更 | INSERT | |
---|---|---|---|---|---|---|---|
2.2 | ◯ | × | × | × | × | × | × |
2.3 | ◯ | ◯ | ◯ | ◯ | × | × | × |
2.4 | ◯ | ◯ | ◯ | ◯ | × | × | × |
2.5 | ◯ | ◯ | ◯ | ◯ | ◯ | × | ◯ |
用語
このセクションでは、リソースグループの機能を使用する前に理解する必要のある用語について説明します。
リソースグループ
各リソースグループは、特定のBEからの計算リソースのセットです。クラスタの各BEを複数のリソースグループに分割することができ ます。クエリがリソースグループに割り当てられると、StarRocksはリソースグループに対して指定したリソースクォータに基づいてCPUとメモリのリソースを割り当てます。
以下のパラメータを使用して、BE上のリソースグループに対してCPUとメモリのリソースクォータを指定できます。
-
cpu_core_limit
このパラメータは、BE上のリソースグループに割り当てることができるCPUコアのソフトリミットを指定します。有効な値: 0以外の正の整数。実際のビジネスシナリオでは、CPUコアは、BE上のCPUコアの利用可能性に比例してリソースグループに割り当てられます。注記
たとえば、16個のCPUコアを提供するBE上に3つのリソースグループrg1、rg2、rg3を設定した場合、3つのリソースグループの
cpu_core_limit
の値はそれぞれ2
、6
、8
です。BEのCPUコアがすべて占有されている場合、3つのリソースグループに割り当てることができるCPUコアの数は、次の計算に基づいて、それぞれ2、6、8になります。
- rg1のCPUコア数 = BEのCPUコアの合計数 × (2/16) = 2
- rg2のCPUコア数 = BEのCPUコアの合計数 × (6/16) = 6
- rg3のCPUコア数 = BEのCPUコアの合計数 × (8/16) = 8
BEのCPUコアがすべて占有されていない場合、たとえばrg1とrg2がロードされており、rg3はロードされていない場合、rg1およびrg2に割り当てることができるCPUコアの数は、次の計算に基づいてそれぞれ4、12になります。
- rg1のCPUコア数 = BEのCPUコアの合計数 × (2/8) = 4
- rg2のCPUコア数 = BEのCPUコアの合計数 × (6/8) = 12
-
mem_limit
このパラメータは、BEが提供する総メモリのうち、クエリに使用できるメモリの割合を指定します。有効な値: (0, 1)。注記
クエリに使用できるメモリの量は、
query_pool
パラメータで示されます。パラメータの詳細については、メモリ管理を参照してください。 -
concurrency_limit
このパラメータは、リソースグループ内の同時クエリの上限を指定します。クエリの数が多すぎてシステムが過負荷になるのを防ぐために使用されます。このパラメータは、0より大きい場合にのみ効果を発揮します。デフォルト値: 0。
上記のリソース消費制限を基に、以下のパラメータで大規模なクエリのリソース消費をさらに制限できます:
big_query_cpu_second_limit
:このパラメータは、大規模なクエリのCPU占有時間の上限を指定します。複数のクエリを同時に実行した場合、時間が加算されます。単位は秒です。このパラメータは、0より大きい場合にのみ効果を発揮します。デフォルト値: 0。big_query_scan_rows_limit
: このパラメータは、大規模なクエリがスキャンできる行数の上限を指定します。このパラメータは、0より大きい場合にのみ効果を発揮します。デフォルト値: 0。big_query_mem_limit
:このパラメータは、大規模なクエリのメモリ使用量の上限を指定します。単位はバイトです。このパラメータは、0より大きい場合にのみ効果を発揮します。デフォルト値: 0。
注記
リソースグループで実行中のクエリが上記の大規模なクエリ制限を超える場合、クエリはエラーで終了します。また、FEノードのfe.audit.logの
ErrorCode
列にエラーメッセージが表示されます。
リソースグループのtype
をshort_query
またはnormal
に設定できます。
- デフォルト値は
normal
です。パラメータtype
にnormal
を指定する必要はありません。 - クエリが
short_query
リソースグループにヒットする場合、BEノードはshort_query.cpu_core_limit
で指定されたCPUリソースを予約します。normal
リソースグループをヒットするクエリのCPUリソースは、BEのコア数 - short_query.cpu_core_limit
に制限されます。 short_query
リソースグループにクエリがヒットしない場合、normal
リソースグループのリソースに制限は課されません。
注意
- StarRocksクラスタには、最大で1つの
short_query
リソースグループを作成できます。- StarRocksは
short_query
リソースグループのCPUリソースに対するハードな上限を設定していません。
クラシファイア
各クラシファイアは、クエリのプロパティに一致する1つ以上の条件を保持します。StarRocksは、クエリと一致する最良のクラシファイアをマッチング条件に基づいて特定し、クエリの実行にリソースを割り当てます。
クラシファイアは以下の条件をサポートしています:
user
: ユーザー名role
: ユーザーの役割query_type
: クエリのタイプ。SELECT