Skip to main content
这些设置用于配置 ClickHouse 服务器,由 ClickHouse 源代码自动生成。

concurrent_threads_lazy_allocation

控制如何为查询分配 CPU 插槽。 当 true (默认值) 时,查询启动时先占用一个 CPU 插槽,只有当其管道确实产生了更多可并行执行的工作时,才会向调度器申请额外插槽。这样可以避免某个查询预留了多达 max_threads 个插槽,却始终只用到其中一部分,从而挤占其他并发查询的资源。此设置同时适用于并发控制以及工作负载的抢占式 CPU 调度器。 当 false 时,查询会在启动时一次性申请全部 max_threads 插槽。

concurrent_threads_scheduler

用于指定由 concurrent_threads_soft_limit_num 和 concurrent_threads_soft_limit_ratio_to_cores 定义的 CPU 插槽调度策略。该算法用于控制有限数量的 CPU 插槽如何在并发查询之间分配。调度器可在运行时更改,无需重启服务器。 可能的值:
  • round_robin — 每个设置了 use_concurrency_control = 1 的查询最多可分配 max_threads 个 CPU 插槽。每个线程对应一个插槽。发生争用时,CPU 插槽会按轮询方式分配给各查询。请注意,第一个插槽会无条件分配,这可能导致不公平;当存在大量 max_threads = 1 的查询时,还会增加 max_threads 较高的查询的延迟。
  • fair_round_robin — 每个设置了 use_concurrency_control = 1 的查询最多可分配 max_threads - 1 个 CPU 插槽。这是 round_robin 的一种变体,不要求为每个查询的第一个线程分配 CPU 插槽。这样,max_threads = 1 的查询不需要任何插槽,因此不会不公平地占用所有插槽。不存在无条件分配的插槽。
  • max_min_fair — 每个设置了 use_concurrency_control = 1 的查询最多可分配 max_threads - 1 个 CPU 插槽。它与 fair_round_robin 类似,但释放出的插槽始终会分配给当前已获分配插槽数最少的查询。在高超额订阅场景下,也就是大量查询竞争有限 CPU 插槽时,这种方式能提供更好的公平性。运行时间较短的查询不会因为长期运行、并随着时间推移累积了更多插槽的查询而受到不利影响。

concurrent_threads_soft_limit_num

允许所有查询使用的最大查询处理线程数,不包括从远程服务器检索数据所使用的线程。这不是硬性限制:即使达到该限制,查询仍至少会获得一个线程来运行。如果后续有更多线程可用,查询在执行过程中还可以扩展到所需的线程数。
值为 0 (默认值) 表示不受限制。

concurrent_threads_soft_limit_ratio_to_cores

与 concurrent_threads_soft_limit_num 相同,但这里是按核心数的比率来设置。
最后修改于 2026年7月23日