クエリプロファイルの構造とメトリクス
クエリプロファイルの構造
クエリプロファイルの構造は、StarRocks の実行エンジンの設計に密接に関連しており、以下の5つの部分で構成されています。
- Fragment: 実行ツリー。クエリは1つ以上のフラグメントで構成されます。
- FragmentInstance: 各フラグメントは複数のインスタンスを持つことができ、各インスタンスは FragmentInstance と呼ばれ、異なるコンピュートノードによって実行されます。
- Pipeline: FragmentInstance は複数のパイプラインに分割されます。パイプラインは、接続された Operator インスタンスのグループからなる実行チェーンです。
- PipelineDriver: パイプラインは複数のインスタンスを持つことができ、各インスタンスは PipelineDriver と呼ばれ、複数の計算コアを最大限に活用します。
- Operator: PipelineDriver は複数の Operator インスタンスで構成されています。

クエリプロファイルのマージ戦略
クエリプロファイルの構造を分析することで、同じ Fragment に関連する複数の FragmentInstance が構造的に高い類似性を持っていることが容易に観察できます。同様に、同じ Pipeline に属する複数の PipelineDriver も類似した構造的特徴を示します。クエリプロファイルのボリュームを削減 するために、StarRocks はデフォルトで FragmentInstance 層と PipelineDriver 層をマージします。その結果、元の5層構造は3層に簡略化されます。
- Fragment
- Pipeline
- Operator
このマージ動作は、セッション変数 pipeline_profile_level を通じて制御できます。この変数には2つの有効な値があります。
1(デフォルト): StarRocks はメトリクスを3層構造にマージします。2: StarRocks はメトリクスをマージしません。元の5層構造が保持されます。- その他の値はデフォルト値
1として扱われます。
一般的に、このパラメータを 2 に設定することは推奨されません。5層構造のクエリプロファイルには多くの制限があります。例えば、プロファイルを可視化ツールで分析することができません。したがって、マージプロセスが重要な情報の損失を引き起こさない限り、このパラメータを調整する必要はありません。
メトリクスのマージと MIN/MAX 値
FragmentInstance と PipelineDriver をマージする際、同じ名前のすべてのメトリクスがマージされます。すべての同時実行インスタンスの各メトリクスの最小値と最大値のみが記録されます。異なるタイプのメトリクスは異なるマージ戦略を使用します。
- 時間関連のメトリクスは平均を 取ります。例えば:
OperatorTotalTimeはすべての同時実行インスタンスの平均時間消費です。__MAX_OF_OperatorTotalTimeはすべての同時実行インスタンスの最大時間消費です。__MIN_OF_OperatorTotalTimeはすべての同時実行インスタンスの最小時間消費です。
- OperatorTotalTime: 2.192us
- __MAX_OF_OperatorTotalTime: 2.502us
- __MIN_OF_OperatorTotalTime: 1.882us
- 時間に関連しないメトリクスは合計されます。例えば:
PullChunkNumはすべての同時実行インスタンスのこのメトリクスの合計です。__MAX_OF_PullChunkNumはすべての同時実行インスタンスのこのメトリクスの最大値です。__MIN_OF_PullChunkNumはすべての同時実行インスタンスのこのメトリクスの最小値です。
- PullChunkNum: 146.66K (146660)
- __MAX_OF_PullChunkNum: 24.45K (24450)
- __MIN_OF_PullChunkNum: 24.435K (24435)
- 極値を持たない一部のメトリクスは、すべての同時実行インスタンスで同じ値を持ちます。例えば:
DegreeOfParallelism。
通常、MIN と MAX の値に大きな差がある場合、データの偏りが高い可能性を示しています。考えられるシナリオには、集計やジョイン操作が含まれます。
- OperatorTotalTime: 2m48s
- __MAX_OF_OperatorTotalTime: 10m30s
- __MIN_OF_OperatorTotalTime: 279.170us
クエリプロファイルメトリクスリスト
クエリプロファイルには、クエリの実行に関する詳細情報を提供する多数のメトリクスが含まれています。ほとんどの場合、オペレーターの実行時間と処理されたデータのサイズにのみ注目する必要があります。ボトルネックを特定したら、それに特化して対処できます。
サマリーメトリクス
Total
説明: クエリによって消費された総時間。計画、実行、およびプロファイリングフェーズの期間を含みます。
Query State
説明: クエリの状態。可能な状態には、Finished、Error、および Running が含まれます。
実行概要メトリクス
FrontendProfileMergeTime
説明: フロントエンド (FE) 側でのクエリプロファイル処理時間。
QueryAllocatedMemoryUsage
説明: すべてのコンピュートノードにわたる累積割り当てメモリ。
QueryDeallocatedMemoryUsage
説明: すべてのコンピュートノードにわたる累積解放メモリ。
QueryPeakMemoryUsage
説明: すべてのコンピュートノードにわたる最大ピークメモリ。
QueryExecutionWallTime
説明: 実行のウォール時間。
QueryCumulativeCpuTime
説明: すべてのコンピュートノードにわたる累積 CPU 時間。
QueryCumulativeOperatorTime
説明: すべてのノードにわたる累積時間。これは単純な線形累積ですが、実際には異なるオペレーターの実行時間が重なる可能性があります。このパラメータは、各オペレーターに費やされた時間の割合を計算するための分母として機能します。
QueryCumulativeNetworkTime
説明: すべての Exchange ノードの累積ネットワーク時間。累積オペレーター時間と同様に、異なる Exchange の実際の実行時間が重なる可能性があります。
QueryCumulativeScanTime
説明: すべての Scan ノードの累積 IO 時間。累積オペレーター時間と同様に、異なる Scan 操作の実際の実行時間が重なる可能性があります。