JonLv 的个人博客   记录精彩的程序人生

Open Source, Open Mind,
Open Sight, Open Future!

标签: Clickhouse (2)

ClickHouse TOO_MANY_PARTS 异常分析与优化实践 有更新!

线上出现 TOO_MANY_PARTS 异常,初步排查未发现调用量激增或 ClickHouse 负载过高。深入分析发现,因 本地表未进行分区 ,所有数据存储在同一大分区内,导致大量小分片生成,影响合并效率。

关键原因

  1. 未定义 PARTITION BY ,导致所有数据集中在单个分区。
  2. 单笔插入 ,每条数据都会生成一个小分片,加剧分片数量问题。

解决方案

  • 显式定义分区键 (如按时间分区)优化数据存储。
  • 改为批量插入 ,减少小分片数量,提高合并效率。
  • 优化分片键和索引 ,提升整体查询和存储性能。

记一次 Clickhouse 数据写入成功,但是却无数据问题

在一次数据排查中发现 ClickHouse 存在数据丢失现象。通过代码、日志分析排除了程序问题,并进一步发现问题出在 ReplicatedReplacingMergeTree 存储引擎。表的 ORDER BY 组合键中部分字段值可能导致多条数据被错误聚合,尤其是在高并发场景下。

具体原因是 order_no 字段部分数据存储了外部时间戳,导致字段值重复,触发了 ClickHouse 的数据聚合机制。验证后发现,若修改某个字段值,数据可正常插入。

解决方案 :在 ORDER BY 中新增 id 列,确保每条数据唯一,从而避免数据被错误聚合。