
StarRocks EXPLAIN ANALYZE 实战指南无副作用模拟执行并获取算子级 Query Profile【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocksEXPLAIN ANALYZE 是 StarRocks自 v3.1 起提供的一条诊断型 SQL 语句它真实执行一次指定语句并在会话内自动开启 Query Profile随后以树形文本形式返回每个执行算子的耗时、内存、输出行数等统计信息帮助开发者快速定位查询瓶颈。读完本文你将掌握 EXPLAIN ANALYZE 的语法、权限约束、SELECT / INSERT INTO 两种模拟场景的完整用法、输出结构的解读方法以及它与 SHOW PROFILELIST、ANALYZE PROFILE 的组合调优工作流。功能定位一条命令把执行与剖析合并传统调优路径中拿到一个慢查询的 Profile 通常需要三步开启enable_profile、执行查询、再从历史记录中取 Profile。EXPLAIN ANALYZE 将这三步合并为一条语句它实际执行你给出的 SQL同时捕获执行期每个算子的统计信息并立即把 Profile 以文本形式输出到终端。与 EXPLAIN 相比EXPLAIN 只输出逻辑执行计划不执行而 EXPLAIN ANALYZE 输出的是真实的运行 Profile含各算子实际耗时、内存、行数等运行时指标两者互补。更详细的 Query Profile 概念可参考 Query Profile Overview。基本语法EXPLAIN ANALYZE statement参数说明参数说明statement需要获取 Query Profile 的 SQL 语句。当前支持 SELECT 与 INSERT INTO 两种语句。使用前提与限制版本要求该功能自 StarRocks v3.1 起支持。权限要求只有对目标表拥有SELECT 或 INSERT 权限的用户才能执行该操作INSERT 场景还需 INSERT 权限见下文安全说明。自动开启 Profile执行 EXPLAIN ANALYZE 时StarRocks 会默认在当前会话启用 Query Profile等价于SET enable_profile true无需手工开启。INSERT 场景限制EXPLAIN ANALYZE INSERT INTO仅支持默认 catalog 下的内部表外部 catalog 的表不支持模拟。终端显示建议输出文本包含 ANSI 颜色与高亮控制字符官方建议使用支持 ANSI 的客户端如 MyCLIMySQL 客户端等不支持 ANSI 的终端可能出现轻微排版错位通常不影响阅读。安全设计INSERT 分析不会真的写入数据对 INSERT INTO 语句执行 EXPLAIN ANALYZE 时StarRocks不会真正写入任何数据。模拟执行完毕后默认情况下该导入事务会被中止abort从而保证 Profile 分析过程中不会对数据产生任何非预期变更。该行为在源码层面也有明确印证在 ExplainAnalyzer.java 中输出会附带一条明确警告——The transaction of the statement will be aborted, and no data will be actually inserted!!!提醒使用者当前仅为模拟分析。因此你可以在生产数据表上放心地试跑大导入语句来评估写入路径的性能而无需担心污染数据。输出结构解读Summary Fragment 树EXPLAIN ANALYZE 的文本输出由两部分构成这与 ANALYZE PROFILE 的呈现结构一致Summary摘要区QueryID本次查询的唯一 ID可用于后续 ANALYZE PROFILE 深度分析。版本信息执行查询的 StarRocks 版本。查询状态Finished/Error/Running。总耗时及主要阶段耗时占比如扫描、网络、写入等。Top Most Time-consuming Nodes耗时最高的前 10 个节点。Top Most Memory-consuming Nodes内存占用最高的前 10 个节点。NonDefaultVariables与默认值不同的会话变量清单便于复现执行环境。Fragments算子树每个 Fragment 以树形结构列出其中的执行算子每个算子展示TotalTime / CPUTime算子总耗时与 CPU 耗时。Memory内存占用峰值。OutputRows / 输入行数实际处理的数据行数。耗时占比高亮耗时占比超过 30% 的节点以红色标出介于 15%30% 的节点以粉色标出帮助一眼锁定热点算子。树形符号├──、└──与算子的plan_node_id解析逻辑可在 ExplainAnalyzer.java 的GraphElement枚举中看到文本渲染完全由 FE 端 ExplainAnalyzer 生成无需额外工具。示例 1模拟并分析 SELECT 语句EXPLAIN ANALYZE SELECT c_nation, s_nation, year(lo_orderdate) AS year, SUM(lo_revenue) AS revenue FROM lineorder_flat WHERE ...;执行后StarRocks 真实运行该查询查询结果被丢弃并返回其 Query Profile。从输出中可以看到类似如下的结构Summary 区给出总耗时如 10.854ms及 OLAP_SCAN 占据 64.25% 耗时、74.43% 内存等热点信息Fragment 树中OLAP_SCAN、AGGREGATION、EXCHANGE等算子各自的耗时、内存与输出行数一目了然。示例 2模拟并分析 INSERT INTO 语句EXPLAIN ANALYZE INSERT INTO lineorder_flat SELECT * FROM lineorder;输出结构与 SELECT 类似但核心算子是写入路径上的OLAP_TABLE_SINK可观察到其 TotalTime、内存占用等写入指标同时 Summary 区会出现红色警告明确提示事务将被中止无数据实际插入。由于导入事务被中止该语句不会对目标表产生任何数据变更可放心用于评估导入链路性能。若你的 INSERT 语句较长可先通过 EXPLAIN ANALYZE 验证写入算子的耗时分布再结合真实导入如 Broker Load与 OlapTableSink Operator 指标 进行对比调优。组合调优工作流EXPLAIN ANALYZE SHOW PROFILELIST ANALYZE PROFILEEXPLAIN ANALYZE 擅长边跑边看但对于历史查询或正在运行的长查询则需要借助配套语句SHOW PROFILELIST列出集群中缓存的 Query Profile 记录含QueryId、StartTime、Time、State、Statement可配合LIMIT n取最近 n 条无需额外权限SHOW PROFILELIST LIMIT 5;ANALYZE PROFILE针对指定 Query ID 按 Fragment 输出树形 Profile并可指定plan_node_id查看某算子的全部明细指标该操作需要 SELECT 权限ANALYZE PROFILE FROM query_id, [plan_node_id[, ...] ];三者配合的典型流程是先用 EXPLAIN ANALYZE 快速模拟验证一条 SQL 的整体瓶颈再用 SHOW PROFILELIST 定位生产环境中某条慢查询的 Query ID最后用 ANALYZE PROFILE 深入单个算子的详细指标。Runtime Query Profile运行中查询的实时 Profile同样支持以上三种方式获取与分析。相关调优变量速查在深入使用 EXPLAIN ANALYZE 之前了解几个与 Query Profile 相关的会话变量有助于更精准地控制分析范围配置项类型取值默认值说明enable_profileSession Vartrue/falsefalse是否启用 Query ProfileEXPLAIN ANALYZE 会自动开启pipeline_profile_levelSession Var1/211 合并指标2 保留原始结构可视化工具不可用runtime_profile_report_intervalSession Var正整数10运行时 Profile 上报间隔秒big_query_profile_thresholdSession Var字符串0s仅对超过该时长的查询启用 Profile如 30s、500ms、60m生产环境中不建议长期全局开启enable_profile可改用big_query_profile_threshold只捕获慢查询而 EXPLAIN ANALYZE 则是按需分析时的首选——它只在当前会话生效用完即止几乎不产生额外开销。总结语法极简EXPLAIN ANALYZE statement即可获得一次真实执行 完整算子级 Profile。安全无副作用INSERT INTO 场景下事务默认中止不会污染数据。输出即答案Summary 热点榜 Fragment 树形算子的耗时/内存/行数配合红/粉高亮瓶颈一目了然。生态完整与 SHOW PROFILELIST、ANALYZE PROFILE 共同构成从边跑边看到事后深挖的完整调优链路详见 文本型 Query Profile 分析指南。【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考