メインコンテンツまでスキップ

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上での同時クエリの上限。0より大きな値に設定すると、設定が有効になります。

query_queue_mem_used_pct_limit

0

BE上でのメモリ使用率の上限パーセンテージ。0より大きな値に設定すると、設定が有効になります。範囲:[0, 1]

query_queue_cpu_used_permille_limit

0

BE上でのCPU使用率パーミル(CPU使用率 * 1000)の上限。0より大きな値に設定すると、設定が有効になります。範囲:[0, 1000]

注記

デフォルトでは、BEは1秒間隔でFEにリソース使用状況を報告します。BEの設定項目 report_resource_usage_interval_ms を設定することで、このインターバルを変更することができます。

クエリキューの設定

以下のグローバルセッション変数を使用して、クエリキューのキャパシティとキュー内のクエリの最大タイムアウトを設定することができます。

変数

デフォルト

説明

query_queue_max_queued_queries

0

キュー内のクエリの上限。このしきい値に達すると、新たなクエリは拒否されます。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を使用して、キュー内にクエリがあるかどうか(IsPendingtrueの場合)を確認します。
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

キュー内のタイムアウトしたクエリの数。