大規模クエリの監視と管理
このトピックでは、StarRocks クラスターで大規模クエリを監視および管理する方法について説明します。
大規模クエリには、非常に 多くの行をスキャンしたり、CPU やメモリリソースを大量に占有したりするクエリが含まれます。これらは制限がないとクラスターリソースを簡単に使い果たし、システムの過負荷を引き起こす可能性があります。この問題に対処するために、StarRocks は大規模クエリを監視および管理し、クラスターリソースの独占を防ぐための一連の手段を提供します。
StarRocks における大規模クエリの処理の全体的な考え方は次のとおりです。
- リソースグループとクエリキューを使用して、大規模クエリに対する自動的な予防策を設定します。
- 大規模クエリをリアルタイムで監視し、予防策を回避するものを終了させます。
- 監査ログと Big Query Logs を分析して、大規模クエリのパターンを研究し、以前に設定した予防メカニズムを微調整します。
この機能は v3.0 からサポートされています。
大規模クエリに対する予防策を設定する
StarRocks は、大規模クエリに対処するための 2 つの予防手段を提供しています - リソースグループとクエリキューです。リソースグループを使用して、大規模クエリの実行を停止することができます。一方、クエリキューは、同時実行のしきい値やリソース制限に達したときに、システムの過負荷を防ぐために、受信クエリをキューに入れるのに 役立ちます。
リソースグループを介して大規模クエリをフィルタリングする
リソースグループは、大規模クエリを自動的に識別して終了させることができます。リソースグループを作成する際に、クエリが使用できる CPU 時間、メモリ使用量、またはスキャン行数の上限を指定できます。リソースグループにヒットしたすべてのクエリの中で、より多くのリソースを必要とするクエリは拒否され、エラーが返されます。リソースグループの詳細と手順については、Resource Isolation を参照してください。
リソースグループを作成する前に、Resource Group 機能が依存する Pipeline Engine を有効にするために、次のステートメントを実行する必要があります。
SET GLOBAL enable_pipeline_engine = true;
次の例では、CPU 時間の上限を 100 秒、スキャン行数の上限を 100000、メモリ使用量の上限を 1073741824 バイト (1 GB) に制限するリソースグループ bigQuery を作成します。
CREATE RESOURCE GROUP bigQuery
TO
(db='sr_hub')
WITH (
'cpu_weight' = '10',
'mem_limit' = '20%',
'big_query_cpu_second_limit' = '100',
'big_query_scan_rows_limit' = '100000',
'big_query_mem_limit' = '1073741824'
);
クエリの必要なリソースがいずれかの制限を超える場合、そのクエリは実行されず、エラーが返されます。次の例は、クエリがスキャン行数を超える要求をしたときに返されるエラーメッセージを示しています。
ERROR 1064 (HY000): exceed big query scan_rows limit: current is 4 but limit is 1
リソースグループを初めて設定する場合、通常のクエリを妨げないように、比較的高い制限を設定することをお勧めします。大規模クエリのパターンについての理解が深まった後に、これらの制限を微調整することができます。