Doris base compaction 一直很高导致be节点的io使用率也很高

IT疑难杂症诊疗室 10w+人浏览 393人参与

Doris Base Compaction 与 BE 节点 IO 使用率高,核心原因是 Compaction 任务本身需大量读写数据,当任务触发频繁、资源配置不合理或数据特征特殊时,IO 资源会被持续占用。

一、核心原因分析

1. Compaction 任务触发过于频繁

  • 数据写入量大/写入频繁:短时间内大量 Stream Load、Broker Load 等写入操作,会生成大量小版本的 Rowset。当 Rowset 数量或大小达到 Base Compaction 触发阈值(如 base_compaction_num_version_threshold)时,会频繁触发任务,持续占用 IO。
  • 分区/分桶设计不合理:若表的分区粒度过细(如按小时分区)或分桶数量过多,每个分区/分桶都会独立触发 Compaction,导致整体任务量倍增,IO 负载叠加。
  • !!!我的问题是第二点!!!: 表数据量大,tablet设置的是10,平均一个tablet大小为400GB,远远超过合理范围

在这里插入图片描述

2. Compaction 资源配置失衡

  • IO 资源分配不足:BE 节点的 Compaction IO 带宽未做限制(如 compaction_io_limit_bytes_per_sec 未配置或值过大),任务会无节制占用磁盘 IO,挤压查询等其他业务的 IO 资源。
  • 线程资源不足:Compaction 线程数(如 base_compaction_threads)配置过少,导致任务堆积。堆积的任务会持续等待 IO 资源,形成“任务排队→IO 长期占用”的循环。

3. 数据特征导致 IO 消耗高

  • 大表/宽表场景:表数据量庞大(如数十亿行)或列数过多(如数百列),单次 Base Compaction 需要读取大量 Rowset 数据并合并写入,读写 IO 量远超普通表。
  • 数据重复/更新频繁:若表存在大量 UPDATE/DELETE 操作,Compaction 时需处理更多版本的行级数据合并,增加数据读取和计算量,间接导致 IO 耗时延长。

4. 存储介质或硬件瓶颈

  • 磁盘性能不足:BE 节点使用 HDD 而非 SSD,或磁盘本身存在坏道、转速不足等问题,IO 读写速度无法支撑 Compaction 的高频需求,导致 IO 使用率长期处于高位。
  • 存储挂载方式问题:磁盘挂载时未优化(如未开启 IO 调度算法、挂载参数不合理),或多 BE 节点共享同一存储设备,造成 IO 资源竞争。

二、排查与优化建议

1. 优先排查 Compaction 任务状态

  1. 通过 Doris 管理界面(如 FE 的 Web UI)或 SQL 查看任务队列:
    GET /api/compaction/run_status GET /api/compaction/show?tablet_id={int}
    
  2. 重点关注 Pending 状态的任务数量,若数量持续增加,说明任务触发频率超过处理能力。

2. 调整 Compaction 触发与资源参数

  • 降低触发频率:调大 Base Compaction 触发阈值(需根据业务写入量调整),示例:
    ALTER TABLE table_name SET PROPERTIES (
      "base_compaction_num_version_threshold" = "50",  -- 版本数阈值,默认30
      "base_compaction_size_threshold" = "10GB"       -- 大小阈值,默认5GB
    );
    
  • 限制 IO 带宽:在 BE 节点的 be.conf 中配置 IO 上限,避免占用过多资源:
    compaction_io_limit_bytes_per_sec = 104857600  -- 限制为100MB/s
    
  • 增加处理线程:适当调大 Compaction 线程数(避免超过 CPU 核心数):
    base_compaction_threads = 4  -- 默认2,根据CPU核心数调整
    

3. 优化表结构与写入方式

  • 调整分区/分桶:合并过细的分区(如按天分区替代按小时),减少分桶数量(确保单个分桶大小在 100MB~1GB 之间)。
  • 控制写入频率:将高频小批量写入(如每秒多次 Stream Load)合并为批量写入,减少 Rowset 生成速度。

4. 检查存储硬件与配置

  • 替换存储介质:若条件允许,将 BE 节点的 HDD 替换为 SSD,提升 IO 读写速度。
  • 优化磁盘挂载:检查磁盘挂载参数(如添加 noatime 选项减少磁盘 IO),并确保每个 BE 节点使用独立的存储设备。

5. 检查大tablet

select 
  tablet_id,
  max(data_disk_size) /1024/1024/1024 size_G, 
  max(rowset_num_rows)  
from  information_schema.rowsets  
group by 
  tablet_id  
having max(data_disk_size) >5000000000 
order by max(data_disk_size) desc 
limit 15;
-- 根据tablet id找库表名
show tablet 66892771;


在 Apache Doris 中,BE(Backend)节点启动后无任何输出且未成功启动,通常意味着启动过程中出现了异常,但日志未正确输出或异常发生在早期阶段。为了解决此类问题,可以从以下几个方面进行排查和修复。 ### 检查启动命令和路径 确保启动命令的路径正确,且脚本具有可执行权限。例如,进入 BE 安装目录并执行启动命令: ```bash cd /software/doris-1.2.1/apache-doris-be/bin ./start_be.sh --daemon ``` 如果命令执行后无任何输出,可能是脚本未正确执行或权限不足。可尝试添加执行权限: ```bash chmod +x start_be.sh ``` ### 检查日志文件 DorisBE 日志通常位于 `log` 目录下。即使命令行无输出,日志文件中仍可能记录了启动失败的原因。查看 `be.INFO`、`be.WARNING`、`be.ERROR` 等日志文件,定位具体错误信息。 ```bash tail -n 100 /software/doris-1.2.1/apache-doris-be/log/be.INFO ``` ### 检查系统资源限制 BE 节点可能因资源不足(如内存、文件描述符)而无法启动。可以通过以下命令检查系统资源限制: ```bash ulimit -a ``` 确保 `open files` 和 `max user processes` 等参数满足 Doris 的需求。如果需要调整,可以在 `/etc/security/limits.conf` 中修改: ```bash * soft nofile 65536 * hard nofile 65536 ``` ### 检查端口冲突 BE 节点默认使用多个端口(如 `9010`、`9020`、`9030` 等)。如果这些端口被其他进程占用BE 将无法正常启动。可以使用以下命令检查端口占用情况: ```bash netstat -tuln | grep 9010 netstat -tuln | grep 9020 netstat -tuln | grep 9030 ``` 如果发现端口被占用,可以选择终止占用进程或修改 BE 配置文件中的端口设置。 ### 检查配置文件 BE 的配置文件通常位于 `conf` 目录下,主要配置文件为 `be.conf`。确保配置文件中的参数(如 `priority_networks`、`heartbeat_service_port`、`rpc_port` 等)与实际网络环境匹配。如果配置错误,BE 可能无法启动。 ### 检查磁盘空间和权限 BE 节点需要足够的磁盘空间用于存储数据和日志。可以使用以下命令检查磁盘空间: ```bash df -h ``` 同,确保 BE 安装目录和数据目录的权限正确,运行 BE 的用户应具有读写权限。 ### 检查系统依赖和环境变量 确保 Doris 所需的依赖库(如 `glibc`、`libstdc++` 等)已正确安装,并且环境变量(如 `JAVA_HOME`)已正确配置。 ### 检查内核参数 某些内核参数(如 `vm.swappiness`、`net.ipv4.tcp_tw_reuse` 等)可能影响 BE 的启动。可以使用以下命令检查内核参数: ```bash sysctl -a | grep vm.swappiness sysctl -a | grep net.ipv4.tcp_tw_reuse ``` 如果需要调整,可以在 `/etc/sysctl.conf` 中修改并应用: ```bash vm.swappiness = 0 net.ipv4.tcp_tw_reuse = 1 sysctl -p ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值