> ## 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.

# query_* 服务器设置

> query_* 自动生成组中的 ClickHouse 服务器设置。

这些设置用于配置 ClickHouse 服务器，且由 ClickHouse 源代码自动生成。

<div id="query_cache">
  ## query\_cache
</div>

[查询缓存](/docs/zh/concepts/features/performance/caches/query-cache)的配置。

可用设置如下：

| Setting                   | Description                            | Default Value |
| ------------------------- | -------------------------------------- | ------------- |
| `max_entries`             | 缓存中可存储的 `SELECT` 查询结果的最大数量。            | `1024`        |
| `max_entry_size_in_bytes` | 可保存到缓存中的 `SELECT` 查询结果的最大大小 (以字节为单位) 。 | `1048576`     |
| `max_entry_size_in_rows`  | 可保存到缓存中的 `SELECT` 查询结果的最大行数。           | `30000000`    |
| `max_size_in_bytes`       | 缓存的最大大小 (以字节为单位) 。`0` 表示禁用查询缓存。        | `1073741824`  |

<Note>
  * 更改后的设置会立即生效。
  * 查询缓存的数据分配在 DRAM 中。如果内存紧张，请务必将 `max_size_in_bytes` 设为较小的值，或直接禁用查询缓存。
</Note>

**示例**

```xml theme={null}
<query_cache>
    <max_size_in_bytes>1073741824</max_size_in_bytes>
    <max_entries>1024</max_entries>
    <max_entry_size_in_bytes>1048576</max_entry_size_in_bytes>
    <max_entry_size_in_rows>30000000</max_entry_size_in_rows>
</query_cache>
```

<div id="query_log">
  ## query\_log
</div>

用于记录在启用 [log\_queries=1](/docs/zh/reference/settings/session-settings) 设置时收到的查询。

查询会记录到 [system.query\_log](/docs/zh/reference/system-tables/query_log) 表中，而不是单独的文件中。你可以通过 `table` 参数更改该表的名称 (见下文) 。

以下设置可通过子标签配置：

| Setting                            | Description                                                                                                                    | Default             | Note                                                           |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------- | -------------------------------------------------------------- |
| `database`                         | 数据库名称。                                                                                                                         |                     |                                                                |
| `table`                            | 系统表名称。                                                                                                                         |                     |                                                                |
| `engine`                           | 系统表的 [MergeTree 引擎定义](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table)。 |                     | 如果已定义 `partition_by` 或 `order_by`，则不能使用。如果未指定，默认使用 `MergeTree` |
| `partition_by`                     | 系统表的 [自定义分区键](/docs/zh/reference/engines/table-engines/mergetree-family/custom-partitioning-key)。                                   |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `partition_by` 参数        |
| `ttl`                              | 指定表的 [生存时间 (TTL)](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl)。                  |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `ttl` 参数                 |
| `order_by`                         | 系统表的 [自定义排序键](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#order_by)。如果定义了 `engine`，则不能使用。                   |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `order_by` 参数            |
| `storage_policy`                   | 该表使用的存储策略名称 (可选) 。                                                                                                             |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `storage_policy` 参数      |
| `settings`                         | 控制 MergeTree 行为的[附加参数](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#settings) (可选) 。                         |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `settings` 参数            |
| `flush_interval_milliseconds`      | 将数据从内存缓冲区刷写到表的时间间隔。                                                                                                            | `7500`              |                                                                |
| `max_size_rows`                    | 日志的最大行数。当未刷写的日志数量达到 max\_size 时，日志会被转储到磁盘。                                                                                     | `1048576`           |                                                                |
| `reserved_size_rows`               | 为日志预分配的内存行数。                                                                                                                   | `8192`              |                                                                |
| `buffer_size_rows_flush_threshold` | 行数阈值。达到该阈值后，会在后台启动将日志刷写到磁盘的操作。                                                                                                 | `max_size_rows / 2` |                                                                |
| `flush_on_crash`                   | 设置在发生崩溃时是否将日志转储到磁盘。                                                                                                            | `false`             |                                                                |

此外，以下服务器级设置控制所有系统日志表的默认刷写策略：

```xml theme={null}
<default_system_log_flush_policy>
    <skip_alias_columns>true</skip_alias_columns>
</default_system_log_flush_policy>
```

| 设置                   | 描述                                                      | 默认值     |
| -------------------- | ------------------------------------------------------- | ------- |
| `skip_alias_columns` | 为 `true` 时，系统日志表的 schema 中会省略 ALIAS 列。S3 支持的系统日志需要启用此项。 | `false` |

如果该表不存在，ClickHouse 会创建它。如果在升级 ClickHouse 服务器后查询日志的结构发生变化，旧结构的表会被重命名，并自动创建一个新表。

**示例**

```xml theme={null}
<query_log>
    <database>system</database>
    <table>query_log</table>
    <engine>Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day</engine>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    <max_size_rows>1048576</max_size_rows>
    <reserved_size_rows>8192</reserved_size_rows>
    <buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>
    <flush_on_crash>false</flush_on_crash>
</query_log>
```

<div id="query_masking_rules">
  ## query\_masking\_rules
</div>

基于 Regexp 的规则会在查询及所有日志消息写入服务器日志、[`system.query_log`](/docs/zh/reference/system-tables/query_log)、[`system.text_log`](/docs/zh/reference/system-tables/text_log)、[`system.processes`](/docs/zh/reference/system-tables/processes) 表，以及发送给客户端的日志之前，对其进行处理。
这样可以防止 SQL 查询中的敏感数据 (如姓名、电子邮件、个人标识符或信用卡号) 泄露到日志中。

**示例**

```xml theme={null}
<query_masking_rules>
    <rule>
        <name>hide SSN</name>
        <regexp>(^|\D)\d{3}-\d{2}-\d{4}($|\D)</regexp>
        <replace>000-00-0000</replace>
    </rule>
</query_masking_rules>
```

**配置字段**：

| Setting   | Description               |
| --------- | ------------------------- |
| `name`    | 规则名称 (可选)                 |
| `regexp`  | 与 RE2 兼容的正则表达式 (必填)       |
| `replace` | 用于替换敏感数据的字符串 (可选，默认为六个星号) |

查询脱敏规则会应用于整个查询 (以防格式错误 / 无法解析的查询泄露敏感数据) 。

[`system.events`](/docs/zh/reference/system-tables/events) 表中有一个计数器 `QueryMaskingRulesMatch`，用于统计查询脱敏规则的总匹配次数。

对于分布式查询，每台服务器都必须单独配置，否则传递到其他
节点的子查询将以未脱敏状态存储。

<div id="query_metric_log">
  ## query\_metric\_log
</div>

默认处于禁用状态。

**启用**

如需手动启用 [`system.query_metric_log`](/docs/zh/reference/system-tables/query_metric_log) 的指标历史记录收集功能，请创建 `/etc/clickhouse-server/config.d/query_metric_log.xml`，内容如下：

```xml theme={null}
<clickhouse>
    <query_metric_log>
        <database>system</database>
        <table>query_metric_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <collect_interval_milliseconds>1000</collect_interval_milliseconds>
        <max_size_rows>1048576</max_size_rows>
        <reserved_size_rows>8192</reserved_size_rows>
        <buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>
        <flush_on_crash>false</flush_on_crash>
    </query_metric_log>
</clickhouse>
```

**禁用**

要禁用 `query_metric_log` 设置，需要创建以下文件 `/etc/clickhouse-server/config.d/disable_query_metric_log.xml`，内容如下：

```xml theme={null}
<clickhouse>
    <query_metric_log remove="1" />
</clickhouse>
```

以下设置可通过子标签配置：

| Setting                            | Description                                                                                                                    | Default             | Note                                                           |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------- | -------------------------------------------------------------- |
| `database`                         | 数据库名称。                                                                                                                         |                     |                                                                |
| `table`                            | 系统表名称。                                                                                                                         |                     |                                                                |
| `engine`                           | 系统表的 [MergeTree 引擎定义](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table)。 |                     | 如果已定义 `partition_by` 或 `order_by`，则不能使用。如果未指定，默认使用 `MergeTree` |
| `partition_by`                     | 系统表的 [自定义分区键](/docs/zh/reference/engines/table-engines/mergetree-family/custom-partitioning-key)。                                   |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `partition_by` 参数        |
| `ttl`                              | 指定表的 [生存时间 (TTL)](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl)。                  |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `ttl` 参数                 |
| `order_by`                         | 系统表的 [自定义排序键](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#order_by)。如果定义了 `engine`，则不能使用。                   |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `order_by` 参数            |
| `storage_policy`                   | 该表使用的存储策略名称 (可选) 。                                                                                                             |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `storage_policy` 参数      |
| `settings`                         | 控制 MergeTree 行为的[附加参数](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#settings) (可选) 。                         |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `settings` 参数            |
| `flush_interval_milliseconds`      | 将数据从内存缓冲区刷写到表的时间间隔。                                                                                                            | `7500`              |                                                                |
| `max_size_rows`                    | 日志的最大行数。当未刷写的日志数量达到 max\_size 时，日志会被转储到磁盘。                                                                                     | `1048576`           |                                                                |
| `reserved_size_rows`               | 为日志预分配的内存行数。                                                                                                                   | `8192`              |                                                                |
| `buffer_size_rows_flush_threshold` | 行数阈值。达到该阈值后，会在后台启动将日志刷写到磁盘的操作。                                                                                                 | `max_size_rows / 2` |                                                                |
| `flush_on_crash`                   | 设置在发生崩溃时是否将日志转储到磁盘。                                                                                                            | `false`             |                                                                |

此外，以下服务器级设置控制所有系统日志表的默认刷写策略：

```xml theme={null}
<default_system_log_flush_policy>
    <skip_alias_columns>true</skip_alias_columns>
</default_system_log_flush_policy>
```

| 设置                   | 描述                                                      | 默认值     |
| -------------------- | ------------------------------------------------------- | ------- |
| `skip_alias_columns` | 为 `true` 时，系统日志表的 schema 中会省略 ALIAS 列。S3 支持的系统日志需要启用此项。 | `false` |

<div id="query_thread_log">
  ## query\_thread\_log
</div>

用于记录在启用 [log\_query\_threads=1](/docs/zh/reference/settings/session-settings#log_query_threads) 设置时接收到的查询线程的设置。

查询会记录到 [system.query\_thread\_log](/docs/zh/reference/system-tables/query_thread_log) 表中，而不是单独的文件中。您可以通过 `table` 参数更改该表的名称 (见下文) 。

以下设置可通过子标签配置：

| Setting                            | Description                                                                                                                    | Default             | Note                                                           |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------- | -------------------------------------------------------------- |
| `database`                         | 数据库名称。                                                                                                                         |                     |                                                                |
| `table`                            | 系统表名称。                                                                                                                         |                     |                                                                |
| `engine`                           | 系统表的 [MergeTree 引擎定义](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table)。 |                     | 如果已定义 `partition_by` 或 `order_by`，则不能使用。如果未指定，默认使用 `MergeTree` |
| `partition_by`                     | 系统表的 [自定义分区键](/docs/zh/reference/engines/table-engines/mergetree-family/custom-partitioning-key)。                                   |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `partition_by` 参数        |
| `ttl`                              | 指定表的 [生存时间 (TTL)](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl)。                  |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `ttl` 参数                 |
| `order_by`                         | 系统表的 [自定义排序键](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#order_by)。如果定义了 `engine`，则不能使用。                   |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `order_by` 参数            |
| `storage_policy`                   | 该表使用的存储策略名称 (可选) 。                                                                                                             |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `storage_policy` 参数      |
| `settings`                         | 控制 MergeTree 行为的[附加参数](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#settings) (可选) 。                         |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `settings` 参数            |
| `flush_interval_milliseconds`      | 将数据从内存缓冲区刷写到表的时间间隔。                                                                                                            | `7500`              |                                                                |
| `max_size_rows`                    | 日志的最大行数。当未刷写的日志数量达到 max\_size 时，日志会被转储到磁盘。                                                                                     | `1048576`           |                                                                |
| `reserved_size_rows`               | 为日志预分配的内存行数。                                                                                                                   | `8192`              |                                                                |
| `buffer_size_rows_flush_threshold` | 行数阈值。达到该阈值后，会在后台启动将日志刷写到磁盘的操作。                                                                                                 | `max_size_rows / 2` |                                                                |
| `flush_on_crash`                   | 设置在发生崩溃时是否将日志转储到磁盘。                                                                                                            | `false`             |                                                                |

此外，以下服务器级设置控制所有系统日志表的默认刷写策略：

```xml theme={null}
<default_system_log_flush_policy>
    <skip_alias_columns>true</skip_alias_columns>
</default_system_log_flush_policy>
```

| 设置                   | 描述                                                      | 默认值     |
| -------------------- | ------------------------------------------------------- | ------- |
| `skip_alias_columns` | 为 `true` 时，系统日志表的 schema 中会省略 ALIAS 列。S3 支持的系统日志需要启用此项。 | `false` |

如果该表不存在，ClickHouse 会创建它。如果在升级 ClickHouse 服务器时查询线程日志的结构发生了变化，则旧结构的表会被重命名，并自动创建一个新表。

**示例**

```xml theme={null}
<query_thread_log>
    <database>system</database>
    <table>query_thread_log</table>
    <partition_by>toMonday(event_date)</partition_by>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    <max_size_rows>1048576</max_size_rows>
    <reserved_size_rows>8192</reserved_size_rows>
    <buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>
    <flush_on_crash>false</flush_on_crash>
</query_thread_log>
```

<div id="query_views_log">
  ## query\_views\_log
</div>

用于记录视图 (如 live、materialized 等) 的设置，具体取决于接收到的查询是否启用了 [log\_query\_views=1](/docs/zh/reference/settings/session-settings#log_query_views) 设置。

查询会记录到 [system.query\_views\_log](/docs/zh/reference/system-tables/query_views_log) 表中，而不是单独的文件中。你可以通过 `table` 参数更改该表的名称 (见下文) 。

以下设置可通过子标签配置：

| Setting                            | Description                                                                                                                    | Default             | Note                                                           |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ------------------- | -------------------------------------------------------------- |
| `database`                         | 数据库名称。                                                                                                                         |                     |                                                                |
| `table`                            | 系统表名称。                                                                                                                         |                     |                                                                |
| `engine`                           | 系统表的 [MergeTree 引擎定义](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-creating-a-table)。 |                     | 如果已定义 `partition_by` 或 `order_by`，则不能使用。如果未指定，默认使用 `MergeTree` |
| `partition_by`                     | 系统表的 [自定义分区键](/docs/zh/reference/engines/table-engines/mergetree-family/custom-partitioning-key)。                                   |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `partition_by` 参数        |
| `ttl`                              | 指定表的 [生存时间 (TTL)](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl)。                  |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `ttl` 参数                 |
| `order_by`                         | 系统表的 [自定义排序键](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#order_by)。如果定义了 `engine`，则不能使用。                   |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `order_by` 参数            |
| `storage_policy`                   | 该表使用的存储策略名称 (可选) 。                                                                                                             |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `storage_policy` 参数      |
| `settings`                         | 控制 MergeTree 行为的[附加参数](/docs/zh/reference/engines/table-engines/mergetree-family/mergetree#settings) (可选) 。                         |                     | 如果为系统表指定了 `engine`，则应直接在 'engine' 内指定 `settings` 参数            |
| `flush_interval_milliseconds`      | 将数据从内存缓冲区刷写到表的时间间隔。                                                                                                            | `7500`              |                                                                |
| `max_size_rows`                    | 日志的最大行数。当未刷写的日志数量达到 max\_size 时，日志会被转储到磁盘。                                                                                     | `1048576`           |                                                                |
| `reserved_size_rows`               | 为日志预分配的内存行数。                                                                                                                   | `8192`              |                                                                |
| `buffer_size_rows_flush_threshold` | 行数阈值。达到该阈值后，会在后台启动将日志刷写到磁盘的操作。                                                                                                 | `max_size_rows / 2` |                                                                |
| `flush_on_crash`                   | 设置在发生崩溃时是否将日志转储到磁盘。                                                                                                            | `false`             |                                                                |

此外，以下服务器级设置控制所有系统日志表的默认刷写策略：

```xml theme={null}
<default_system_log_flush_policy>
    <skip_alias_columns>true</skip_alias_columns>
</default_system_log_flush_policy>
```

| 设置                   | 描述                                                      | 默认值     |
| -------------------- | ------------------------------------------------------- | ------- |
| `skip_alias_columns` | 为 `true` 时，系统日志表的 schema 中会省略 ALIAS 列。S3 支持的系统日志需要启用此项。 | `false` |

如果该表不存在，ClickHouse 会创建它。如果在 ClickHouse 服务器 更新后，查询视图日志的结构发生了变化，则会将旧结构的表重命名，并自动创建一个新表。

**示例**

```xml theme={null}
<query_views_log>
    <database>system</database>
    <table>query_views_log</table>
    <partition_by>toYYYYMM(event_date)</partition_by>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    <max_size_rows>1048576</max_size_rows>
    <reserved_size_rows>8192</reserved_size_rows>
    <buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>
    <flush_on_crash>false</flush_on_crash>
</query_views_log>
```
