跳到主要内容
版本: 最新版本-3.5

查询 Profile 指标

StarRocks 查询 Profile 发出的原始指标的权威参考,按算子分组。
将其用作词汇表;要获取故障排除指导,请跳转到 query_profile_tuning_recipes.md

总结指标

关于查询执行的基本信息

指标描述
总计查询消耗的总时间,包括规划、执行和 Profile 阶段的持续时间。
查询状态查询状态,可能的状态包括已完成、错误和正在运行。
查询 ID查询的唯一标识符。
开始时间查询开始的时间戳。
结束时间查询结束的时间戳。
总计查询的总持续时间。
查询类型查询的类型。
查询状态查询的当前状态。
StarRocks 版本使用的 StarRocks 版本。
用户执行查询的用户。
默认数据库查询使用的默认数据库。
Sql 语句执行的 SQL 语句。
变量查询使用的重要变量。
NonDefaultSessionVariables查询使用的非默认会话变量。
收集 Profile 时间收集 Profile 所花费的时间。
IsProfileAsync指示 Profile 收集是否为异步。

规划器指标

它提供了规划器的全面概述。通常,如果规划器花费的总时间少于 10 毫秒,则无需担心。

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

  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 端 profile 处理时间< 10ms 正常
QueryAllocatedMemoryUsage跨节点的总分配内存
QueryDeallocatedMemoryUsage跨节点的总释放内存
QueryPeakMemoryUsagePerNode每个节点的最大峰值内存< 容量的 80% 正常
QuerySumMemoryUsage跨节点的总峰值内存
QueryExecutionWallTime执行的实际时间
QueryCumulativeCpuTime跨节点的总 CPU 时间walltime * totalCpuCores 比较
QueryCumulativeOperatorTime算子的总执行时间算子时间百分比的分母
QueryCumulativeNetworkTimeExchange 节点的总网络时间
QueryCumulativeScanTimeScan 节点的总 IO 时间
QueryPeakScheduleTimePipeline 的最大 ScheduleTime对于简单查询,< 1 秒是正常的
QuerySpillBytes溢出到磁盘的数据< 1GB 正常

Fragment 指标

Fragment 级别的执行详细信息

指标描述
InstanceNumFragmentInstance 的数量
InstanceIds所有 FragmentInstance 的 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 的执行时间,包括每个算子的执行时间以及整体框架开销,例如在调用 has_output、need_input 等方法上花费的时间。
PendingTimePipeline 由于各种原因而被阻止调度的时间。
InputEmptyTimePipeline 由于输入队列为空而被阻止的时间。
FirstInputEmptyTimePipeline 首次由于输入队列为空而被阻止的时间。首次阻塞时间是单独计算的,因为首次阻塞主要是由 Pipeline 依赖关系引起的。
FollowupInputEmptyTimePipeline 随后由于输入队列为空而被阻止的时间。
OutputFullTimePipeline 由于输出队列已满而被阻止的时间。
PreconditionBlockTimePipeline 由于未满足依赖关系而被阻止的时间。
PendingFinishTimePipeline 被阻止等待异步任务完成的时间。
ScheduleTimePipeline 的调度时间,从进入就绪队列到被调度执行。
BlockByInputEmptyPipeline 由于 InputEmpty 而被阻止的次数。
BlockByOutputFullPipeline 由于 OutputFull 而被阻止的次数。
BlockByPreconditionPipeline 由于未满足前提条件而被阻止的次数。

算子指标

指标描述
PrepareTime准备阶段花费的时间。
OperatorTotalTime算子消耗的总时间。它满足以下等式:OperatorTotalTime = PullTotalTime + PushTotalTime + SetFinishingTime + SetFinishedTime + CloseTime。它不包括准备阶段花费的时间。
PullTotalTime算子执行 push_chunk 所花费的总时间。
PushTotalTime算子执行 pull_chunk 所花费的总时间。
SetFinishingTime算子执行 set_finishing 所花费的总时间。
SetFinishedTime算子执行 set_finished 所花费的总时间。
PushRowNum算子的累积输入行数。
PullRowNum算子的累积输出行数。
JoinRuntimeFilterEvaluateJoin 运行时过滤器被评估的次数。
JoinRuntimeFilterHashTime计算 Join 运行时过滤器的哈希值所花费的时间。
JoinRuntimeFilterInputRowsJoin 运行时过滤器的输入行数。
JoinRuntimeFilterOutputRowsJoin 运行时过滤器的输出行数。
JoinRuntimeFilterTime在 Join 运行时过滤器上花费的时间。

Scan 算子

OLAP Scan 算子

OLAP_SCAN 算子负责从 StarRocks 原生表读取数据。

指标描述
表名。
Rollup物化视图名称。如果没有命中物化视图,则等同于表名。
SharedScan是否启用了 enable_shared_scan 会话变量。
TabletCountTablet 的数量。
MorselsCountMorsel 的数量,这是基本的 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 任务的执行时间。
IOTaskWaitTime从成功提交到计划执行 IO 任务的等待时间。
SubmitTaskCount提交 IO 任务的次数。
SubmitTaskTime提交任务所花费的时间。
PeakIOTasksIO 任务的峰值数量。
PeakScanTaskQueueSizeIO 任务队列的峰值大小。

Connector Scan 算子

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

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

Exchange 算子

Exchange 算子负责在 BE 节点之间传输数据。可以有几种类型的 exchange 操作:GATHER/BROADCAST/SHUFFLE。

可能使 Exchange 算子成为查询瓶颈的典型场景

  1. Broadcast Join:这是一种适用于小表的方法。但是,在优化器选择次优查询计划的特殊情况下,它可能会导致网络带宽的显着增加。
  2. Shuffle Aggregation/Join:Shuffle 一个大表可能会导致网络带宽的显着增加。

Exchange Sink 算子

指标描述
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如果目标节点是当前节点,则数据将不会通过网络传输,这称为直通数据。此指标表示此类直通数据的大小。直通由 enable_exchange_pass_through 控制。
PassThroughBufferPeakMemoryUsagePassThrough Buffer 的峰值内存使用量。
CompressTime压缩时间。
CompressedBytes压缩数据的大小。
OverallThroughput吞吐率。
NetworkTime数据包传输所花费的时间(不包括接收后处理时间)。
NetworkBandwidth估计的网络带宽。
WaitTime由于发送方队列已满而导致的等待时间。
OverallTime整个传输过程的总时间,即从发送第一个数据包到确认正确接收最后一个数据包。
RpcAvgTimeRPC 的平均时间。
RpcCountRPC 的总数。

Exchange Source 算子

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

Aggregate 算子

指标列表

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

Join 算子

指标列表

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

Window Function 算子

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

Sort 算子

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

Merge 算子

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

TableFunction 算子

指标描述
TableFunctionExecTimeTable Function 的计算时间。
TableFunctionExecCountTable Function 的执行次数。

Project 算子

Project 算子负责执行 SELECT <expr>。如果查询中存在一些开销很大的表达式,则此算子可能会花费大量时间。

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

LocalExchange 算子

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

OlapTableSink 算子

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

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