Перейти к основному содержимому
Версия: 2.0.x

Метрики Query Profile

Авторитетный справочник по необработанным метрикам, выдаваемым Selena Query Profile, сгруппированным по операторам. Используйте его как глоссарий; для руководства по устранению неполадок переходите к query_profile_tuning_recipes.md.

Сводные метрики

Базовая информация о выполнении запроса:

МетрикаОписание
TotalОбщее время, затраченное на запрос, включая продолжительность фаз Planning, Executing и Profiling.
Query StateСостояние запроса, возможные состояния включают Finished, Error и Running.
Query IDУникальный идентификатор запроса.
Start TimeВременная метка начала запроса.
End TimeВременная метка окончания запроса.
TotalОбщая продолжительность запроса.
Query TypeТип запроса.
Query StateТекущее состояние запроса.
Selena VersionИспользуемая версия Selena.
UserПользователь, выполнивший запрос.
Default DbБаза данных по умолчанию, используемая для запроса.
Sql StatementВыполненная SQL-инструкция.
VariablesВажные переменные, используемые для запроса.
NonDefaultSessionVariablesНе по умолчанию сессионные переменные, используемые для запроса.
Collect Profile TimeВремя, затраченное на сбор profile.
IsProfileAsyncУказывает, был ли сбор profile асинхронным.

Метрики Planner

Предоставляет комплексный обзор planner. Обычно, если общее время, затраченное на planner, меньше 10 мс, это не вызывает беспокойства.

В некоторых сценариях planner может требовать больше времени:

  1. Сложные запросы могут требовать дополнительного времени для парсинга и оптимизации для обеспечения оптимального плана выполнения.
  2. Наличие многочисленных materialized views может увеличить время, необходимое для переписывания запроса.
  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:

Метрики обзора выполнения

Высокоуровневая статистика выполнения:

МетрикаОписаниеЭмпирическое правило
FrontendProfileMergeTimeВремя обработки profile на стороне FE< 10 мс нормально
QueryAllocatedMemoryUsageОбщая выделенная память по узлам
QueryDeallocatedMemoryUsageОбщая освобожденная память по узлам
QueryPeakMemoryUsagePerNodeМаксимальная пиковая память на узел< 80% емкости нормально
QuerySumMemoryUsageОбщая пиковая память по узлам
QueryExecutionWallTimeАстрономическое время выполнения
QueryCumulativeCpuTimeОбщее время CPU по узламСравните с walltime * totalCpuCores
QueryCumulativeOperatorTimeОбщее время выполнения операторовЗнаменатель для процентов времени операторов
QueryCumulativeNetworkTimeОбщее сетевое время Exchange node
QueryCumulativeScanTimeОбщее время IO Scan node
QueryPeakScheduleTimeМаксимальное ScheduleTime Pipeline< 1 с нормально для простых запросов
QuerySpillBytesДанные, выгруженные на диск< 1 ГБ нормально

Метрики Fragment

Детали выполнения на уровне Fragment:

МетрикаОписание
InstanceNumКоличество FragmentInstances
InstanceIdsID всех FragmentInstances
BackendNumКоличество участвующих BE
BackendAddressesАдреса BE
FragmentInstancePrepareTimeПродолжительность фазы Prepare Fragment
InstanceAllocatedMemoryUsageОбщая выделенная память для instances
InstanceDeallocatedMemoryUsageОбщая освобожденная память для instances
InstancePeakMemoryUsageПиковая память по instances

Метрики Pipeline

Детали выполнения Pipeline и взаимосвязи:

profile_pipeline_time_relationship

Ключевые взаимосвязи:

  • DriverTotalTime = ActiveTime + PendingTime + ScheduleTime
  • ActiveTime = ∑ OperatorTotalTime + OverheadTime
  • PendingTime = InputEmptyTime + OutputFullTime + PreconditionBlockTime + PendingFinishTime
  • InputEmptyTime = FirstInputEmptyTime + FollowupInputEmptyTime
МетрикаОписание
DegreeOfParallelismСтепень параллелизма выполнения pipeline.
TotalDegreeOfParallelismСумма степеней параллелизма. Поскольку один и тот же Pipeline может выполняться на нескольких машинах, этот элемент агрегирует все значения.
DriverPrepareTimeВремя, затраченное на фазу Prepare. Эта метрика не включена в DriverTotalTime.
DriverTotalTimeОбщее время выполнения Pipeline, исключая время, проведенное в фазе Prepare.
ActiveTimeВремя выполнения Pipeline, включая время выполнения каждого оператора и общие накладные расходы фреймворка, такие как время, потраченное на вызов методов типа has_output, need_input и т.д.
PendingTimeВремя, когда Pipeline заблокирован от планирования по различным причинам.
InputEmptyTimeВремя, когда Pipeline заблокирован из-за пустой входной очереди.
FirstInputEmptyTimeВремя, когда Pipeline впервые заблокирован из-за пустой входной очереди. Первое время блокировки рассчитывается отдельно, потому что первая блокировка в основном вызвана зависимостями Pipeline.
FollowupInputEmptyTimeВремя, когда Pipeline впоследствии заблокирован из-за пустой входной очереди.
OutputFullTimeВремя, когда Pipeline заблокирован из-за полной выходной очереди.
PreconditionBlockTimeВремя, когда Pipeline заблокирован из-за невыполненных зависимостей.
PendingFinishTimeВремя, когда Pipeline заблокирован в ожидании завершения асинхронных задач.
ScheduleTimeВремя планирования Pipeline, от входа в очередь готовности до планирования на выполнение.
BlockByInputEmptyКоличество раз, когда pipeline заблокирован из-за InputEmpty.
BlockByOutputFullКоличество раз, когда pipeline заблокирован из-за OutputFull.
BlockByPreconditionКоличество раз, когда pipeline заблокирован из-за невыполненных предусловий.

Метрики Operator

МетрикаОписание
PrepareTimeВремя, затраченное на подготовку.
OperatorTotalTimeОбщее время, затраченное Operator. Оно удовлетворяет уравнению: OperatorTotalTime = PullTotalTime + PushTotalTime + SetFinishingTime + SetFinishedTime + CloseTime. Исключает время, потраченное на подготовку.
PullTotalTimeОбщее время, которое Operator тратит на выполнение push_chunk.
PushTotalTimeОбщее время, которое Operator тратит на выполнение pull_chunk.
SetFinishingTimeОбщее время, которое Operator тратит на выполнение set_finishing.
SetFinishedTimeОбщее время, которое Operator тратит на выполнение set_finished.
PushRowNumКумулятивное количество входных строк для Operator.
PullRowNumКумулятивное количество выходных строк для Operator.
JoinRuntimeFilterEvaluateКоличество раз оценки Join Runtime Filter.
JoinRuntimeFilterHashTimeВремя, затраченное на вычисление hash для Join Runtime Filter.
JoinRuntimeFilterInputRowsКоличество входных строк для Join Runtime Filter.
JoinRuntimeFilterOutputRowsКоличество выходных строк для Join Runtime Filter.
JoinRuntimeFilterTimeВремя, затраченное на Join Runtime Filter.

Scan Operator

OLAP Scan Operator

OLAP_SCAN Operator отвечает за чтение данных из нативных таблиц Selena.

МетрикаОписание
TableИмя таблицы.
RollupИмя materialized view. Если materialized view не задействован, эквивалентно имени таблицы.
SharedScanВключена ли сессионная переменная enable_shared_scan.
TabletCountКоличество tablets.
MorselsCountКоличество morsels, которые являются базовой единицей выполнения IO.
PushdownPredicatesКоличество pushdown predicates.
PredicatesВыражения предикатов.
BytesReadРазмер прочитанных данных.
CompressedBytesReadРазмер сжатых данных, прочитанных с диска.
UncompressedBytesReadРазмер несжатых данных, прочитанных с диска.
RowsReadКоличество прочитанных строк (после фильтрации предикатов).
RawRowsReadКоличество необработанных прочитанных строк (до фильтрации предикатов).
ReadPagesNumКоличество прочитанных страниц.
CachedPagesNumКоличество кэшированных страниц.
ChunkBufferCapacityЕмкость Chunk Buffer.
DefaultChunkBufferCapacityЕмкость Chunk Buffer по умолчанию.
PeakChunkBufferMemoryUsageПиковое использование памяти Chunk Buffer.
PeakChunkBufferSizeПиковый размер Chunk Buffer.
PrepareChunkSourceTimeВремя, затраченное на подготовку Chunk Source.
ScanTimeКумулятивное время сканирования. Операции сканирования выполняются в асинхронном пуле потоков I/O.
IOTaskExecTimeВремя выполнения IO задач.
IOTaskWaitTimeВремя ожидания от успешной отправки до запланированного выполнения IO задач.
SubmitTaskCountКоличество раз отправки IO задач.
SubmitTaskTimeВремя, затраченное на отправку задач.
PeakIOTasksПиковое количество IO задач.
PeakScanTaskQueueSizeПиковый размер очереди IO задач.

Connector Scan Operator

Похож на OLAP_SCAN operator, но используется для сканирования внешних таблиц, таких как Iceberg/Hive/Hudi/Delta.

МетрикаОписание
DataSourceTypeТип источника данных, может быть HiveDataSource, ESDataSource и так далее.
TableИмя таблицы.
TabletCountКоличество tablets.
MorselsCountКоличество morsels.
PredicatesВыражение предиката.
PredicatesPartitionВыражение предиката, применяемое к partitions.
SharedScanВключена ли сессионная переменная enable_shared_scan.
ChunkBufferCapacityЕмкость Chunk Buffer.
DefaultChunkBufferCapacityЕмкость Chunk Buffer по умолчанию.
PeakChunkBufferMemoryUsageПиковое использование памяти Chunk Buffer.
PeakChunkBufferSizeПиковый размер Chunk Buffer.
PrepareChunkSourceTimeВремя, затраченное на подготовку Chunk Source.
ScanTimeКумулятивное время сканирования. Операция сканирования выполняется в асинхронном пуле потоков I/O.
IOTaskExecTimeВремя выполнения I/O задач.
IOTaskWaitTimeВремя ожидания от успешной отправки до запланированного выполнения IO задач.
SubmitTaskCountКоличество раз отправки IO задач.
SubmitTaskTimeВремя, затраченное на отправку задач.
PeakIOTasksПиковое количество IO задач.
PeakScanTaskQueueSizeПиковый размер очереди IO задач.

Exchange Operator

Exchange Operator отвечает за передачу данных между BE узлами. Может быть несколько типов операций exchange: GATHER/BROADCAST/SHUFFLE.

Типичные сценарии, которые могут сделать Exchange Operator узким местом запроса:

  1. Broadcast Join: Это подходящий метод для небольшой таблицы. Однако в исключительных случаях, когда оптимизатор выбирает неоптимальный план запроса, это может привести к значительному увеличению сетевой пропускной способности.
  2. Shuffle Aggregation/Join: Перемешивание большой таблицы может привести к значительному увеличению сетевой пропускной способности.

Exchange Sink Operator

МетрикаОписание
ChannelNumКоличество каналов. Обычно количество каналов равно количеству получателей.
DestFragmentsСписок ID целевых FragmentInstance.
DestIDID целевого узла.
PartTypeРежим распределения данных, включая: UNPARTITIONED, RANDOM, HASH_PARTITIONED и BUCKET_SHUFFLE_HASH_PARTITIONED.
SerializeChunkTimeВремя, затраченное на сериализацию chunks.
SerializedBytesРазмер сериализованных данных.
ShuffleChunkAppendCounterКоличество операций Chunk Append, когда PartType является HASH_PARTITIONED или BUCKET_SHUFFLE_HASH_PARTITIONED.
ShuffleChunkAppendTimeВремя, затраченное на операции Chunk Append, когда PartType является HASH_PARTITIONED или BUCKET_SHUFFLE_HASH_PARTITIONED.
ShuffleHashTimeВремя, затраченное на вычисление hash, когда PartType является HASH_PARTITIONED или BUCKET_SHUFFLE_HASH_PARTITIONED.
RequestSentКоличество отправленных пакетов данных.
RequestUnsentКоличество неотправленных пакетов данных. Эта метрика ненулевая, когда есть логика короткого замыкания; в противном случае она равна нулю.
BytesSentРазмер отправленных данных.
BytesUnsentРазмер неотправленных данных. Эта метрика ненулевая, когда есть логика короткого замыкания; в противном случае она равна нулю.
BytesPassThroughЕсли целевой узел является текущим узлом, данные не будут передаваться по сети, что называется passthrough данными. Эта метрика указывает размер таких passthrough данных. Passthrough управляется enable_exchange_pass_through.
PassThroughBufferPeakMemoryUsageПиковое использование памяти PassThrough Buffer.
CompressTimeВремя сжатия.
CompressedBytesРазмер сжатых данных.
OverallThroughputСкорость пропускной способности.
NetworkTimeВремя, затраченное на передачу пакетов данных (исключая время обработки после получения).
NetworkBandwidthРасчетная пропускная способность сети.
WaitTimeВремя ожидания из-за полной очереди отправителя.
OverallTimeОбщее время для всего процесса передачи, т.е. от отправки первого пакета данных до подтверждения правильного получения последнего пакета данных.
RpcAvgTimeСреднее время для RPC.
RpcCountОбщее количество RPC.

Exchange Source Operator

МетрикаОписание
RequestReceivedРазмер полученных пакетов данных.
BytesReceivedРазмер полученных данных.
DecompressChunkTimeВремя, затраченное на распаковку chunks.
DeserializeChunkTimeВремя, затраченное на десериализацию chunks.
ClosureBlockCountКоличество заблокированных Closures.
ClosureBlockTimeВремя блокировки для Closures.
ReceiverProcessTotalTimeОбщее время, затраченное на обработку на стороне получателя.
WaitLockTimeВремя ожидания блокировки.

Aggregate Operator

Список метрик

МетрикаОписание
GroupingKeysСтолбцы GROUP BY.
AggregateFunctionsВремя, затраченное на вычисления агрегатных функций.
AggComputeTimeВремя для AggregateFunctions + Group By.
ChunkBufferPeakMemПиковое использование памяти Chunk Buffer.
ChunkBufferPeakSizeПиковый размер Chunk Buffer.
ExprComputeTimeВремя для вычисления выражений.
ExprReleaseTimeВремя для освобождения выражений.
GetResultsTimeВремя для извлечения агрегатных результатов.
HashTableSizeРазмер Hash Table.
HashTableMemoryUsageРазмер памяти Hash Table.
InputRowCountКоличество входных строк.
PassThroughRowCountВ режиме Auto количество строк данных, обработанных в потоковом режиме после низкой агрегации, приводит к деградации до потокового режима.
ResultAggAppendTimeВремя, затраченное на добавление столбцов агрегатных результатов.
ResultGroupByAppendTimeВремя, затраченное на добавление столбцов Group By.
ResultIteratorTimeВремя для итерации по Hash Table.
StreamingTimeВремя обработки в потоковом режиме.

Join Operator

Список метрик

МетрикаОписание
DistributionModeТип распределения, включая: BROADCAST, PARTITIONED, COLOCATE и т.д.
JoinPredicatesПредикаты Join.
JoinTypeТип Join.
BuildBucketsКоличество buckets в Hash Table.
BuildKeysPerBucketКоличество ключей на bucket в Hash Table.
BuildConjunctEvaluateTimeВремя, затраченное на оценку conjunct во время фазы build.
BuildHashTableTimeВремя, затраченное на построение Hash Table.
ProbeConjunctEvaluateTimeВремя, затраченное на оценку conjunct во время фазы probe.
SearchHashTableTimerВремя, затраченное на поиск в Hash Table.
CopyRightTableChunkTimeВремя, затраченное на копирование chunks из правой таблицы.
OutputBuildColumnTimeВремя, затраченное на вывод столбца стороны build.
OutputProbeColumnTimeВремя, затраченное на вывод столбца стороны probe.
HashTableMemoryUsageИспользование памяти Hash Table.
RuntimeFilterBuildTimeВремя, затраченное на построение runtime filters.
RuntimeFilterNumКоличество runtime filters.

Window Function Operator

МетрикаОписание
ProcessModeРежим выполнения, включающий две части: первая часть включает Materializing и Streaming; вторая часть включает Cumulative, RemovableCumulative, ByDefinition.
ComputeTimeВремя, затраченное на вычисления оконных функций.
PartitionKeysСтолбцы Partition.
AggregateFunctionsАгрегатные функции.
ColumnResizeTimeВремя, затраченное на изменение размера столбцов.
PartitionSearchTimeВремя, затраченное на поиск границ partition.
PeerGroupSearchTimeВремя, затраченное на поиск границ Peer Group. Имеет смысл только когда тип окна RANGE.
PeakBufferedRowsПиковое количество строк в буфере.
RemoveUnusedRowsCountКоличество раз удаления неиспользуемых буферов.
RemoveUnusedTotalRowsОбщее количество строк, удаленных из неиспользуемых буферов.

Sort Operator

МетрикаОписание
SortKeysКлючи сортировки.
SortTypeМетод сортировки результатов запроса: полная сортировка или сортировка топ N результатов.
MaxBufferedBytesПиковый размер буферизованных данных.
MaxBufferedRowsПиковое количество буферизованных строк.
NumSortedRunsКоличество отсортированных прогонов.
BuildingTimeВремя, затраченное на поддержание внутренних структур данных во время сортировки.
MergingTimeВремя, затраченное на слияние отсортированных прогонов во время сортировки.
SortingTimeВремя, затраченное на сортировку.
OutputTimeВремя, затраченное на построение выходной отсортированной последовательности.

Merge Operator

МетрикаОписаниеУровень
LimitLimit.Первичный
OffsetOffset.Первичный
StreamingBatchSizeРазмер данных, обрабатываемых за одну операцию Merge, когда Merge выполняется в режиме StreamingПервичный
LateMaterializationMaxBufferChunkNumМаксимальное количество chunks в буфере при включенной поздней материализации.Первичный
OverallStageCountОбщее количество выполнений всех стадий.Первичный
OverallStageTimeОбщее время выполнения для каждой стадии.Первичный
1-InitStageCountКоличество выполнений стадии Init.Вторичный
2-PrepareStageCountКоличество выполнений стадии Prepare.Вторичный
3-ProcessStageCountКоличество выполнений стадии Process.Вторичный
4-SplitChunkStageCountКоличество выполнений стадии SplitChunk.Вторичный
5-FetchChunkStageCountКоличество выполнений стадии FetchChunk.Вторичный
6-PendingStageCountКоличество выполнений стадии Pending.Вторичный
7-FinishedStageCountКоличество выполнений стадии Finished.Вторичный
1-InitStageTimeВремя выполнения стадии Init.Вторичный
2-PrepareStageTimeВремя выполнения стадии Prepare.Вторичный
3-ProcessStageTimeВремя выполнения стадии Process.Вторичный
4-SplitChunkStageTimeВремя, затраченное на стадию Split.Вторичный
5-FetchChunkStageTimeВремя, затраченное на стадию Fetch.Вторичный
6-PendingStageTimeВремя, затраченное на стадию Pending.Вторичный
7-FinishedStageTimeВремя, затраченное на стадию Finished.Вторичный
LateMaterializationGenerateOrdinalTimeВремя, затраченное на генерацию ordinal столбцов во время поздней материализации.Третичный
SortedRunProviderTimeВремя, затраченное на получение данных от provider во время стадии Process.Третичный

TableFunction Operator

МетрикаОписание
TableFunctionExecTimeВремя вычисления Table Function.
TableFunctionExecCountКоличество выполнений Table Function.

Project Operator

Project Operator отвечает за выполнение SELECT <expr>. Если в запросе есть некоторые дорогостоящие выражения, этот оператор может занимать значительное время.

МетрикаОписание
ExprComputeTimeВремя вычисления выражений.
CommonSubExprComputeTimeВремя вычисления общих подвыражений.

LocalExchange Operator

МетрикаОписание
TypeТип Local Exchange, включая: Passthrough, Partition и Broadcast.
ShuffleNumКоличество shuffles. Эта метрика действительна только когда Type является Partition.
LocalExchangePeakMemoryUsageПиковое использование памяти.
LocalExchangePeakBufferSizeПиковый размер буфера.
LocalExchangePeakBufferMemoryUsageПиковое использование памяти буфера.
LocalExchangePeakBufferChunkNumПиковое количество chunks в буфере.
LocalExchangePeakBufferRowNumПиковое количество строк в буфере.
LocalExchangePeakBufferBytesПиковый размер данных в буфере.
LocalExchangePeakBufferChunkSizeПиковый размер chunks в буфере.
LocalExchangePeakBufferChunkRowNumПиковое количество строк на chunk в буфере.
LocalExchangePeakBufferChunkBytesПиковый размер данных на chunk в буфере.

OlapTableSink Operator

OlapTableSink Operator отвечает за выполнение операции INSERT INTO <table>.

подсказка
  • Чрезмерная разница между значениями Max и Min метрики PushChunkNum у OlapTableSink указывает на перекос данных в upstream операторах, что может привести к узкому месту в производительности загрузки.
  • RpcClientSideTime равен RpcServerSideTime плюс время сетевой передачи плюс время обработки фреймворком RPC. Если есть значительная разница между RpcClientSideTime и RpcServerSideTime, рассмотрите возможность включения сжатия для сокращения времени передачи.
МетрикаОписание
IndexNumКоличество синхронных materialized views, созданных для целевой таблицы.
ReplicatedStorageВключена ли Single Leader Replication.
TxnIDID транзакции загрузки.
RowsReadКоличество строк, прочитанных из upstream операторов.
RowsFilteredКоличество строк, отфильтрованных из-за недостаточного качества данных.
RowsReturnedКоличество строк, записанных в целевую таблицу.
RpcClientSideTimeОбщее время потребления RPC для загрузки, записанное на стороне клиента.
RpcServerSideTimeОбщее время потребления RPC для загрузки, записанное на стороне сервера.
PrepareDataTimeОбщее время потребления для фазы подготовки данных, включая преобразование формата данных и проверку качества данных.
SendDataTimeЛокальное время потребления для отправки данных, включая время для сериализации и сжатия данных, а также для отправки задач в очередь отправителя.