Query queue
クエリキュー
このトピックでは、StarRocksでのクエリキューの管理方法について説明します。
v2.5から、StarRocksはクエリキューをサポートしています。クエリキューが有効になっている場合、StarRocksはクエリの同時実行数のしきい値やリソース制限に達した場合に、クエリを自動的にキューに入れるため、過負荷を回避できます。保留中のクエリは、必要な計算リソースが利用可能になるまでキューで待機します。
クエリのCPU使用率、メモリ使用率、およびクエリ並行性に対してしきい値を設定して、クエリキューをトリガーすることができます。
クエリキューを有効にする
クエリキューはデフォルトで無効になっています。対応するグローバルセッション変数を設定することで、INSERTローディング、SELECTクエリ、統計クエリのクエリキューを有効にすることができます。
- ローディングタスクのためのクエリキューを有効にする:
SET GLOBAL enable_query_queue_load = true;
- SELECTクエリのためのクエリキューを有効にする:
SET GLOBAL enable_query_queue_select = true;
- 統計クエリのためのクエリキューを有効にする:
SET GLOBAL enable_query_queue_statistic = true;
リソースのしきい値を指定する
以下のグローバルセッション変数を使用して、クエリキューをトリガーするしきい値を設定することができます。
変数 | デフォルト | 説明 |
---|---|---|
query_queue_concurrency_limit | 0 | BE上での同時クエリの上限。 |
query_queue_mem_used_pct_limit | 0 | BE上でのメモリ使用率の上限パーセンテージ。 |
query_queue_cpu_used_permille_limit | 0 | BE上でのCPU使用率パーミル(CPU使用率 * 1000)の上限。 |
注記
デフォルトでは、BEは1秒間隔でFEにリソース使用状況を報告します。BEの設定項目
report_resource_usage_interval_ms
を設定することで、このインターバルを変更することができます。
クエリキューの設定
以下のグローバルセッション変数を使用して、クエリキューのキャパシティとキュー内のクエリの最大タイムアウトを設定することができます。
変数 | デフォルト | 説明 |
---|---|---|
query_queue_max_queued_queries | 0 | キュー内のクエリの上限。このしきい値に達すると、新たなクエリは拒否されます。 |
query_queue_pending_timeout_second | 300 | キュー内の保留中のクエリの最大タイムアウト。このしきい値に達すると、対応するクエリは拒否されます。単位:秒。 |
クエリキューの統計情報を表示する
次の方法を使用して、クエリキューの統計情報を表示することができます。
- SHOW PROCを使用して、BEノードでの実行中のクエリの数、メモリ使用状況、およびCPU使用状況を確認します。
mysql> SHOW PROC '/backends'\G
*************************** 1. row ***************************
...
NumRunningQueries: 0
MemUsedPct: 0.79 %
CpuUsedPct: 0.0 %
- SHOW PROCESSLISTを使用して、キュー内にクエリがあるかどうか(
IsPending
がtrue
の場合)を確認します。
mysql> SHOW PROCESSLIST;
+------+------+---------------------+-------+---------+---------------------+------+-------+-------------------+-----------+
| Id | User | Host | Db | Command | ConnectionStartTime | Time | State | Info | IsPending |
|------+-------+---------------------+-------+---------+---------------------+------+-------+-------------------+-----------|
| 2 | root | xxx.xx.xxx.xx:xxxxx | | Query | 2022-11-24 18:08:29 | 0 | OK | SHOW PROCESSLIST | false |
+------+------+---------------------+-------+---------+---------------------+------+-------+-------------------+-----------+
- FEの監査ログファイル fe.audit.log を確認します。フィールド
PendingTimeMs
はクエリがキューに入っている時間を示し、単位はミリ秒です。 - 次のFEメトリックスを確認します:
メトリックス | 説明 |
---|---|
starrocks_fe_query_queue_pending | キュー内の保留中のクエリの数。 |
starrocks_fe_query_queue_total | キューに入っているクエリの総数。 |
starrocks_fe_query_queue_timeout | キュー内のタイムアウトしたクエリの数。 |