ClickHouse问题分析:插入数据时,报“Too many parts ...”

举报
ZhjDayDayUp 发表于 2021/12/17 17:06:30 2021/12/17
【摘要】 在实际业务中,经常可以碰到插入数据时失败,报错“Too many parts …”,现整理如下,有新场景再继续补充

在实际业务中,经常可以碰到插入数据时失败,报错“Too many parts …”,现整理如下,有新场景再继续补充



对于复制表,可以通过如下sql查询下merge是否有异常:

SELECT
database,
table,
type,
any(last_exception),
any(postpone_reason),
min(create_time),
max(last_attempt_time),
max(last_postpone_time),
max(num_postponed) AS max_postponed,
max(num_tries) AS max_tries,
min(num_tries) AS min_tries,
countIf(last_exception != '') AS count_err,
countIf(num_postponed > 0) AS count_postponed,
countIf(is_currently_executing) AS count_executing,
count() AS count_all
FROM system.replication_queue
GROUP BY
database,
table,
type
ORDER BY count_all DESC 

如下报错,表明merge出了问题,然后具体问题具体分析。

2021-12-14 23:41:432021-12-21 11:17:432021-12-21 11:17:46523780101168701688 │
│     xxx    │             xxx           │ MERGE_PARTS    │                     │ Not executing log entry MERGE_PARTS for part 20211218_3434_3439_1 because source parts size (157.29 MiB) is greater than the current maximum (4.45 MiB). 

这个报错一般是业务量大的情况下,可用线程数较小,导致可用的空间不够。可以修改通过增大background_pool_size优化(一般为核数的两倍)。

如果修改background_pool_size后,还有同样报错,那可能是集群已经出现这个问题很久了,有很多的part需要merge,线程数仍然不够。
那临时修改如下参数(问题解决后,修改回默认值,一般为8),让表能正常merge(前提是磁盘空间足够)

alter table xxx modify setting number_of_free_entries_in_pool_to_lower_max_size_of_merge = 1

该参数,其实是使得 clickhouse中计算磁盘空间的大小的公式只跟真正的磁盘空间大小有关。如果,磁盘空间的真正大小足够的情况下,是不会再报此错误的。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。