首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >集群近一天批次写入条数详情

集群近一天批次写入条数详情

原创
作者头像
EMR小助手
修改2025-05-20 17:31:32
修改2025-05-20 17:31:32
1610
举报

【健康度判断

  • 0 ~ 999区间值百分比大于50%,为非健康值。
  • 查询sql
代码语言:sql
复制
SELECT
      ROUND(percentage/100,2)
    FROM
        (
            SELECT
                FLOOR(written_rows / 1000) * 1000 AS start,
                (FLOOR(written_rows / 1000) * 1000) + 999 AS end,
                COUNT(*) AS count,
                ROUND((COUNT(*) * 100) / (
                    SELECT COUNT(*) AS total
                    FROM system.query_log
                    WHERE (event_date >= (today() - 1)) AND (event_time >= (now() - toIntervalDay(1))) AND (type = 'QueryFinish') AND (query_kind = 'Insert')
                ), 2) AS percentage
            FROM system.query_log
            WHERE (event_date >= (today() - 1)) AND (event_time >= (now() - toIntervalDay(1))) AND (type = 'QueryFinish') AND (query_kind = 'Insert')
            GROUP BY FLOOR(written_rows / 1000)
        ) AS percentage_data
    WHERE end=999  
    LIMIT 1

可能风险

  • merge parts速度跟不上insert parts速度,可能出现too many parts(见备注)等异常。fetch parts跟不上可能出现zk负载过高,表readonly,无法写入情况。
代码语言:txt
复制
ClickHouse exception, code: 1002, host: 11.142.xx.xx, port: 8123; Code: 252. DB::Exception: Too many parts (4101 with average size of 8.54 MiB) in table 'xx.xxxx(b9cf0e01-3bc7-4836-91cd-e27d00c02038)'. Merges are processing significantly slower than inserts. (TOO_MANY_PARTS) (version 23.8.9.1)

【原因分析】

  • 高频小批量插入:每次插入的数据量过小(如单行或少量行),导致生成大量临时 parts
  • 合并速度不足:后台合并线程数不足(background_pool_size默认 16),合并任务优先级低,资源被查询,mutation等操作占用
  • 分区设计不合理:分区键(PARTITION BY)粒度过细(如按秒分区),导致每个插入生成新分区 parts
  • 写入负载不均衡:分布式表写入集中在部分节点,导致本地表 parts 堆积

【建议】

  • 攒批写:一次至少插入 1,000 行的相当大的批次数据,最好在1w到10w行之间;降低并发写入频率。
  • 调整合并参数:增加后台合并线程,建议background_pool_size不大于节点cpu核数的1/4,过大会使节点负载过高,影响集群的正常读写,
  • 优化分区设计:按天或小时分区,避免粒度过细

备注

too many parts报错原因

  • 触发条件
    • 当单次插入操作生成的 数据块(parts)数量 超过阈值,即parts_to_throw_insert配置值(默认 300或3000,23.6之前版本为300),或未合并的 parts 总数超过阈值,会抛出 Too many parts错误。
    • 常见于高频插入小批量数据的场景(如每秒多次插入单行数据)。
  • 底层机制
    • MergeTree 引擎表会将每次插入的数据生成临时 parts,后台线程定期合并这些 parts 以减少数量。
    • 若插入速度远快于合并速度,parts 堆积导致超过阈值。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档