max_insert_block_size
max_insert_block_size_rows
为插入到表中而生成的块的最大大小 (按行数计) 。
此设置会在以下两种上下文中控制块的生成:
-
格式解析:当服务器通过任意接口 (HTTP、带内联数据的 clickhouse-client、gRPC、PostgreSQL wire protocol) 解析基于行的输入格式 (CSV、TSV、JSONEachRow 等) 时,会在以下情况下输出块:
- 同时达到 min_insert_block_size_rows 和 min_insert_block_size_bytes,或
- 达到 max_insert_block_size_rows 或 max_insert_block_size_bytes 中的任意一个
-
INSERT 操作:在 INSERT 查询期间,以及数据流经 materialized view 时,此设置的行为取决于
use_strict_insert_block_limits:-
启用时:会在以下情况下输出块:
- 最小阈值 (AND) :同时达到 min_insert_block_size_rows 和 min_insert_block_size_bytes
- 最大阈值 (OR) :达到 max_insert_block_size_rows 或 max_insert_block_size_bytes 中的任意一个
- 禁用时:当达到 min_insert_block_size_rows 或 min_insert_block_size_bytes 中的任意一个时,就会输出块。此时不会强制执行 max_insert_block_size 设置。
-
启用时:会在以下情况下输出块:
- 正整数。
max_insert_block_size_bytes
- 正整数。
- 0 — 该设置不参与块的生成。
max_insert_delayed_streams_for_parallel_write
50。
max_insert_threads
INSERT SELECT 查询时可使用的最大线程数。
可能的值:
- 0 (或 1) —
INSERT SELECT不会并行执行。 - 大于 1 的正整数。
- 8 GiB 内存的节点为
1 - 16 GiB 内存的节点为
2 - 更大节点为
4
SELECT 部分并行执行时,并行 INSERT SELECT 才会生效,参见 max_threads 设置。
值越大,内存使用量越高。
max_insert_threads_min_free_memory_per_thread
max_threads_min_free_memory_per_thread 相同,但它作用于 max_insert_threads,而不是 max_threads。默认值更高,因为插入管道通常比读取管道持有更大的单线程缓冲区 (MergeTree 分片、压缩块) 。
如果空闲内存小于 max_insert_threads 与此值的乘积,则会下调 max_insert_threads 以满足该限制,最少可降至 1。
将其设为 0 可禁用此限制。