You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickHouse高写入场景触发Too many links异常无法自愈问题咨询

问题根因

  • 你遇到的Too many links报错是CentOS7默认ext4文件系统的限制:ext4中单个目录的硬链接数上限为65536,每创建一个子目录就会给父目录的硬链接数+1,超过阈值就会触发该报错。
  • 你使用的21.x版本ClickHouse,同一张MergeTree表的所有合并临时目录都会存放在同一个父目录下,当写入速度远大于合并速度时,合并任务不断失败重试,会持续生成新的临时目录,很快触达ext4的硬链接上限。
  • 合并任务每次重试都创建目录失败直接报错,所以不会产生实际IO,CPU占用很低,且重试频率极高导致日志被快速占满,停止写入后已堆积的临时目录不会自动清理,因此无法自愈。

是否为已知问题

该问题是ClickHouse 22.3版本之前的已知缺陷,官方在22.3 LTS版本中优化了临时目录的存储结构,通过哈希打散将临时目录分散到多层子目录中,从内核层面避免了单目录下子目录过多的问题。

预防方案

1. 底层文件系统优化

将ClickHouse数据、临时目录所在的文件系统从ext4更换为XFS,XFS无单目录子目录数量的硬上限,可从根本上避免该类问题,且CentOS7原生支持XFS,兼容性无需担心。

2. 版本升级

将ClickHouse升级到22.3及以上的LTS稳定版本,直接使用官方修复后的临时目录打散逻辑,无需额外改造业务代码。

3. 写入与合并参数优化

  • 控制单表并发写入数不超过10,单次批量写入行数调整到10万~100万区间,避免生成过多小part
  • 增大后台合并线程池配置:将background_pool_size调整为CPU核数的1/31/2(你56vCPU的配置可设置为2025),提升合并速度
  • 合理调整parts_to_delay_insert、parts_to_throw_insert阈值,既避免频繁触发写入报错,也防止part数量无限制上涨

4. 冗余临时目录自动清理

配置轻量定时脚本,定期扫描/var/lib/clickhouse/tmp/store/目录下存在时间超过2小时的临时目录,自动清理冗余文件,避免临时目录持续堆积。


内容的提问来源于stack exchange,提问作者Jae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:36:03