跳到主要内容

Pipeline Tracing

介绍

在 Apache Doris 的 Pipeline 执行引擎中,每个 Instance 的执行计划树会被拆分为多个 Pipeline Task,并由自定义的 Pipeline 调度器进行调度执行。当 Pipeline Task 数量较多时,这些 Task 如何在线程与 CPU 核间调度,是影响执行性能的重要因素。

Pipeline Tracing 工具用于观察特定查询或时间段内的调度过程,便于性能分析与瓶颈定位。

使用步骤

1. 记录调度数据

通过 HTTP 接口控制 BE 是否以及如何记录调度过程,相关设置仅作用于目标 BE。

操作目的HTTP 命令
关闭 Pipeline Tracing 记录curl -X POST http://{be_host}:{http_port}/api/pipeline/tracing?type=disable
为每个 Query 产生一条记录curl -X POST http://{be_host}:{http_port}/api/pipeline/tracing?type=perquery
生成固定时间段内的 Tracing 记录curl -X POST http://{be_host}:{http_port}/api/pipeline/tracing?type=periodic
设置周期时长(单位:秒)curl -X POST http://{be_host}:{http_port}/api/pipeline/tracing?dump_interval=60

命令示例:

# 关闭 Pipeline Tracing 记录
curl -X POST http://{be_host}:{http_port}/api/pipeline/tracing?type=disable

# 为每个 Query 产生一条记录
curl -X POST http://{be_host}:{http_port}/api/pipeline/tracing?type=perquery

# 生成固定时间段内的 Tracing 记录
curl -X POST http://{be_host}:{http_port}/api/pipeline/tracing?type=periodic

# 设置 60 秒的周期时长
curl -X POST http://{be_host}:{http_port}/api/pipeline/tracing?dump_interval=60

2. 转换数据格式

记录的数据会写入对应 BE 的 log/tracing 目录。使用 doris/tools/pipeline-tracing/ 中的转换脚本,将原始数据转换为 Perfetto 可加载的 JSON 格式:

cd doris/tools/pipeline-tracing/
python3 origin-to-show.py -s <SOURCE_FILE> -d <DEST>.json

参数说明:

参数含义
-s <SOURCE_FILE>BE 生成的原始 Tracing 文件路径
-d <DEST>.json输出的可视化 JSON 文件路径

更详细的使用方法可参考该目录下的 README.md 文件。

3. 在 Perfetto 中可视化

  1. 打开 Perfetto

  2. 点击 Open trace file,选择上一步生成的 JSON 文件。

  3. 即可查看调度结果:

    Perfetto 支持查看同一个 Task 在各 CPU 核间的调度情况:

FAQ

Q:Tracing 文件在哪里?

在对应 BE 的 log/tracing 目录下,文件名包含时间戳与 Query 信息。

Q:开启 Pipeline Tracing 是否会影响性能?

会有一定开销。建议仅在调度排查阶段开启,排查完毕后使用 type=disable 关闭。