如何解决 INSERT...SELECT 期间出现的 TOO MANY PARTS 错误?
·2 分钟阅读
通过调整用于更大块的专家级设置并增加分区阈值,解决 ClickHouse 在 `INSERT...SELECT` 期间出现的 TOO_MANY_PARTS 错误。
问题
在执行 INSERT...SELECT
语句时,我遇到了 parts 过多 (TOO_MANY_PARTS) 错误。
如何解决这个问题?
答案
以下是一些用于调整以避免此错误的设置,这是 ClickHouse 的专家级调整,这些值应仅在了解 ClickHouse 云服务或将要使用的本地集群的规范后设置,因此不要将这些值视为“一刀切”。
max_insert_block_size = 100_000_000
(默认 1_048_576
)
从约 1M 增加到 100M 将允许形成更大的块
注意:此设置仅在服务器形成块时适用。即通过 HTTP 接口进行 INSERT,而不适用于 clickhouse-client
min_insert_block_size_rows = 100_000_000
(默认 1_048_576
)
从约 1M 增加到 100M 将允许形成更大的块。
min_insert_block_size_bytes = 500_000_000
(默认 268_435_456
)
从 268.44 MB 增加到 500 MB 将允许形成更大的块。
parts_to_delay_insert = 500
(默认 150
)
增加此值,以便在达到单个分区中的活动 parts 数量时,INSERT 不会被人为地减慢。
parts_to_throw_insert = 1500
(默认 3000
)
增加此值通常会影响表的查询性能,但这对于数据迁移来说是可以接受的。