> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# max_threads_* 会话级设置

> ClickHouse 中 max_threads_* 自动生成分组下的会话设置。

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>类型</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>默认值</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          无需重启即可更改
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

这些设置可在 [system.settings](/docs/zh/reference/system-tables/settings) 中查看，并由 [源文件](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp) 自动生成。

<div id="max_threads">
  ## max\_threads
</div>

<SettingsInfoBlock type="MaxThreads" default_value="auto(N)" />

查询处理线程的最大数量，不包括用于从远程服务器检索数据的线程 (参见 ['max\_distributed\_connections'](/docs/zh/reference/settings/session-settings/max-distributed#max_distributed_connections) 参数) 。

此参数适用于并行执行查询处理管道中相同阶段的线程。
例如，从表中读取数据时，如果能够使用至少 '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 选项卡。

<div id="max_threads_for_indexes">
  ## max\_threads\_for\_indexes
</div>

<SettingsInfoBlock type="UInt64" default_value="0" />

用于处理索引的最大线程数。

<div id="max_threads_min_free_memory_per_thread">
  ## max\_threads\_min\_free\_memory\_per\_thread
</div>

<SettingsInfoBlock type="UInt64" default_value="1073741824" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.5"},{"label": "1073741824"},{"label": "根据可用空闲内存限制线程数的新设置"}]}]} />

当服务器处于内存压力下时，会降低 `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`。
