Doris 提供了完善的 Profile 机制

本文介绍了Doris如何提供完善的Profile机制用于慢查询和慢导入的优化,包括详细的Profile信息以及如何利用这些信息进行性能瓶颈定位。同时,分享了在不同场景下如pda、pdi、a表的建表规范,包括动态分区、数据去重模型的选择,并提到了Doris建表工具的使用以及未来与Hive元数据同步的改进。

对于慢查询和慢导入,Doris 提供了完善的 Profile 机制,在了解相关技术细节后,我们在线上集群开启了 Profile 收集,通过调度任务定时收集慢查询、慢导入的 Profile 信息并落库。

Doris 提供的 Profile 信息非常详细,例如 OLAP_SCAN_NODE 提供了原始的扫描行数,各个索引的过滤行数,每个 Instance 的 EXCHANGE_NODE 提供了接收的数据总行数和接收的数据量大小。这些信息为查询调优提供了详细的依据,我们在使用过程中针对快速定位查询性能的瓶颈进行了优化,取得了良好的效果。

建表规范

在我们的使用场景中,有下列类型的表:

  • pda 表:每日全量更新,即每日分区存储全量快照数据

  • pdi 表: 每日增量更新,即每日分区存储增量数据

  • a 表:全量不分区表

  • s 表:静态非每日更新数据

由于当前 Doris 集群中所有的表都是基于 Hive 数仓中各层级的表同步而来,因此目前仅使用了 Duplcate 模型和 Unique 模型,对于 pda、pdi 和 a 表,为了降低 Doris 表的分区数,减轻 FE 元数据管理压力,我们在建 Doris 表时均启用了根据日期划分的动态分区特性,较久远的历史数据我们按年、月的维度分区归档,近期的数据按日、小时分区,未来我们计划通过程序自动识别完成历史分区的归档合并。

对于 pda 表使用场景,pda 表需要每日同步全量数据,我们采用了 Duplicate 模型,不考虑使用 Unique 模型数据去重的原因是 Doris 的导入模型本身就提供了基于任务 Label 的数据一致性保证,同步时一次调度周期的 pda 表的一个分区的导入任务能产生唯一且不变的 Label,因此我们可以保证即使错误执行了多次,该分区的数据仍然不会重复。另外,因为 Duplic

<think> 我们正在讨论Doris查询Profile的分析方法。根据引用内容,DorisProfile机制用于分析慢查询和慢导入。我们可以从以下几个方面进行: 1. 如何获取Profile信息(引用[2]提供了具体步骤) 2. 如何分析Profile(引用[4]提到了表引擎对性能的影响,引用[3]提到执行计划分析等) 3. 优化建议(引用[3]提到优化指南) 回答结构: 1. 获取Profile:按照引用[2]的步骤,设置并收集Profile。 2. 分析Profile:重点查看各个执行节点的耗时,以及资源消耗情况。 3. 常见瓶颈及优化:根据引用[3]和[4]的内容,提供一些常见瓶颈和优化方向。 同时,需要生成相关问题。 </think> ### Doris查询Profile分析方法 DorisProfile机制是诊断慢查询的核心工具,通过以下步骤进行深度分析: #### 一、获取Profile文件 1. **开启Profile收集** ```sql SET GLOBAL enable_profile = true; -- 全局开启 SET enable_profile = true; -- 当前会话开启 ``` 2. **定位Profile ID** ```sql SHOW QUERY PROFILE "/"; -- 返回近期查询的Profile ID[^2] ``` 3. **下载Profile数据** ```bash curl -u root:password -X GET http://<FE_IP>:8030/api/profile?query_id=<Profile_ID> > profile.json ``` #### 二、关键分析维度 1. **执行计划结构** - 查看`EXPLAIN`生成的Operator树,确认是否存在冗余扫描(如全表扫描`OlapScanNode`)或低效Join(如`HashJoinNode`资源超限)[^3][^4]。 - 示例瓶颈: ``` │ └─OlapScanNode // 全表扫描耗时占比80% │ tablet=2000, avg_rowset_num=50 ``` 2. **资源消耗热点** - **时间分布**:关注`ActiveTime`和`WaitTime`差异,高`WaitTime`可能因资源争抢(如IO阻塞)。 - **内存与CPU**: - `PeakMemoryUsage`突增 → 检查聚合计算(如`AggregationNode`的GROUP BY)[^4] - `CpuTime`集中 → 优化复杂表达式或UDF 3. **数据倾斜检测** - 对比`Instance`(执行实例)的`RowsReturned`差异,例如: ``` Instance#1: RowsReturned=10,000 // 正常 Instance#2: RowsReturned=1,500,000 // 数据倾斜 ``` #### 三、优化实践 1. **索引与分桶优化** - 对高扫描耗时的`OlapScanNode`,增加BloomFilter索引或调整分桶数(`DISTRIBUTED BY HASH`)[^4]。 2. **聚合下推** - 若`AggregationNode`耗时高,将聚合操作下推至存储层(如物化视图预聚合)。 3. **联邦查询加速** - 外部表查询(如Hive)通过`RuntimeFilter`减少数据传输量[^3]。 > **典型优化案例**: > 某查询因`MergeOnRead`表引擎的Compaction延迟导致性能下降,改为`DuplicateKey`引擎后延迟降低60%[^4]。 #### 四、工具链支持 - **可视化分析**:将Profile.json导入Doris PerfLab工具生成火焰图,直观定位耗时函数。 - **历史对比**:通过`SHOW QUERY PROFILE LIST`对比历史Profile趋势,识别性能退化。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值