跳到主要内容
版本:Latest-3.5

查询概要指标

StarRocks Query Profile 发出的原始指标的权威参考,按 operator 分组。
可用作词汇表;如需故障排除指南,请跳转到 query_profile_tuning_recipes.md

概要指标

关于查询执行的基本信息:

指标描述
Total查询消耗的总时间,包括计划、执行和分析阶段的持续时间。
Query State查询状态,可能的状态包括 Finished、Error 和 Running。
Query ID查询的唯一标识符。
Start Time查询开始的时间戳。
End Time查询结束的时间戳。
Total查询的总持续时间。
Query Type查询的类型。
Query State查询的当前状态。
StarRocks Version使用的 StarRocks 版本。
User执行查询的用户。
Default Db查询使用的默认数据库。
Sql Statement执行的 SQL 语句。
Variables查询中使用的重要变量。
NonDefaultSessionVariables查询中使用的非默认会话变量。
Collect Profile Time收集概要所花费的时间。
IsProfileAsync指示概要收集是否为异步。

计划器指标

提供计划器的全面概述。通常,如果在计划器上花费的总时间少于 10ms,则无需担心。

在某些情况下,计划器可能需要更多时间:

  1. 复杂查询可能需要额外的时间进行解析和优化,以确保最佳执行计划。
  2. 存在大量物化视图时,可能会增加查询重写所需的时间。
  3. 当多个并发查询耗尽系统资源并使用查询队列时,Pending 时间可能会延长。
  4. 涉及外部表的查询可能会因与外部元数据服务器的通信而增加额外时间。

示例:

     - -- Parser[1] 0
- -- Total[1] 3ms
- -- Analyzer[1] 0
- -- Lock[1] 0
- -- AnalyzeDatabase[1] 0
- -- AnalyzeTemporaryTable[1] 0
- -- AnalyzeTable[1] 0
- -- Transformer[1] 0
- -- Optimizer[1] 1ms
- -- MVPreprocess[1] 0
- -- MVTextRewrite[1] 0
- -- RuleBaseOptimize[1] 0
- -- CostBaseOptimize[1] 0
- -- PhysicalRewrite[1] 0
- -- DynamicRewrite[1] 0
- -- PlanValidate[1] 0
- -- InputDependenciesChecker[1] 0
- -- TypeChecker[1] 0
- -- CTEUniqueChecker[1] 0
- -- ColumnReuseChecker[1] 0
- -- ExecPlanBuild[1] 0
- -- Pending[1] 0
- -- Prepare[1] 0
- -- Deploy[1] 2ms
- -- DeployLockInternalTime[1] 2ms
- -- DeploySerializeConcurrencyTime[2] 0
- -- DeployStageByStageTime[6] 0
- -- DeployWaitTime[6] 1ms
- -- DeployAsyncSendTime[2] 0
- DeployDataSize: 10916
Reason:

执行概览指标

高层次的执行统计:

指标描述经验法则
FrontendProfileMergeTimeFE 端概要处理时间< 10ms 正常
QueryAllocatedMemoryUsage节点间分配的总内存
QueryDeallocatedMemoryUsage节点间释放的总内存
QueryPeakMemoryUsagePerNode每个节点的最大内存峰值< 80% 容量正常
QuerySumMemoryUsage节点间的总内存峰值
QueryExecutionWallTime执行的墙钟时间
QueryCumulativeCpuTime节点间的总 CPU 时间walltime * totalCpuCores 比较
QueryCumulativeOperatorTimeoperator 执行的总时间operator 时间百分比的分母
QueryCumulativeNetworkTimeExchange 节点的总网络时间
QueryCumulativeScanTimeScan 节点的总 IO 时间
QueryPeakScheduleTime最大 Pipeline 调度时间简单查询 < 1s 正常
QuerySpillBytes溢出到磁盘的数据< 1GB 正常

Fragment 指标

Fragment 级别的执行细节:

指标描述
InstanceNumFragmentInstances 的数量
InstanceIds所有 FragmentInstances 的 ID
BackendNum参与的 BE 数量
BackendAddressesBE 地址
FragmentInstancePrepareTimeFragment 准备阶段的持续时间
InstanceAllocatedMemoryUsage实例分配的总内存
InstanceDeallocatedMemoryUsage实例释放的总内存
InstancePeakMemoryUsage实例间的内存峰值

Pipeline 指标

Pipeline 执行细节和关系:

profile_pipeline_time_relationship

关键关系:

  • DriverTotalTime = ActiveTime + PendingTime + ScheduleTime
  • ActiveTime = ∑ OperatorTotalTime + OverheadTime
  • PendingTime = InputEmptyTime + OutputFullTime + PreconditionBlockTime + PendingFinishTime
  • InputEmptyTime = FirstInputEmptyTime + FollowupInputEmptyTime
指标描述
DegreeOfParallelismPipeline 执行的并行度。
TotalDegreeOfParallelism并行度的总和。由于同一 Pipeline 可能在多台机器上执行,此项汇总了所有值。
DriverPrepareTime准备阶段所花费的时间。此指标不包含在 DriverTotalTime 中。
DriverTotalTimePipeline 的总执行时间,不包括准备阶段所花费的时间。
ActiveTimePipeline 的执行时间,包括每个 operator 的执行时间和整体框架开销,如调用 has_output、need_input 等方法的时间。
PendingTimePipeline 因各种原因被阻止调度的时间。
InputEmptyTimePipeline 因输入队列为空而被阻止的时间。
FirstInputEmptyTimePipeline 首次因输入队列为空而被阻止的时间。首次阻止时间单独计算,因为首次阻止主要由 Pipeline 依赖关系引起。
FollowupInputEmptyTimePipeline 随后因输入队列为空而被阻止的时间。
OutputFullTimePipeline 因输出队列已满而被阻止的时间。
PreconditionBlockTimePipeline 因未满足的依赖关系而被阻止的时间。
PendingFinishTimePipeline 因等待异步任务完成而被阻止的时间。
ScheduleTimePipeline 的调度时间,从进入就绪队列到被调度执行。
BlockByInputEmptyPipeline 因 InputEmpty 被阻止的次数。
BlockByOutputFullPipeline 因 OutputFull 被阻止的次数。
BlockByPreconditionPipeline 因未满足的前提条件而被阻止的次数。

Operator 指标

指标描述
PrepareTime准备所花费的时间。
OperatorTotalTimeOperator 消耗的总时间。满足方程:OperatorTotalTime = PullTotalTime + PushTotalTime + SetFinishingTime + SetFinishedTime + CloseTime。排除准备所花费的时间。
PullTotalTimeOperator 执行 push_chunk 所花费的总时间。
PushTotalTimeOperator 执行 pull_chunk 所花费的总时间。
SetFinishingTimeOperator 执行 set_finishing 所花费的总时间。
SetFinishedTimeOperator 执行 set_finished 所花费的总时间。
PushRowNumOperator 的输入行数累计。
PullRowNumOperator 的输出行数累计。
JoinRuntimeFilterEvaluateJoin Runtime Filter 的评估次数。
JoinRuntimeFilterHashTime计算 Join Runtime Filter 哈希所花费的时间。
JoinRuntimeFilterInputRowsJoin Runtime Filter 的输入行数。
JoinRuntimeFilterOutputRowsJoin Runtime Filter 的输出行数。
JoinRuntimeFilterTimeJoin Runtime Filter 所花费的时间。

Scan Operator

OLAP Scan Operator

OLAP_SCAN Operator 负责从 StarRocks 内表中读取数据。

指标描述
Table表名。
Rollup物化视图名称。如果没有命中物化视图,则等同于表名。
SharedScan是否启用了 enable_shared_scan 会话变量。
TabletCounttablet 的数量。
MorselsCountmorsels 的数量,即基本 IO 执行单元。
PushdownPredicates下推谓词的数量。
Predicates谓词表达式。
BytesRead读取的数据大小。
CompressedBytesRead从磁盘读取的压缩数据大小。
UncompressedBytesRead从磁盘读取的解压缩数据大小。
RowsRead读取的行数(经过谓词过滤后)。
RawRowsRead读取的原始行数(谓词过滤前)。
ReadPagesNum读取的页数。
CachedPagesNum缓存的页数。
ChunkBufferCapacityChunk Buffer 的容量。
DefaultChunkBufferCapacityChunk Buffer 的默认容量。
PeakChunkBufferMemoryUsageChunk Buffer 的内存使用峰值。
PeakChunkBufferSizeChunk Buffer 的大小峰值。
PrepareChunkSourceTime准备 Chunk Source 所花费的时间。
ScanTime累计扫描时间。扫描操作在异步 I/O 线程池中完成。
IOTaskExecTimeIO 任务的执行时间。
IOTaskWaitTimeIO 任务从成功提交到调度执行的等待时间。
SubmitTaskCountIO 任务提交的次数。
SubmitTaskTime任务提交所花费的时间。
PeakIOTasksIO 任务的峰值数量。
PeakScanTaskQueueSizeIO 任务队列的峰值大小。

Connector Scan Operator

类似于 OLAP_SCAN operator,但用于扫描外部表,如 Iceberg/Hive/Hudi/Detal。

指标描述
DataSourceType数据源类型,可以是 HiveDataSource、ESDataSource 等。
Table表名。
TabletCounttablet 的数量。
MorselsCountmorsels 的数量。
Predicates谓词表达式。
PredicatesPartition应用于分区的谓词表达式。
SharedScan是否启用了 enable_shared_scan 会话变量。
ChunkBufferCapacityChunk Buffer 的容量。
DefaultChunkBufferCapacityChunk Buffer 的默认容量。
PeakChunkBufferMemoryUsageChunk Buffer 的内存使用峰值。
PeakChunkBufferSizeChunk Buffer 的大小峰值。
PrepareChunkSourceTime准备 Chunk Source 所花费的时间。
ScanTime累计扫描时间。扫描操作在异步 I/O 线程池中完成。
IOTaskExecTimeI/O 任务的执行时间。
IOTaskWaitTimeI/O 任务从成功提交到调度执行的等待时间。
SubmitTaskCountI/O 任务提交的次数。
SubmitTaskTime任务提交所花费的时间。
PeakIOTasksI/O 任务的峰值数量。
PeakScanTaskQueueSizeI/O 任务队列的峰值大小。

Exchange Operator

Exchange Operator 负责在 BE 节点之间传输数据。可以有几种交换操作:GATHER/BROADCAST/SHUFFLE。

可能使 Exchange Operator 成为查询瓶颈的典型场景:

  1. Broadcast Join:这是一种适合小表的方法。然而,在某些情况下,当优化器选择了次优的查询计划时,可能导致网络带宽显著增加。
  2. Shuffle Aggregation/Join:对大表进行 Shuffle 可能导致网络带宽显著增加。

Exchange Sink Operator

指标描述
ChannelNum通道数量。通常,通道数量等于接收者数量。
DestFragments目标 FragmentInstance ID 列表。
DestID目标节点 ID。
PartType数据分布模式,包括:UNPARTITIONED、RANDOM、HASH_PARTITIONED 和 BUCKET_SHUFFLE_HASH_PARTITIONED。
SerializeChunkTime序列化 chunk 所花费的时间。
SerializedBytes序列化数据的大小。
ShuffleChunkAppendCounter当 PartType 为 HASH_PARTITIONED 或 BUCKET_SHUFFLE_HASH_PARTITIONED 时,Chunk Append 操作的次数。
ShuffleChunkAppendTime当 PartType 为 HASH_PARTITIONED 或 BUCKET_SHUFFLE_HASH_PARTITIONED 时,Chunk Append 操作所花费的时间。
ShuffleHashTime当 PartType 为 HASH_PARTITIONED 或 BUCKET_SHUFFLE_HASH_PARTITIONED 时,计算哈希所花费的时间。
RequestSent发送的数据包数量。
RequestUnsent未发送的数据包数量。当存在短路逻辑时,此指标为非零;否则为零。
BytesSent发送的数据大小。
BytesUnsent未发送的数据大小。当存在短路逻辑时,此指标为非零;否则为零。
BytesPassThrough如果目标节点是当前节点,数据将不会通过网络传输,这称为 passthrough 数据。此指标指示此类 passthrough 数据的大小。Passthrough 由 enable_exchange_pass_through 控制。
PassThroughBufferPeakMemoryUsagePassThrough Buffer 的内存使用峰值。
CompressTime压缩时间。
CompressedBytes压缩数据的大小。
OverallThroughput吞吐率。
NetworkTime数据包传输所花费的时间(不包括接收后的处理时间)。
NetworkBandwidth估计的网络带宽。
WaitTime由于发送者队列已满而等待的时间。
OverallTime整个传输过程的总时间,即从发送第一个数据包到确认最后一个数据包正确接收的时间。
RpcAvgTimeRPC 的平均时间。
RpcCountRPC 的总次数。

Exchange Source Operator

指标描述
RequestReceived接收的数据包大小。
BytesReceived接收的数据大小。
DecompressChunkTime解压缩 chunk 所花费的时间。
DeserializeChunkTime反序列化 chunk 所花费的时间。
ClosureBlockCount被阻止的 Closure 数量。
ClosureBlockTimeClosure 被阻止的时间。
ReceiverProcessTotalTime接收端处理所花费的总时间。
WaitLockTime锁等待时间。

Aggregate Operator

指标列表

指标描述
GroupingKeysGROUP BY 列。
AggregateFunctions聚合函数计算所花费的时间。
AggComputeTime聚合函数 + Group By 的时间。
ChunkBufferPeakMemChunk Buffer 的内存使用峰值。
ChunkBufferPeakSizeChunk Buffer 的大小峰值。
ExprComputeTime表达式计算的时间。
ExprReleaseTime表达式释放的时间。
GetResultsTime提取聚合结果的时间。
HashTableSize哈希表的大小。
HashTableMemoryUsage哈希表的内存大小。
InputRowCount输入行数。
PassThroughRowCount在自动模式下,低聚合导致降级为流模式后以流模式处理的数据行数。
ResultAggAppendTime追加聚合结果列所花费的时间。
ResultGroupByAppendTime追加 Group By 列所花费的时间。
ResultIteratorTime遍历哈希表的时间。
StreamingTime流模式下的处理时间。

Join Operator

指标列表

指标描述
DistributionMode分布类型,包括:BROADCAST、PARTITIONED、COLOCATE 等。
JoinPredicatesJoin 谓词。
JoinTypeJoin 类型。
BuildBuckets哈希表中的桶数量。
BuildKeysPerBucket哈希表中每个桶的键数量。
BuildConjunctEvaluateTime构建阶段连接评估所花费的时间。
BuildHashTableTime构建哈希表所花费的时间。
ProbeConjunctEvaluateTime探测阶段连接评估所花费的时间。
SearchHashTableTimer搜索哈希表所花费的时间。
CopyRightTableChunkTime从右表复制 chunk 所花费的时间。
OutputBuildColumnTime输出构建侧列所花费的时间。
OutputProbeColumnTime输出探测侧列所花费的时间。
HashTableMemoryUsage哈希表的内存使用。
RuntimeFilterBuildTime构建运行时过滤器所花费的时间。
RuntimeFilterNum运行时过滤器的数量。

Window Function Operator

指标描述
ProcessMode执行模式,包括两个部分:第一部分包括 Materializing 和 Streaming;第二部分包括 Cumulative、RemovableCumulative、ByDefinition。
ComputeTime窗口函数计算所花费的时间。
PartitionKeys分区列。
AggregateFunctions聚合函数。
ColumnResizeTime列调整大小所花费的时间。
PartitionSearchTime搜索分区边界所花费的时间。
PeerGroupSearchTime搜索同级组边界所花费的时间。仅当窗口类型为 RANGE 时有意义。
PeakBufferedRows缓冲区中的行数峰值。
RemoveUnusedRowsCount移除未使用缓冲区的次数。
RemoveUnusedTotalRows从未使用缓冲区中移除的总行数。

Sort Operator

指标描述
SortKeys排序键。
SortType查询结果的排序方法:全排序或排序前 N 个结果。
MaxBufferedBytes缓冲数据的峰值大小。
MaxBufferedRows缓冲行数的峰值。
NumSortedRuns排序运行的次数。
BuildingTime排序期间维护内部数据结构所花费的时间。
MergingTime排序期间合并排序运行所花费的时间。
SortingTime排序所花费的时间。
OutputTime构建输出排序序列所花费的时间。

Merge Operator

指标描述级别
Limit限制。主要
Offset偏移。主要
StreamingBatchSize当在流模式下执行合并时,每次合并操作处理的数据大小主要
LateMaterializationMaxBufferChunkNum启用延迟物化时缓冲区中的最大 chunk 数量。主要
OverallStageCount所有阶段的总执行次数。主要
OverallStageTime每个阶段的总执行时间。主要
1-InitStageCountInit 阶段的执行次数。次要
2-PrepareStageCountPrepare 阶段的执行次数。次要
3-ProcessStageCountProcess 阶段的执行次数。次要
4-SplitChunkStageCountSplitChunk 阶段的执行次数。次要
5-FetchChunkStageCountFetchChunk 阶段的执行次数。次要
6-PendingStageCountPending 阶段的执行次数。次要
7-FinishedStageCountFinished 阶段的执行次数。次要
1-InitStageTimeInit 阶段的执行时间。次要
2-PrepareStageTimePrepare 阶段的执行时间。次要
3-ProcessStageTimeProcess 阶段的执行时间。次要
4-SplitChunkStageTimeSplit 阶段所花费的时间。次要
5-FetchChunkStageTimeFetch 阶段所花费的时间。次要
6-PendingStageTimePending 阶段所花费的时间。次要
7-FinishedStageTimeFinished 阶段所花费的时间。次要
LateMaterializationGenerateOrdinalTime延迟物化期间生成序数列所花费的时间。第三级
SortedRunProviderTime在 Process 阶段从提供者检索数据所花费的时间。第三级

TableFunction Operator

指标描述
TableFunctionExecTime表函数的计算时间。
TableFunctionExecCount表函数的执行次数。

Project Operator

Project Operator 负责执行 SELECT <expr>。如果查询中有一些耗时的表达式,此 operator 可能会花费大量时间。

指标描述
ExprComputeTime表达式的计算时间。
CommonSubExprComputeTime公共子表达式的计算时间。

LocalExchange Operator

指标描述
TypeLocal Exchange 的类型,包括:PassthroughPartitionBroadcast
ShuffleNumShuffle 的次数。此指标仅在 TypePartition 时有效。
LocalExchangePeakMemoryUsage内存使用峰值。
LocalExchangePeakBufferSize缓冲区的大小峰值。
LocalExchangePeakBufferMemoryUsage缓冲区的内存使用峰值。
LocalExchangePeakBufferChunkNum缓冲区中的 chunk 数量峰值。
LocalExchangePeakBufferRowNum缓冲区中的行数峰值。
LocalExchangePeakBufferBytes缓冲区中的数据大小峰值。
LocalExchangePeakBufferChunkSize缓冲区中的 chunk 大小峰值。
LocalExchangePeakBufferChunkRowNum缓冲区中每个 chunk 的行数峰值。
LocalExchangePeakBufferChunkBytes缓冲区中每个 chunk 的数据大小峰值。

OlapTableSink Operator

OlapTableSink Operator 负责执行 INSERT INTO <table> 操作。

提示
  • 如果 OlapTableSinkPushChunkNum 指标的最大值和最小值之间差异过大,表明上游 operator 中的数据倾斜,可能导致导入性能瓶颈。
  • RpcClientSideTime 等于 RpcServerSideTime 加上网络传输时间和 RPC 框架处理时间。如果 RpcClientSideTimeRpcServerSideTime 之间有显著差异,考虑启用压缩以减少传输时间。
指标描述
IndexNum为目标表创建的同步物化视图的数量。
ReplicatedStorage是否启用了单领导者复制。
TxnID导入事务的 ID。
RowsRead从上游 operator 读取的行数。
RowsFiltered由于数据质量不足而被过滤掉的行数。
RowsReturned写入目标表的行数。
RpcClientSideTime客户端记录的导入的总 RPC 时间消耗。
RpcServerSideTime服务器端记录的导入的总 RPC 时间消耗。
PrepareDataTime数据准备阶段的总时间消耗,包括数据格式转换和数据质量检查。
SendDataTime发送数据的本地时间消耗,包括序列化和压缩数据的时间,以及将任务提交到发送者队列的时间。