max_threads
WHERE 进行过滤,以及为 GROUP BY 进行预聚合,那么就会使用 ‘max_threads’ 个线程。
对于因 LIMIT 而能快速完成的查询,可以将 ‘max_threads’ 设置得更低。
例如,如果每个块中都包含所需数量的条目,且 max_threads = 8,那么会检索 8 个块,尽管实际上只读取 1 个块就足够了。
max_threads 的值越小,消耗的内存就越少。
max_threads 设置默认与 ClickHouse 可用的硬件线程数 (CPU 核心数) 一致。
特殊情况下,对于 CPU 核心数少于 32 且启用了 SMT 的 x86 处理器 (例如启用了 Intel HyperThreading) ,ClickHouse 默认使用逻辑核心数 (= 2 x 物理核心数) 。
如果未启用 SMT,则这对应于 CPU 核心数。
对于 ClickHouse Cloud 用户,默认值会显示为 auto(N),其中 N 与你的服务的 vCPU 规格相匹配,例如 2vCPU/8GiB、4vCPU/16GiB 等。
有关所有服务规格的列表,请参阅 Cloud Console 中的 Settings 选项卡。
max_threads_for_indexes
max_threads_min_free_memory_per_thread
max_threads,以避免启动高度并行、且很可能触及内存限制的查询。
空闲内存按服务器的 max_server_memory_usage 减去当前由全局 memory tracker 跟踪的内存来计算。如果该空闲内存小于 max_threads 与此值的乘积,则会将 max_threads 降低为满足 N * value <= free_memory 的最大 N,且最小值为 1。
将其设为 0 可禁用此限制。
例如,在默认值为 1 GiB 且空闲内存为 32 GiB 时,max_threads 的上限为 32;当空闲内存为 1 GiB 时,则降为 1。
此设置适用于读取侧并行度 (SELECT、UNION、INTERSECT/EXCEPT,以及 INSERT ... SELECT 中的 SELECT 一侧) 。对于写入侧,请参见 max_insert_threads_min_free_memory_per_thread。