跳到主要内容

如何解决 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)

增加此值通常会影响表的查询性能,但这对于数据迁移来说是可以接受的。