クエリプロファイルは、クエリに関わるすべてのワーカーノードから実行情報を取得します。クエリプロファイルを使用すると、視覚的な分析を通じて StarRocks インスタンスのクエリのパフォーマンスボトルネックを素早く特定できます。
クエリプロファイルの有効化
インスタンスのクエリプロファイルを有効にするには、enable_profile 変数を true に設定します。
SET enable_profile = true;
-
インスタンスがカーネルバージョン 2.5.13 以降 (2.x シリーズ) または 3.1.5 以降 (3.x シリーズ) を使用している場合、クエリパフォーマンスに影響を与えることなく、クエリプロファイルをグローバルに有効にできます。
-
上記よりも前のカーネルバージョンの場合は、クエリパフォーマンスの低下を避けるため、クエリプロファイルを有効にする前にカーネルをアップグレードしてください。
クエリプロファイルの構造
クエリプロファイルは、次の 5 つのパートで構成されています:
-
フラグメント:実行ツリーです。クエリは 1 つ以上のフラグメントで構成されています。
-
フラグメントインスタンス:フラグメントは複数のインスタンスを持つことができ、それぞれフラグメントインスタンスと呼ばれます。それぞれが、異なるコンピューティングノード上で実行されます。
-
パイプライン:実行チェーンです。パイプラインは一連のオペレーターで構成されています。フラグメントインスタンスは、1 つ以上のパイプラインに分割されます。
-
パイプラインドライバー:パイプラインは複数のインスタンスを持つことができ、それぞれパイプラインドライバーと呼ばれます。これにより、複数のコアを最大限に活用できます。
-
オペレーター:パイプラインのコンポーネントです。パイプラインは複数のオペレーターで構成されています。
クエリプロファイルの可視化
StarRocks Manager は、クエリプロファイルをツリー構造で可視化します。各ノードは集約されたオペレーターを表します。オペレーターをクリックすると、ページ右側のタブにその詳細が表示されます。オペレーターが選択されていない場合、右側にはクエリの概要が表示されます。
実行の概要
実行詳細ページでは、左側に視覚的な実行計画ツリーが表示されます。各オペレーターノードには、実行時間とパーセンテージが表示されます。HASH_JOIN のように多くの時間を消費するノードは、赤色でハイライト表示されます。ノード間の線は、処理された行数を示します。右側では、上部のセクションに時間の割合でソートされたノードのリストが表示され、下部のセクションにはサマリーメトリクスの概要が表示されます。
[Execution Details]ページには、実行時間、I/O パフォーマンス、ネットワークデータ転送量などの主要なサマリーメトリクスが表示されます。
-
合計
メトリクス
説明
Total
クエリの総消費時間です。これには、計画、実行、分析の各フェーズの期間が含まれます。
PlannerTotalTime
計画時間です。これには、SQL の解析、分析、最適化、および実行計画の生成が含まれます。
ExecutionWallTime
クエリの実行時間と BE 側の実行時間 (実行のウォールクロック時間) です。
CollectProfileTime
プロファイルの収集時間です。これは、BE からプロファイルメトリクスを収集するために費やされた時間です。
-
実行時間
メトリクス
説明
ExecutionWallTime
クエリ実行で消費された合計時間です。
CumulativeCpuTime
すべての BE ノードにおける CPU 時間の合計です。これは、総 CPU リソース消費量を反映しています。
CpuUtilization
CPU 使用率 = CumulativeCpuTime / ExecutionWallTime。これは、使用された CPU コアの平均数を示します。
CumulativeWaitTime
パイプラインの累積待機時間です。これには、スケジューリング待機時間 (ScheduleTime) や、空の入力キュー、満杯の出力キュー、または準備ができていない依存関係などの条件によるブロッキング時間 (PendingTime) が含まれます。
OperatorCumulativetime
すべてのオペレーターの実行時間の合計です。これには、I/O、ネットワーク、および計算が含まれます。
IO
すべての Scan オペレーターの累積 I/O 時間です。これには、ローカルディスクの読み取り、リモート読み取り、およびデータキャッシュアクセスが含まれます。
-
I/O
メトリクス
説明
RawRowsRead
すべての SCAN ノードによってスキャンされたレコードの総数です。
DiskReadBytes
すべての SCAN 実行ノードによって読み取られた圧縮データの合計量です。
LocalDiskReadBytes
すべての Connector Scan 実行ノードによってローカルキャッシュから読み取られた圧縮データの合計サイズです。このメトリクスは、データ共有インスタンスにのみ適用されます。
RemoteReadBytes
すべての Connector Scan 実行ノードによって OSS から読み取られた圧縮データの合計サイズです。このメトリクスは、データ共有インスタンスにのみ適用されます。
ResultRows
すべての SCAN 実行ノードによって出力されたレコードの総数です。
ResultBytes
すべての SCAN 実行ノードによって出力されたデータの合計量です。
-
ネットワーク
メトリクス
説明
Bytes sent over network
すべての Exchange 実行ノードによって転送されたバイトの総数です。これは BytesSent メトリクスに対応します。
オペレーター
オペレーターをクリックすると、ページ右側に以下の情報が表示されます:
-
コアメトリクス タブ:オペレーターのコアメトリクスを表示します。
-
ノードメトリクス タブ:オペレーターのすべてのメトリクスを表示します。
-
パイプライン タブ:オペレーターを含むパイプラインのメトリクスを表示します。これらのメトリクスはスケジューリングにのみ関連しており、特に注意を払う必要はありません。
-
オペレーターが費やす時間の割合が大きいほど、その色は濃くなります。実行時間が最も長い上位 3 つのノードは色分けされています。これにより、クエリボトルネックを容易に特定できます。
-
マウスホイールをスクロールするか、ズームボタンをクリックして、プロファイルツリーを拡大・縮小してください。
キーメトリクス
クエリレベル
-
サマリーメトリクス
メトリック
説明
合計
プランニング、実行、プロファイリングの各フェーズで費やした時間を含んだ、クエリの合計経過時間です。
QueryCpuCost
クエリが消費した累積 CPU 時間です。この値はすべての同時実行プロセスの CPU 時間の合計であるため、実際の実行時間を超えることがあります。
QueryMemCost
クエリが消費した合計メモリです。
変数
クエリに関連付けられた変数です。
-
パイプラインレベル
メトリック
説明
ActiveTime
ドライバーの実行時間です。
DriverTotalTime
ドライバーが消費した合計時間です。
PendingTime
ドライバーが入力と前提条件を待機する時間です。
オペレーターレベル
-
一般的なオペレーターメトリック
メトリック
説明
OperatorTotalTime
オペレーターの総実行時間。
PushRowNum
オペレーターが出力した総行数。
PullRowNum
オペレーターへの総入力行数。
PullChunkNum
オペレーターへの総入力チャンク数。
PushChunkNum
オペレーターが出力した総チャンク数。
PeakMemoryUsage
オペレーターのピークメモリ使用量。
-
OLAP Scan オペレーター
メトリック
説明
Table
テーブル名。
ScanTime
非同期 I/O スレッドプールで実行される、スキャン操作の合計時間。
TabletCount
スキャンされたタブレットの数。
PushdownPredicates
プッシュダウン述語の数。
BytesRead
読み取られたデータ量。
CompressedBytesRead
読み取られた圧縮データ量。
IOTime
合計 I/O 時間。
BitmapIndexFilterRows
ビットマップインデックスでフィルター処理された行数。
BloomFilterFilterRows
ブルームフィルターでフィルター処理された行数。
SegmentRuntimeZoneMapFilterRows
ランタイムゾーンマップでフィルター処理された行数。
SegmentZoneMapFilterRows
ゾーンマップでフィルター処理された行数。
ShortKeyFilterRows
ショートキーでフィルター処理された行数。
ZoneMapIndexFilterRows
ゾーンマップインデックスでフィルター処理された行数。
-
Connector Scan オペレーター
これらのメトリックは OLAP Scan オペレーターのメトリックに追加され、コンピューティングとストレージの分離インスタンスに適用されます。
メトリック
説明
CompressedBytesReadLocalDisk
コンピューティングノードのローカルキャッシュから読み取られた圧縮データ量。
CompressedBytesReadRemote
OSS から読み取られた圧縮データの合計量。
IOTimeLocalDisk
ローカルキャッシュからデータを読み取る際の I/O 操作に費やされた時間。
IOTimeRemote
OSS からデータを読み取る際の I/O 操作に費やされた時間。
-
Exchange オペレーター
-
Sink
メトリック
説明
PartType
データ分散モード。有効な値:
UNPARTITIONED、RANDOM、HASH_PARTITIONED、BUCKET_SHUFFLE_HASH_PARTITIONED。BytesSent
送信されたデータ量。
OverallThroughput
全体的なデータ転送スループット。
NetworkTime
パケットの送信に費やされた時間。受信後の処理時間は含まれません。
WaitTime
送信側のキューが満杯であるために待機した時間。
NetworkBandwidth
データ転送中に計算されたネットワーク帯域幅。
-
Source
メトリック
説明
SenderWaitLockTime
送信側がロックを待機した合計時間。
BytesReceived
受信したデータ量。
DecompressChunkTime
データ チャンクの展開に費やされた合計時間。
DeserializeChunkTime
データ チャンクのデシリアライズに費やされた合計時間。
SenderTotalTime
送信側が費やした合計時間。
-
-
Aggregate オペレーター
メトリック
説明
GroupingKeys
GROUP BY 句で使用される列。
AggregateFunctions
適用された集計関数。
AggComputeTime
集計関数の計算に費やされた時間。
ExprComputeTime
式の計算に費やされた時間。
HashTableSize
集計用ハッシュテーブルのサイズ。
-
Join オペレーター
-
プローブ
メトリック
説明
DistributionMode
データ分散モード。
JoinType
Join タイプ。
OtherJoinConjunctEvaluateTime
他の Join 述語の評価に費やされた時間。
ProbeConjunctEvaluateTime
プローブ述語の評価に費やされた時間。
SearchHashTableTime
ハッシュテーブルの検索に費やされた時間。
WhereConjunctEvaluateTime
WHERE 述語の評価に費やされた時間。
-
ビルド
メトリック
説明
JoinPredicates
Join 条件で使用される述語。
JoinType
Join タイプ。
BuildBuckets
Join 用ハッシュテーブルのバケット数。
BuildHashTableTime
Join 用ハッシュテーブルの構築時間。
RuntimeFilterBuildTime
ランタイムフィルターの構築に費やされた時間。
RuntimeFilterNum
ランタイムフィルターの数。
DistributionMode
データ分散モード。
-
-
Window Function オペレーター
メトリック
説明
ComputeTime
ウィンドウ関数の計算に費やされた時間。
PartitionKeys
ウィンドウのパーティション分割に使用されるキー。
AggregateFunctions
適用された集計関数。
-
Sort オペレーター
メトリック
説明
SortKeys
ソートキー。
SortType
ソート方法。例:フルソート、トップ N ソート。
MergingTime
ソート済みデータのランをマージするために費やされた時間。
SortingTime
データのソートに費やされた時間。
-
TableFunction オペレーター
メトリック
説明
TableFunctionExecTime
テーブル関数の計算に費やされた時間。
TableFunctionExecCount
テーブル関数が実行された回数。
-
Project オペレーター
メトリック
説明
ExprComputeTime
式の計算に費やされた時間。
CommonSubExprComputeTime
共通部分式の計算に費やされた時間。
-
LocalExchange オペレーター
メトリック
説明
Type
ローカル交換タイプ。有効な値:
Passthrough、Partition、Broadcast。ShuffleNum
シャッフルの数。このメトリックは、
TypeがPartitionの場合にのみ適用されます。