跳至主要内容
跳至主要内容
编辑此页

服务器设置

本节包含服务器设置的描述。这些设置无法在会话或查询级别更改。

有关 ClickHouse 中配置文件,请参阅 “配置文件”

其他设置在“设置”部分中描述。在研究设置之前,我们建议阅读 配置文件部分,并注意替换的使用(incloptional 属性)。

abort_on_logical_error

在遇到 LOGICAL_ERROR 异常时崩溃服务器。仅供专家使用。

access_control_improvements

访问控制系统可选改进的设置。

设置描述默认值
on_cluster_queries_require_cluster_grant设置 ON CLUSTER 查询是否需要 CLUSTER 授权。true
role_cache_expiration_time_seconds设置角色在角色缓存中存储的时间(自上次访问以来,以秒为单位)。600
select_from_information_schema_requires_grant设置 SELECT * FROM information_schema.<table> 是否需要任何授权,以及是否可以由任何用户执行。如果设置为 true,则此查询需要 GRANT SELECT ON information_schema.<table>,就像对于普通表一样。true
select_from_system_db_requires_grant设置 SELECT * FROM system.<table> 是否需要任何授权,以及是否可以由任何用户执行。如果设置为 true,则此查询需要 GRANT SELECT ON system.<table>,就像对于非系统表一样。例外:一些系统表(tablescolumnsdatabases,以及一些常量表,如 onecontributors)仍然对所有人可访问;并且如果授予了 SHOW 权限(例如 SHOW USERS),则相应的系统表(例如 system.users)将可访问。true
settings_constraints_replace_previous设置设置配置文件中某个设置的约束是否会取消先前约束(在其他配置文件中定义)对该设置的操作,包括未由新约束设置的字段。它还启用了 changeable_in_readonly 约束类型。true
table_engines_require_grant设置使用特定表引擎创建表是否需要授权。false
users_without_row_policies_can_read_rows设置没有允许的行策略的用户是否仍然可以使用 SELECT 查询读取行。例如,如果有两个用户 A 和 B,并且仅为 A 定义了行策略,那么如果此设置为 true,用户 B 将看到所有行。如果此设置为 false,用户 B 将看不到任何行。true

示例

<access_control_improvements>
    <users_without_row_policies_can_read_rows>true</users_without_row_policies_can_read_rows>
    <on_cluster_queries_require_cluster_grant>true</on_cluster_queries_require_cluster_grant>
    <select_from_system_db_requires_grant>true</select_from_system_db_requires_grant>
    <select_from_information_schema_requires_grant>true</select_from_information_schema_requires_grant>
    <settings_constraints_replace_previous>true</settings_constraints_replace_previous>
    <table_engines_require_grant>false</table_engines_require_grant>
    <role_cache_expiration_time_seconds>600</role_cache_expiration_time_seconds>
</access_control_improvements>

access_control_path

ClickHouse 服务器存储通过 SQL 命令创建的用户和角色配置的文件夹路径。

参见

aggregate_function_group_array_action_when_limit_is_reached

当 groupArray 中的最大数组元素大小超过时执行的操作:throw 异常,或 discard 额外值

aggregate_function_group_array_max_element_size

groupArray 函数中字节单位的最大数组元素大小。此限制在序列化时进行检查,有助于避免过大的状态大小。

allow_feature_tier

控制用户是否可以更改与不同功能层级相关的设置。

  • 0 - 允许更改任何设置(实验性、beta、生产)。
  • 1 - 仅允许更改 beta 和生产功能设置。拒绝更改实验设置。
  • 2 - 仅允许更改生产设置。拒绝更改实验或 beta 设置。

这相当于对所有 EXPERIMENTAL / BETA 功能设置只读约束。

注意

值为 0 表示可以更改所有设置。

allow_impersonate_user

启用/禁用 IMPERSONATE 功能 (EXECUTE AS target_user)。此设置已弃用。

allow_implicit_no_password

禁止创建没有密码的用户,除非显式指定 'IDENTIFIED WITH no_password'。

<allow_implicit_no_password>1</allow_implicit_no_password>

allow_no_password

设置是否允许不安全的密码类型 no_password。

<allow_no_password>1</allow_no_password>

allow_plaintext_password

设置是否允许明文密码类型(不安全)。

<allow_plaintext_password>1</allow_plaintext_password>

allow_use_jemalloc_memory

允许使用 jemalloc 内存。

allowed_disks_for_table_engines

允许与 Iceberg 一起使用的磁盘列表

async_insert_queue_flush_on_shutdown

如果为 true,则在正常关闭时刷新异步插入队列

async_insert_threads

实际解析和插入后台数据的最大线程数。零表示禁用异步模式

async_load_databases

异步加载数据库和表。

  • 如果 true,所有非系统数据库(具有 OrdinaryAtomicReplicated 引擎)将在 ClickHouse 服务器启动后异步加载。请参阅 system.asynchronous_loader 表、tables_loader_background_pool_sizetables_loader_foreground_pool_size 服务器设置。任何尝试访问尚未加载的表的查询都将等待该表启动。如果加载作业失败,查询将重新抛出错误(而不是在 async_load_databases = false 的情况下关闭整个服务器)。被至少一个查询等待的表将以更高的优先级加载。数据库上的 DDL 查询将等待该数据库启动。此外,请考虑设置 max_waiting_queries 限制总的等待查询数。
  • 如果 false,所有数据库在服务器启动时加载。

示例

<async_load_databases>true</async_load_databases>

async_load_system_database

异步加载系统表。如果 system 数据库中存在大量日志表和分片,则很有帮助。独立于 async_load_databases 设置。

  • 如果设置为 true,所有具有 OrdinaryAtomicReplicated 引擎的系统数据库将在 ClickHouse 服务器启动后异步加载。请参阅 system.asynchronous_loader 表、tables_loader_background_pool_sizetables_loader_foreground_pool_size 服务器设置。任何尝试访问尚未加载的系统表的查询都将等待该表启动。被至少一个查询等待的表将以更高的优先级加载。此外,请考虑设置 max_waiting_queries 设置以限制总的等待查询数。
  • 如果设置为 false,系统数据库在服务器启动之前加载。

示例

<async_load_system_database>true</async_load_system_database>

asynchronous_heavy_metrics_update_period_s

异步重型指标更新的周期(秒)。

asynchronous_insert_log

用于 asynchronous_insert_log 系统表以记录异步插入的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

示例

<clickhouse>
    <asynchronous_insert_log>
        <database>system</database>
        <table>asynchronous_insert_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <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>
        <!-- <engine>Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day</engine> -->
    </asynchronous_insert_log>
</clickhouse>

asynchronous_metric_log

默认在 ClickHouse Cloud 部署中启用。

如果您的环境中默认未启用此设置,具体取决于 ClickHouse 的安装方式,您可以按照以下说明启用或禁用它。

启用

要手动开启异步指标日志历史记录收集 system.asynchronous_metric_log,请创建 /etc/clickhouse-server/config.d/asynchronous_metric_log.xml 并添加以下内容

<clickhouse>
     <asynchronous_metric_log>
        <database>system</database>
        <table>asynchronous_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>
    </asynchronous_metric_log>
</clickhouse>

禁用

要禁用 asynchronous_metric_log 设置,您应该创建以下文件 /etc/clickhouse-server/config.d/disable_asynchronous_metric_log.xml 并添加以下内容

<clickhouse><asynchronous_metric_log remove="1" /></clickhouse>

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

asynchronous_metrics_enable_heavy_metrics

启用计算复杂的异步指标。

asynchronous_metrics_keeper_metrics_only

使异步指标仅计算与 keeper 相关的指标。

asynchronous_metrics_update_period_s

更新异步指标的周期,单位为秒。

auth_use_forwarded_address

通过代理连接的客户端进行身份验证时,使用源地址。

注意

应谨慎使用此设置,因为转发地址很容易被伪造 - 接受此类身份验证的服务器不应直接访问,而应仅通过受信任的代理访问。

background_buffer_flush_schedule_pool_size

用于执行 Buffer-engine 表 后台刷盘操作的最大线程数。

background_common_pool_size

用于执行各种操作(主要是垃圾收集)的 *MergeTree-engine 表的最大线程数。

background_distributed_schedule_pool_size

用于执行分布式发送的最大线程数。

background_fetches_pool_size

用于从另一个副本获取数据部分的 *MergeTree-engine 表的最大线程数。

background_merges_mutations_concurrency_ratio

设置线程数与可以并发执行的后台合并和变异的比例。

例如,如果比例等于 2 且 background_pool_size 设置为 16,则 ClickHouse 可以并发执行 32 个后台合并。这是可能的,因为后台操作可以暂停和推迟。这需要为小合并提供更高的执行优先级。

注意

您只能在运行时增加此比例。要降低它,您必须重新启动服务器。

background_pool_size 设置一样,background_merges_mutations_concurrency_ratio 也可以从 default 配置文件应用于向后兼容性。

background_merges_mutations_scheduling_policy

执行后台合并和变异的调度策略。可能的值是:round_robinshortest_task_first

用于选择后台线程池执行的下一个合并或变异的算法。可以在不重新启动服务器的情况下在运行时更改策略。可以从 default 配置文件应用于向后兼容性。

可能的值

  • round_robin — 每个并发合并和变异以轮询顺序执行,以确保无饥饿操作。较小的合并比较大的合并更快地完成,只是因为它们要合并的块更少。
  • shortest_task_first — 始终执行较小的合并或变异。合并和变异根据其结果大小分配优先级。优先选择较小的合并,这可确保小部分合并的速度最快,但可能导致在大量 INSERT 的分区中无限期地使大合并处于饥饿状态。

background_message_broker_schedule_pool_size

用于执行消息流后台操作的最大线程数。

background_move_pool_size

用于将数据部分移动到另一个磁盘或卷的 *MergeTree-engine 表的最大线程数。

background_pool_size

设置执行具有 MergeTree 引擎的表的后台合并和变异的线程数。

注意
  • 为了向后兼容,此设置也可以在 ClickHouse 服务器启动时从 default 配置文件应用。
  • 您只能在运行时增加线程数。
  • 要减少线程数,您必须重新启动服务器。
  • 通过调整此设置,您可以管理 CPU 和磁盘负载。
危险

较小的池大小使用较少的 CPU 和磁盘资源,但后台进程推进速度较慢,最终可能会影响查询性能。

在更改它之前,请查看相关的 MergeTree 设置,例如

示例

<background_pool_size>16</background_pool_size>

background_schedule_pool_log

包含有关通过各种后台池执行的所有后台任务的信息。

<background_schedule_pool_log>
    <database>system</database>
    <table>background_schedule_pool_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>
    <!-- Only tasks longer than duration_threshold_milliseconds will be logged. Zero means log everything -->
    <duration_threshold_milliseconds>0</duration_threshold_milliseconds>
</background_schedule_pool_log>

background_schedule_pool_max_parallel_tasks_per_type_ratio

池中可以同时执行相同类型任务的线程的最大比例。

background_schedule_pool_size

用于不断执行一些轻量级周期性操作(例如复制表、Kafka 流和 DNS 缓存更新)的最大线程数。

backup_log

用于 backup_log 系统表,用于记录 BACKUPRESTORE 操作的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

示例

<clickhouse>
    <backup_log>
        <database>system</database>
        <table>backup_log</table>
        <flush_interval_milliseconds>1000</flush_interval_milliseconds>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <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>
        <!-- <engine>Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day</engine> -->
    </backup_log>
</clickhouse>

backup_threads

执行 BACKUP 请求的最大线程数。

backups

备份设置,用于执行 BACKUPRESTORE 语句时使用。

以下设置可以通过子标签进行配置

设置类型描述默认值
allow_concurrent_backupsBool确定是否允许在同一主机上并发运行多个备份操作。true
allow_concurrent_restoresBool确定是否允许在同一主机上并发运行多个还原操作。true
allowed_diskString使用 File() 进行备份的磁盘。必须设置此设置才能使用 File``
allowed_pathString使用 File() 进行备份的路径。必须设置此设置才能使用 File``
attempts_to_collect_metadata_before_sleepUInt在比较收集的元数据后,如果存在不一致,则在休眠之前收集元数据的尝试次数。2
collect_metadata_timeoutUInt64备份期间收集元数据的超时时间,单位为毫秒。600000
compare_collected_metadataBool如果为 true,则比较收集的元数据与现有的元数据,以确保它们在备份期间未更改。true
create_table_timeoutUInt64还原期间创建表的超时时间,单位为毫秒。300000
max_attempts_after_bad_versionUInt64在协调备份/还原期间遇到错误版本后重试的最大次数。3
max_sleep_before_next_attempt_to_collect_metadataUInt64在下一次尝试收集元数据之前,最大休眠时间,单位为毫秒。100
min_sleep_before_next_attempt_to_collect_metadataUInt64在下一次尝试收集元数据之前,最小休眠时间,单位为毫秒。5000
remove_backup_files_after_failureBool如果 BACKUP 命令失败,ClickHouse 将尝试删除在失败之前已复制到备份的文件,否则将保留已复制的文件。true
sync_period_msUInt64协调备份/还原的同步周期,单位为毫秒。5000
test_inject_sleepBool测试相关的休眠false
test_randomize_orderBool如果为 true,则随机化某些操作的顺序以用于测试目的。false
zookeeper_pathStringZooKeeper 中存储备份和恢复元数据的路径,在使用 ON CLUSTER 子句时。/clickhouse/backups

默认情况下,此设置配置为

<backups>
    ....
</backups>

backups_io_thread_pool_queue_size

备份 IO 线程池中可以调度的最大作业数。由于当前的 S3 备份逻辑,建议保持此队列无限制。

注意

值为 0(默认值)表示无限制。

bcrypt_workfactor

使用 Bcrypt 算法bcrypt_password 身份验证类型的 work factor。work factor 定义了计算哈希值和验证密码所需计算量和时间。

<bcrypt_workfactor>12</bcrypt_workfactor>
注意

对于具有高频率身份验证的应用程序,由于 bcrypt 在较高的 work factor 下的计算开销,请考虑使用替代身份验证方法。

blob_storage_log

用于 blob_storage_log 系统表的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

示例

<blob_storage_log>
    <database>system</database
    <table>blob_storage_log</table
    <partition_by>toYYYYMM(event_date)</partition_by>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds
    <ttl>event_date + INTERVAL 30 DAY</ttl>
</blob_storage_log>

builtin_dictionaries_reload_interval

重新加载内置字典的间隔(秒)。

ClickHouse 每 x 秒重新加载一次内置字典。这使得在不重新启动服务器的情况下“动态”编辑字典成为可能。

示例

<builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>

cache_size_to_ram_max_ratio

设置缓存大小与 RAM 最大比率。允许在低内存系统上降低缓存大小。

cannot_allocate_thread_fault_injection_probability

用于测试目的。

cgroups_memory_usage_observer_wait_time

服务器允许的最大内存消耗由 cgroup 中的相应阈值调整的间隔(秒)。

要禁用 cgroup 观察器,请将此值设置为 0

compiled_expression_cache_elements_size

设置 编译表达式的缓存大小(以元素为单位)。

compiled_expression_cache_size

设置 编译表达式的缓存大小(以字节为单位)。

compression

用于 MergeTree 引擎表的的数据压缩设置。

注意

如果您刚开始使用 ClickHouse,我们建议不要更改此设置。

配置模板:

<compression>
    <case>
      <min_part_size>...</min_part_size>
      <min_part_size_ratio>...</min_part_size_ratio>
      <method>...</method>
      <level>...</level>
    </case>
    ...
</compression>

<case> 字段:

  • min_part_size – 数据分区的最小大小。
  • min_part_size_ratio – 数据分区大小与表大小的比率。
  • method – 压缩方法。允许的值:lz4lz4hczstddeflate_qpl
  • level – 压缩级别。请参阅 编解码器
注意

您可以配置多个 <case> 部分。

满足条件时的操作:

  • 如果数据分区匹配设置中的条件,ClickHouse 将使用指定的压缩方法。
  • 如果数据分区匹配多个条件集,ClickHouse 将使用第一个匹配的条件集。
注意

如果数据分区不满足任何条件,ClickHouse 将使用 lz4 压缩。

示例

<compression incl="clickhouse_compression">
    <case>
        <min_part_size>10000000000</min_part_size>
        <min_part_size_ratio>0.01</min_part_size_ratio>
        <method>zstd</method>
        <level>1</level>
    </case>
</compression>

concurrent_threads_scheduler

关于如何执行由 concurrent_threads_soft_limit_numconcurrent_threads_soft_limit_ratio_to_cores 指定的 CPU 插槽调度的策略。用于管理有限数量的 CPU 插槽如何在并发查询之间分配的算法。调度程序可以在不重新启动服务器的情况下随时更改。

可能的值

  • round_robin — 每个设置 use_concurrency_control = 1 的查询最多分配 max_threads 个 CPU 插槽。每个线程一个插槽。在竞争时,CPU 插槽使用轮询方式授予查询。请注意,第一个插槽无条件授予,这可能导致不公平和具有高 max_threads 的查询的延迟增加,尤其是在存在大量 max_threads = 1 的查询时。
  • 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 相同,但与核心数的比率。

config-file

指向服务器配置文件。

config_reload_interval_ms

ClickHouse 检查新更改并重新加载配置的频率

core_dump

配置 core dump 文件大小的软限制。

注意

硬性限制通过系统工具配置

示例

<core_dump>
     <size_limit>1073741824</size_limit>
</core_dump>

cpu_slot_preemption

定义如何完成 CPU 资源(主线程和工作线程)的工作负载调度。

  • 如果为 true(默认值),则基于实际消耗的 CPU 时间进行核算。将公平数量的 CPU 时间分配给竞争的工作负载。插槽分配的时间有限,并在到期后重新请求。在 CPU 资源过载的情况下,插槽请求可能会阻塞线程执行,即可能会发生抢占。这确保了 CPU 时间的公平性。
  • 如果为 false,则基于分配的 CPU 插槽数进行核算。将公平数量的 CPU 插槽分配给竞争的工作负载。插槽在线程启动时分配,持续保留,并在线程执行结束时释放。分配给查询执行的线程数只能从 1 增加到 max_threads,并且永远不会减少。这更有利于长时间运行的查询,并可能导致短查询的 CPU 饥饿。

示例

<cpu_slot_preemption>true</cpu_slot_preemption>

参见

cpu_slot_preemption_timeout_ms

它定义了工作线程在抢占期间可以等待多长时间(以毫秒为单位),即在等待授予另一个 CPU 插槽时。在此超时后,如果线程无法获取新的 CPU 插槽,它将退出,并且查询将动态地缩减到较低数量的并发执行线程。请注意,主线程永远不会缩减,但可能会被无限期地抢占。只有在启用 cpu_slot_preemption 并且为工作线程定义了 CPU 资源时才有意义。

示例

<cpu_slot_preemption_timeout_ms>1000</cpu_slot_preemption_timeout_ms>

参见

cpu_slot_quantum_ns

它定义了线程在获取 CPU 插槽后允许消耗多少 CPU 纳秒,然后应该请求另一个 CPU 插槽。只有在启用 cpu_slot_preemption 并且为主线程或工作线程定义了 CPU 资源时才有意义。

示例

<cpu_slot_quantum_ns>10000000</cpu_slot_quantum_ns>

参见

crash_log

用于 crash_log 系统表操作的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
buffer_size_rows_flush_threshold行数阈值。如果达到阈值,将启动后台日志刷盘。max_size_rows / 2
数据库数据库的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
flush_interval_milliseconds将内存中的数据刷新到表的间隔。7500
flush_on_crash设置在发生崩溃时是否应将日志转储到磁盘。false
max_size_rows日志的行数上限。当未刷新的日志量达到 max_size 时,日志将被转储到磁盘。1024
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
reserved_size_rows日志预分配的行数内存大小。1024
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 settings 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
table系统表的名称。
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数

默认服务器配置文件 config.xml 包含以下设置部分

<crash_log>
    <database>system</database>
    <table>crash_log</table>
    <partition_by>toYYYYMM(event_date)</partition_by>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    <max_size_rows>1024</max_size_rows>
    <reserved_size_rows>1024</reserved_size_rows>
    <buffer_size_rows_flush_threshold>512</buffer_size_rows_flush_threshold>
    <flush_on_crash>false</flush_on_crash>
</crash_log>

custom_cached_disks_base_directory

此设置指定自定义(从 SQL 创建)缓存磁盘的缓存路径。custom_cached_disks_base_directory 对自定义磁盘具有更高的优先级,而不是 filesystem_caches_path(在 filesystem_caches_path.xml 中找到),如果缺少后者,则使用后者。文件系统缓存设置路径必须位于该目录中,否则将抛出异常,从而阻止创建磁盘。

注意

这不会影响在较早版本上创建的磁盘以进行服务器升级。在这种情况下,不会抛出异常,以允许服务器成功启动。

示例

<custom_cached_disks_base_directory>/var/lib/clickhouse/caches/</custom_cached_disks_base_directory>

custom_settings_prefixes

用于 自定义设置的列表。前缀必须用逗号分隔。

示例

<custom_settings_prefixes>custom_</custom_settings_prefixes>

参见

database_atomic_delay_before_drop_table_sec

使用 UNDROP 语句可以恢复已删除表的延迟(秒)。如果 DROP TABLE 使用 SYNC 修饰符运行,则忽略此设置。此设置的默认值为 480(8 分钟)。

database_catalog_drop_error_cooldown_sec

如果表删除失败,ClickHouse 将等待此超时时间后重试该操作。

database_catalog_drop_table_concurrency

用于删除表的线程池大小。

database_catalog_unused_dir_cleanup_period_sec

清理 store/ 目录垃圾的任务的参数。设置任务的调度周期。

注意

值为 0 表示“永不”。默认值对应于 1 天。

database_catalog_unused_dir_hide_timeout_sec

清理 store/ 目录垃圾的任务的参数。如果某个子目录未被 clickhouse-server 使用,并且该目录在过去 database_catalog_unused_dir_hide_timeout_sec 秒内未被修改,则任务将通过删除所有访问权限来“隐藏”该目录。它也适用于 clickhouse-server 不期望在 store/ 内部看到的目录。

注意

值为 0 表示“立即”。

database_catalog_unused_dir_rm_timeout_sec

清理 store/ 目录垃圾的任务的参数。如果某个子目录未被 clickhouse-server 使用,并且之前已被“隐藏”(请参阅 database_catalog_unused_dir_hide_timeout_sec),并且该目录在过去 [database_catalog_unused_dir_rm_timeout_sec]/operations/server-configuration-parameters/settings#database_catalog_unused_dir_rm_timeout_sec) 秒内未被修改,则任务将删除该目录。它也适用于 clickhouse-server 不期望在 store/ 内部看到的目录。

注意

值为 0 表示“永不”。默认值对应于 30 天。

database_replicated_allow_detach_permanently

允许在复制数据库中永久分离表

database_replicated_drop_broken_tables

从复制数据库中删除意外的表,而不是将它们移动到单独的本地数据库

dead_letter_queue

“dead_letter_queue”系统表的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

默认设置是

<dead_letter_queue>
    <database>system</database>
    <table>dead_letter</table>
    <partition_by>toYYYYMM(event_date)</partition_by>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
</dead_letter_queue>

default_database

默认数据库名称。

default_password_type

设置在类似 CREATE USER u IDENTIFIED BY 'p' 的查询中自动设置的密码类型。

允许的值是

  • plaintext_password
  • sha256_password
  • double_sha1_password
  • bcrypt_password
<default_password_type>sha256_password</default_password_type>

default_profile

默认设置配置文件。设置配置文件位于设置 user_config 中指定的文件中。

示例

<default_profile>default</default_profile>

default_replica_name

ZooKeeper 中的副本名称。

示例

<default_replica_name>{replica}</default_replica_name>

default_replica_path

ZooKeeper 中表的路径。

示例

<default_replica_path>/clickhouse/tables/{uuid}/{shard}</default_replica_path>

default_session_timeout

默认会话超时时间,以秒为单位。

<default_session_timeout>60</default_session_timeout>

dictionaries_config

字典配置文件的路径。

路径

  • 指定绝对路径或相对于服务器配置文件路径。
  • 路径可以包含通配符 * 和 ?。

参见

示例

<dictionaries_config>*_dictionary.xml</dictionaries_config>

dictionaries_lazy_load

延迟加载字典。

  • 如果为 true,则每个字典在首次使用时加载。如果加载失败,则使用该字典的函数会抛出异常。
  • 如果为 false,则服务器在启动时加载所有字典。
注意

服务器将在启动时等待所有字典完成加载,然后再接受任何连接(例外:如果 wait_dictionaries_load_at_startup 设置为 false)。

示例

<dictionaries_lazy_load>true</dictionaries_lazy_load>

dictionaries_lib_path

字典库的目录。

示例

<dictionaries_lib_path>/var/lib/clickhouse/dictionaries_lib/</dictionaries_lib_path>

dictionary_background_reconnect_interval

已启用 background_reconnect 的失败 MySQL 和 Postgres 字典的重新连接尝试间隔,以毫秒为单位。

disable_insertion_and_mutation

禁用插入/修改/删除查询。如果有人需要只读节点以防止插入和修改影响读取性能,则将启用此设置。尽管设置了此选项,但插入到外部引擎(S3、DataLake、MySQL、PostrgeSQL、Kafka 等)是允许的。

disable_internal_dns_cache

禁用内部 DNS 缓存。建议在基础设施经常变化的系统(例如 Kubernetes)中运行 ClickHouse 时使用。

disable_tunneling_for_https_requests_over_http_proxy

默认情况下,使用隧道(即 HTTP CONNECT)通过 HTTP 代理进行 HTTPS 请求。可以使用此设置禁用它。

no_proxy

默认情况下,所有请求都将通过代理。为了禁用对特定主机的代理,必须设置 no_proxy 变量。它可以在列表和远程解析器的 <proxy> 内部以及环境解析器的环境变量中设置。它支持 IP 地址、域名、子域名和 '*' 通配符以完全绕过。就像 curl 一样,前导点将被删除。

示例

以下配置绕过对 clickhouse.cloud 及其所有子域名的代理请求(例如 auth.clickhouse.cloud)。同样适用于 GitLab,即使它有一个前导点。gitlab.comabout.gitlab.com 都会绕过代理。

<proxy>
    <no_proxy>clickhouse.cloud,.gitlab.com</no_proxy>
    <http>
        <uri>http://proxy1</uri>
        <uri>http://proxy2:3128</uri>
    </http>
    <https>
        <uri>http://proxy1:3128</uri>
    </https>
</proxy>

disk_connections_hard_limit

当达到此限制时,抛出异常。设置为 0 以关闭硬限制。该限制适用于磁盘连接。

disk_connections_soft_limit

高于此限制的连接的生存时间明显较短。该限制适用于磁盘连接。

disk_connections_store_limit

使用后重置高于此限制的连接。设置为 0 以关闭连接缓存。该限制适用于磁盘连接。

disk_connections_warn_limit

如果正在使用的连接数高于此限制,则将警告消息写入日志。该限制适用于磁盘连接。

display_secrets_in_show_and_select

启用或禁用在 SHOWSELECT 查询中显示表、数据库、表函数和字典的密钥。

用户希望查看密钥还必须打开 format_display_secrets_in_show_and_select 格式设置 并具有 displaySecretsInShowAndSelect 权限。

可能的值

  • 0 — 禁用。
  • 1 — 启用。

distributed_cache_apply_throttling_settings_from_client

缓存服务器是否应应用从客户端收到的节流设置。

distributed_cache_keep_up_free_connections_ratio

分布式缓存将尝试保持空闲的活动连接数的软限制。当空闲连接数低于 distributed_cache_keep_up_free_connections_ratio * max_connections 时,最旧的活动连接将被关闭,直到数量高于限制。

distributed_ddl

管理在集群上执行 分布式 DDL 查询CREATEDROPALTERRENAME)。仅当启用 ZooKeeper 时才有效。

<distributed_ddl> 内的可配置设置包括

设置描述默认值
cleanup_delay_period如果上次清理时间早于 cleanup_delay_period 秒,则在新节点事件接收后开始清理。60
max_tasks_in_queue队列中可以拥有的最大任务数。1,000
pathKeeper 中 task_queue 的路径,用于 DDL 查询
pool_size可以同时运行多少个 ON CLUSTER 查询
profile用于执行 DDL 查询的配置文件
task_max_lifetime如果节点的年龄大于此值,则删除节点。7 * 24 * 60 * 60(以秒为单位的一周)

示例

<distributed_ddl>
    <!-- Path in ZooKeeper to queue with DDL queries -->
    <path>/clickhouse/task_queue/ddl</path>

    <!-- Settings from this profile will be used to execute DDL queries -->
    <profile>default</profile>

    <!-- Controls how much ON CLUSTER queries can be run simultaneously. -->
    <pool_size>1</pool_size>

    <!--
         Cleanup settings (active tasks will not be removed)
    -->

    <!-- Controls task TTL (default 1 week) -->
    <task_max_lifetime>604800</task_max_lifetime>

    <!-- Controls how often cleanup should be performed (in seconds) -->
    <cleanup_delay_period>60</cleanup_delay_period>

    <!-- Controls how many tasks could be in the queue -->
    <max_tasks_in_queue>1000</max_tasks_in_queue>
</distributed_ddl>

distributed_ddl.cleanup_delay_period

如果上次清理时间早于 <cleanup_delay_period> 秒,则在新节点事件接收后开始清理。

distributed_ddl.max_tasks_in_queue

队列中可以拥有的最大任务数。

distributed_ddl.path

Keeper 中 <task_queue> 的路径,用于 DDL 查询

distributed_ddl.pool_size

可以同时运行多少个 <ON CLUSTER> 查询

distributed_ddl.profile

用于执行 DDL 查询的配置文件

distributed_ddl.replicas_path

副本在 Keeper 中的 <task_queue> 路径

distributed_ddl.task_max_lifetime

如果节点的年龄大于此值,则删除节点。

distributed_ddl_use_initial_user_and_roles

如果启用,ON CLUSTER 查询将保留并使用发起者的用户和角色在远程分片上执行。 这确保了集群中的一致访问控制,但要求用户和角色存在于所有节点上。

dns_allow_resolve_names_to_ipv4

允许将名称解析为 ipv4 地址。

dns_allow_resolve_names_to_ipv6

允许将名称解析为 ipv6 地址。

dns_cache_max_entries

内部 DNS 缓存最大条目数。

dns_cache_update_period

内部 DNS 缓存更新周期,单位为秒。

dns_max_consecutive_failures

在连续失败次数达到此数量后,停止进一步尝试更新主机名的 DNS 缓存。 信息仍然保留在 DNS 缓存中。 零表示无限制。

参见

drop_distributed_cache_pool_size

用于清除分布式缓存的线程池大小。

drop_distributed_cache_queue_size

用于清除分布式缓存的线程池队列大小。

enable_azure_sdk_logging

启用 Azure sdk 的日志记录

encryption

配置一个命令来获取用于 加密编解码器 的密钥。 密钥(或密钥)应写入环境变量或设置在配置文件中。

密钥可以是十六进制或长度等于 16 字节的字符串。

示例

从配置文件加载

<encryption_codecs>
    <aes_128_gcm_siv>
        <key>1234567812345678</key>
    </aes_128_gcm_siv>
</encryption_codecs>
注意

不建议将密钥存储在配置文件中。 这不安全。 您可以将密钥移动到安全磁盘上的单独配置文件,并将指向该配置文件的符号链接放入 config.d/ 文件夹中。

从配置文件加载,当密钥是十六进制时

<encryption_codecs>
    <aes_128_gcm_siv>
        <key_hex>00112233445566778899aabbccddeeff</key_hex>
    </aes_128_gcm_siv>
</encryption_codecs>

从环境变量加载密钥

<encryption_codecs>
    <aes_128_gcm_siv>
        <key_hex from_env="ENVVAR"></key_hex>
    </aes_128_gcm_siv>
</encryption_codecs>

这里 current_key_id 设置用于加密的当前密钥,并且所有指定的密钥都可以用于解密。

这些方法中的每一个都可以应用于多个密钥

<encryption_codecs>
    <aes_128_gcm_siv>
        <key_hex id="0">00112233445566778899aabbccddeeff</key_hex>
        <key_hex id="1" from_env="ENVVAR"></key_hex>
        <current_key_id>1</current_key_id>
    </aes_128_gcm_siv>
</encryption_codecs>

这里 current_key_id 显示用于加密的当前密钥。

此外,用户可以添加必须为 12 字节长的 nonce(默认情况下,加密和解密过程使用由零字节组成的 nonce)

<encryption_codecs>
    <aes_128_gcm_siv>
        <nonce>012345678910</nonce>
    </aes_128_gcm_siv>
</encryption_codecs>

或者可以以十六进制形式设置

<encryption_codecs>
    <aes_128_gcm_siv>
        <nonce_hex>abcdefabcdef</nonce_hex>
    </aes_128_gcm_siv>
</encryption_codecs>
注意

以上所有内容都可以应用于 aes_256_gcm_siv(但密钥必须为 32 字节长)。

error_log

默认情况下已禁用。

启用

要手动启用错误历史记录收集 system.error_log,请创建 /etc/clickhouse-server/config.d/error_log.xml 并添加以下内容

<clickhouse>
    <error_log>
        <database>system</database>
        <table>error_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>
    </error_log>
</clickhouse>

禁用

要禁用 error_log 设置,您应该创建以下文件 /etc/clickhouse-server/config.d/disable_error_log.xml 并添加以下内容

<clickhouse>
    <error_log remove="1" />
</clickhouse>

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

filesystem_caches_path

此设置指定缓存路径。

示例

<filesystem_caches_path>/var/lib/clickhouse/filesystem_caches/</filesystem_caches_path>

format_parsing_thread_pool_queue_size

线程池中用于解析输入的作业的最大数量。

注意

值为 0 表示无限制。

format_schema_path

指向包含输入数据模式的目录的路径,例如 CapnProto 格式的模式。

示例

<!-- Directory containing schema files for various input formats. -->
<format_schema_path>/var/lib/clickhouse/format_schemas/</format_schema_path>

global_profiler_cpu_time_period_ns

全局分析器 CPU 时钟计时器的周期(纳秒)。 将值设置为 0 以关闭 CPU 时钟全局分析器。 对于单个查询,建议值为至少 10000000(每秒 100 次),对于集群范围的分析,建议值为 1000000000(每秒一次)。

global_profiler_real_time_period_ns

全局分析器实时时钟计时器的周期(纳秒)。 将值设置为 0 以关闭实时时钟全局分析器。 对于单个查询,建议值为至少 10000000(每秒 100 次),对于集群范围的分析,建议值为 1000000000(每秒一次)。

google_protos_path

定义包含 Protobuf 类型 proto 文件的目录。

示例

<google_protos_path>/usr/share/clickhouse/protos/</google_protos_path>

graphite

将数据发送到 Graphite

设置

  • host – Graphite 服务器。
  • port – Graphite 服务器上的端口。
  • interval – 发送间隔,单位为秒。
  • timeout – 发送数据超时时间,单位为秒。
  • root_path – 键的前缀。
  • metrics – 从 system.metrics 表发送数据。
  • events – 从 system.events 表发送在一段时间内累积的 delta 数据。
  • events_cumulative – 从 system.events 表发送累积数据。
  • asynchronous_metrics – 从 system.asynchronous_metrics 表发送数据。

您可以配置多个 <graphite> 子句。 例如,您可以使用它以不同的间隔发送不同的数据。

示例

<graphite>
    <host>localhost</host>
    <port>42000</port>
    <timeout>0.1</timeout>
    <interval>60</interval>
    <root_path>one_min</root_path>
    <metrics>true</metrics>
    <events>true</events>
    <events_cumulative>false</events_cumulative>
    <asynchronous_metrics>true</asynchronous_metrics>
</graphite>

graphite_rollup

用于稀释 Graphite 数据的设置。

有关详细信息,请参阅 GraphiteMergeTree

示例

<graphite_rollup_example>
    <default>
        <function>max</function>
        <retention>
            <age>0</age>
            <precision>60</precision>
        </retention>
        <retention>
            <age>3600</age>
            <precision>300</precision>
        </retention>
        <retention>
            <age>86400</age>
            <precision>3600</precision>
        </retention>
    </default>
</graphite_rollup_example>

hdfs.libhdfs3_conf

将 libhdfs3 指向其配置的正确位置。

hsts_max_age

HSTS 的过期时间,单位为秒。

注意

值为 0 表示 ClickHouse 禁用 HSTS。 如果您设置一个正数,则将启用 HSTS,并且 max-age 是您设置的数字。

示例

<hsts_max_age>600000</hsts_max_age>

http_connections_hard_limit

当达到此限制时,抛出异常。 设置为 0 以关闭硬限制。 该限制适用于不属于任何磁盘或存储的 http 连接。

http_connections_soft_limit

高于此限制的连接的生存时间明显较短。 该限制适用于不属于任何磁盘或存储的 http 连接。

http_connections_store_limit

高于此限制的连接在被使用后重置。 设置为 0 以关闭连接缓存。 该限制适用于不属于任何磁盘或存储的 http 连接。

http_connections_warn_limit

如果正在使用的连接数高于此限制,则会将警告消息写入日志。 该限制适用于不属于任何磁盘或存储的 http 连接。

http_handlers

允许使用自定义 HTTP 处理程序。 要添加新的 http 处理程序,只需添加一个新的 <rule>。 规则按定义的从上到下顺序检查,并且第一个匹配项将运行处理程序。

以下设置可以通过子标签进行配置

子标签定义
url要匹配请求 URL,可以使用“regex:”前缀使用正则表达式匹配(可选)
methods要匹配请求方法,可以使用逗号分隔多个方法匹配项(可选)
headers要匹配请求标头,匹配每个子元素(子元素名称是标头名称),可以使用“regex:”前缀使用正则表达式匹配(可选)
handler请求处理程序
empty_query_string检查 URL 中是否有查询字符串

handler 包含以下设置,可以通过子标签进行配置

子标签定义
url重定向的位置
类型支持的类型:static、dynamic_query_handler、predefined_query_handler、redirect
status与 static 类型一起使用,响应状态码
query_param_name与 dynamic_query_handler 类型一起使用,提取并执行 HTTP 请求参数中 <query_param_name> 对应的值
query与 predefined_query_handler 类型一起使用,在调用处理程序时执行查询
content_type与 static 类型一起使用,响应内容类型
response_content与 static 类型一起使用,发送给客户端的响应内容,当使用“file://”或“config://”前缀时,从文件或配置中查找内容并发送给客户端

除了规则列表之外,您还可以指定 <defaults/>,它指定启用所有默认处理程序。

示例

<http_handlers>
    <rule>
        <url>/</url>
        <methods>POST,GET</methods>
        <headers><pragma>no-cache</pragma></headers>
        <handler>
            <type>dynamic_query_handler</type>
            <query_param_name>query</query_param_name>
        </handler>
    </rule>

    <rule>
        <url>/predefined_query</url>
        <methods>POST,GET</methods>
        <handler>
            <type>predefined_query_handler</type>
            <query>SELECT * FROM system.settings</query>
        </handler>
    </rule>

    <rule>
        <handler>
            <type>static</type>
            <status>200</status>
            <content_type>text/plain; charset=UTF-8</content_type>
            <response_content>config://http_server_default_response</response_content>
        </handler>
    </rule>
</http_handlers>

http_options_response

用于向响应中添加标头,在 OPTIONS HTTP 请求中。OPTIONS 方法用于进行 CORS 预检请求。

有关更多信息,请参阅 OPTIONS

示例

<http_options_response>
     <header>
            <name>Access-Control-Allow-Origin</name>
            <value>*</value>
     </header>
     <header>
          <name>Access-Control-Allow-Headers</name>
          <value>origin, x-requested-with, x-clickhouse-format, x-clickhouse-user, x-clickhouse-key, Authorization</value>
     </header>
     <header>
          <name>Access-Control-Allow-Methods</name>
          <value>POST, GET, OPTIONS</value>
     </header>
     <header>
          <name>Access-Control-Max-Age</name>
          <value>86400</value>
     </header>
</http_options_response>

http_server_default_response

访问 ClickHouse HTTP(s) 服务器时显示的默认页面。默认值为 "Ok"(结尾带换行符)。

示例

访问 https://: http_port 时会打开 https://tabix.io/

<http_server_default_response>
  <![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]>
</http_server_default_response>

iceberg_catalog_threadpool_pool_size

Iceberg catalog 后台线程池的大小。

iceberg_catalog_threadpool_queue_size

可以推送到 Iceberg catalog 线程池的任务数量。

iceberg_metadata_files_cache_max_entries

Iceberg 元数据文件缓存的最大条目数。零表示禁用。

iceberg_metadata_files_cache_policy

Iceberg 元数据缓存策略名称。

iceberg_metadata_files_cache_size

Iceberg 元数据缓存的最大大小(以字节为单位)。零表示禁用。

iceberg_metadata_files_cache_size_ratio

在 Iceberg 元数据缓存中,受保护队列的大小(在 SLRU 策略的情况下),相对于缓存的总大小。

ignore_empty_sql_security_in_create_view_query

如果为 true,ClickHouse 不会在 CREATE VIEW 查询中为空的 SQL 安全语句写入默认值。

注意

此设置仅在迁移期间需要,并且将在 24.4 中弃用。

include_from

包含替换的文件路径。支持 XML 和 YAML 格式。

有关更多信息,请参阅 Configuration files 部分。

示例

<include_from>/etc/metrica.xml</include_from>

index_mark_cache_policy

二级索引标记缓存策略名称。

index_mark_cache_size

索引标记缓存的最大大小。

注意

值为 0 表示禁用。

此设置可以在运行时修改,并立即生效。

index_mark_cache_size_ratio

在二级索引标记缓存中,受保护队列的大小(在 SLRU 策略的情况下),相对于缓存的总大小。

index_uncompressed_cache_policy

二级索引未压缩缓存策略名称。

index_uncompressed_cache_size

MergeTree 索引未压缩块的缓存的最大大小。

注意

值为 0 表示禁用。

此设置可以在运行时修改,并立即生效。

index_uncompressed_cache_size_ratio

在二级索引未压缩缓存中,受保护队列的大小(在 SLRU 策略的情况下),相对于缓存的总大小。

insert_deduplication_version

此设置可以迁移到代码版本,该版本使同步和异步插入的插入去重完全不同且不透明的方式到代码版本,其中插入的数据将在同步和异步插入之间进行去重。默认值为 old_separate_hashes,这意味着 ClickHouse 将对同步和异步插入使用不同的去重哈希值(与之前相同)。应将此值用作默认值以保持向后兼容性。所有 Clickhouse 的现有实例都应使用此值以避免破坏性更改。值 compatible_double_hashes 表示 ClickHouse 将使用两个去重哈希值:旧的用于同步或异步插入,另一个用于所有插入。应使用此值以安全的方式迁移现有实例到新行为。应在此值启用一段时间(请参阅 replicated_deduplication_window 和 non_replicated_deduplication_window 设置),以确保迁移期间不会丢失任何同步或异步插入。最后,值 new_unified_hash 表示 ClickHouse 将对同步和异步插入使用新的去重哈希值。可以在新的 ClickHouse 实例上或已经使用 compatible_double_hashes 值一段时间的实例上启用此值。

interserver_http_credentials

用于在 复制 期间连接到其他服务器的用户名和密码。此外,服务器使用这些凭据验证其他副本。因此,集群中的所有副本都必须具有相同的 interserver_http_credentials

注意
  • 默认情况下,如果省略 interserver_http_credentials 部分,则复制期间不使用身份验证。
  • interserver_http_credentials 设置与 ClickHouse 客户端凭据 配置 无关。
  • 这些凭据对于通过 HTTPHTTPS 进行复制是通用的。

以下设置可以通过子标签进行配置

  • user — 用户名。
  • password — 密码。
  • allow_empty — 如果为 true,即使设置了凭据,其他副本也允许在没有身份验证的情况下连接。如果为 false,则拒绝没有身份验证的连接。默认值:false
  • old — 包含在凭据轮换期间使用的旧 userpassword。可以指定多个 old 部分。

凭据轮换

ClickHouse 支持动态服务器间凭据轮换,无需同时停止所有副本来更新其配置。可以分几个步骤更改凭据。

要启用身份验证,请将 interserver_http_credentials.allow_empty 设置为 true 并添加凭据。这允许使用身份验证和不使用身份验证的连接。

<interserver_http_credentials>
    <user>admin</user>
    <password>111</password>
    <allow_empty>true</allow_empty>
</interserver_http_credentials>

配置所有副本后,将 allow_empty 设置为 false 或删除此设置。这使得使用新凭据进行身份验证成为强制要求。

要更改现有凭据,请将用户名和密码移动到 interserver_http_credentials.old 部分,并使用新值更新 userpassword。此时,服务器使用新凭据连接到其他副本,并接受使用新凭据或旧凭据的连接。

<interserver_http_credentials>
    <user>admin</user>
    <password>222</password>
    <old>
        <user>admin</user>
        <password>111</password>
    </old>
    <old>
        <user>temp</user>
        <password>000</password>
    </old>
</interserver_http_credentials>

将新凭据应用于所有副本后,可以删除旧凭据。

interserver_http_host

其他服务器访问此服务器时可以使用的主机名。

如果省略,则以与 <hostname -f> 命令相同的方式定义。

用于从特定网络接口中断开连接。

示例

<interserver_http_host>example.clickhouse.com</interserver_http_host>

interserver_http_port

用于 ClickHouse 服务器之间交换数据的端口。

示例

<interserver_http_port>9009</interserver_http_port>

interserver_https_host

类似于 <interserver_http_host>,只不过可以使用此主机名通过 <HTTPS> 访问此服务器。

示例

<interserver_https_host>example.clickhouse.com</interserver_https_host>

interserver_https_port

用于 ClickHouse 服务器之间通过 <HTTPS> 交换数据的端口。

示例

<interserver_https_port>9010</interserver_https_port>

interserver_listen_host

限制可以交换 ClickHouse 服务器之间数据的宿主。如果使用 Keeper,则相同的限制将应用于不同 Keeper 实例之间的通信。

注意

默认情况下,该值等于 listen_host 设置。

示例

<interserver_listen_host>::ffff:a00:1</interserver_listen_host>
<interserver_listen_host>10.0.0.1</interserver_listen_host>

类型

默认值

io_thread_pool_queue_size

可以安排在 IO 线程池上执行的最大作业数。

注意

值为 0 表示无限制。

jemalloc_collect_global_profile_samples_in_trace_log

将 jemalloc 的采样分配存储在 system.trace_log 中

jemalloc_enable_background_threads

启用 jemalloc 后台线程。Jemalloc 使用后台线程来清理未使用的内存页。禁用它可能会导致性能下降。

jemalloc_enable_global_profiler

为所有线程启用 jemalloc 的分配分析器。Jemalloc 将对所有分配和采样分配的释放进行采样。可以使用 SYSTEM JEMALLOC FLUSH PROFILE 刷新配置文件,用于分配分析。也可以使用配置 jemalloc_collect_global_profile_samples_in_trace_log 或查询设置 jemalloc_collect_profile_samples_in_trace_log 将样本存储在 system.trace_log 中。请参阅 Allocation Profiling

jemalloc_flush_profile_interval_bytes

当全局峰值内存使用量增加 jemalloc_flush_profile_interval_bytes 时,将刷新 jemalloc 配置文件

jemalloc_flush_profile_on_memory_exceeded

在总内存超出错误时刷新 jemalloc 配置文件

jemalloc_max_background_threads_num

要创建的最大 jemalloc 后台线程数,设置为 0 以使用 jemalloc 的默认值

keep_alive_timeout

ClickHouse 在关闭 HTTP 协议连接之前等待传入请求的秒数。

示例

<keep_alive_timeout>10</keep_alive_timeout>

keeper_hosts

动态设置。包含 ClickHouse 可以潜在连接的一组 [Zoo]Keeper 主机。不公开来自 <auxiliary_zookeepers> 的信息

keeper_multiread_batch_size

支持批处理的 [Zoo]Keeper 的 MultiRead 请求的最大批处理大小。如果设置为 0,则禁用批处理。仅在 ClickHouse Cloud 中可用。

keeper_server.socket_receive_timeout_sec

Keeper socket 接收超时时间。

keeper_server.socket_send_timeout_sec

Keeper socket 发送超时时间(秒)。

ldap_servers

在此处列出 LDAP 服务器及其连接参数,以便

  • 将它们用作专用本地用户的身份验证器,这些用户指定了 'ldap' 身份验证机制,而不是 'password'
  • 将它们用作远程用户目录。

以下设置可以通过子标签进行配置

设置描述
bind_dn用于构造绑定 DN 的模板。在每次身份验证尝试期间,将模板中的所有 \{user_name\} 子字符串替换为实际用户名,以构造最终的 DN。
enable_tls标志,用于触发对 LDAP 服务器使用安全连接。指定 no 以使用明文 (ldap://) 协议(不推荐)。指定 yes 以使用 SSL/TLS 上的 LDAP (ldaps://) 协议(推荐,默认)。指定 starttls 以使用旧版 StartTLS 协议(明文 (ldap://) 协议,升级到 TLS)。
hostLDAP 服务器主机名或 IP,此参数是必需的,不能为空。
portLDAP 服务器端口,如果 enable_tls 设置为 true,则默认值为 636,否则为 389
tls_ca_cert_dir包含 CA 证书的目录的路径。
tls_ca_cert_fileCA 证书文件的路径。
tls_cert_file证书文件的路径。
tls_cipher_suite允许的密码套件(以 OpenSSL 格式)。
tls_key_file证书密钥文件的路径。
tls_minimum_protocol_versionSSL/TLS 的最低协议版本。允许的值为:ssl2ssl3tls1.0tls1.1tls1.2(默认)。
tls_require_certSSL/TLS 对等证书验证行为。允许的值为:neverallowtrydemand(默认)。
user_dn_detection用于检测绑定用户的实际用户 DN 的 LDAP 搜索参数部分。主要用于在服务器是 Active Directory 时进行进一步的角色映射的搜索过滤器中。结果用户 DN 将在允许使用 \{user_dn\} 子字符串的任何地方使用。默认情况下,用户 DN 等于绑定 DN,但一旦执行搜索,它将被更新为检测到的实际用户 DN 值。
verification_cooldown在成功的绑定尝试之后的一段时间(秒),在此期间,用户将被假定为已成功身份验证,无需联系 LDAP 服务器即可进行所有连续请求。指定 0(默认)以禁用缓存并强制每次身份验证请求都联系 LDAP 服务器。

可以配置 user_dn_detection 的子标签

设置描述
base_dn用于构造 LDAP 搜索的基础 DN 的模板。在 LDAP 搜索期间,将模板中的所有 \{user_name\} 和 '{bind_dn}' 子字符串替换为实际用户名和绑定 DN,以构造最终的 DN。
scopeLDAP 搜索的范围。允许的值为:baseone_levelchildrensubtree(默认)。
search_filter用于构造 LDAP 搜索的搜索过滤器的模板。在 LDAP 搜索期间,将模板中的所有 \{user_name\}\{bind_dn\}\{base_dn\} 子字符串替换为实际用户名、绑定 DN 和基础 DN,以构造最终的过滤器。请注意,特殊字符必须在 XML 中正确转义。

示例

<my_ldap_server>
    <host>localhost</host>
    <port>636</port>
    <bind_dn>uid={user_name},ou=users,dc=example,dc=com</bind_dn>
    <verification_cooldown>300</verification_cooldown>
    <enable_tls>yes</enable_tls>
    <tls_minimum_protocol_version>tls1.2</tls_minimum_protocol_version>
    <tls_require_cert>demand</tls_require_cert>
    <tls_cert_file>/path/to/tls_cert_file</tls_cert_file>
    <tls_key_file>/path/to/tls_key_file</tls_key_file>
    <tls_ca_cert_file>/path/to/tls_ca_cert_file</tls_ca_cert_file>
    <tls_ca_cert_dir>/path/to/tls_ca_cert_dir</tls_ca_cert_dir>
    <tls_cipher_suite>ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384</tls_cipher_suite>
</my_ldap_server>

示例(配置了用户 DN 检测以进行进一步角色映射的典型 Active Directory)

<my_ad_server>
    <host>localhost</host>
    <port>389</port>
    <bind_dn>EXAMPLE\{user_name}</bind_dn>
    <user_dn_detection>
        <base_dn>CN=Users,DC=example,DC=com</base_dn>
        <search_filter>(&amp;(objectClass=user)(sAMAccountName={user_name}))</search_filter>
    </user_dn_detection>
    <enable_tls>no</enable_tls>
</my_ad_server>

license_file

ClickHouse 企业版的许可证文件内容

license_public_key_for_testing

许可演示密钥,仅供 CI 使用

listen_backlog

侦听套接字的积压(待处理连接的队列大小)。默认值 <4096> 与 linux 5.4+ 相同)。

通常不需要更改此值,因为

  • 默认值足够大,
  • 服务器有单独的线程来接受客户端连接。

因此,即使您有 <TcpExtListenOverflows>(来自 <nstat>)非零且此计数器针对 ClickHouse 服务器增长,也不意味着需要增加此值,因为

  • 通常,如果 <4096> 不够,则表明存在一些内部 ClickHouse 扩展问题,因此最好报告问题。
  • 这并不意味着服务器以后可以处理更多的连接(即使它可以,客户端可能已经消失或断开连接)。

示例

<listen_backlog>4096</listen_backlog>

listen_host

限制请求可以来自的主机。如果希望服务器响应所有请求,请指定 ::

示例

<listen_host>::1</listen_host>
<listen_host>127.0.0.1</listen_host>

listen_reuse_port

允许多个服务器侦听同一地址:端口请求将由操作系统路由到随机服务器。不建议启用此设置。

示例

<listen_reuse_port>0</listen_reuse_port>

listen_try

如果尝试侦听时 IPv6 或 IPv4 网络不可用,服务器将不会退出。

示例

<listen_try>0</listen_try>

load_marks_threadpool_pool_size

用于标记加载的后台池大小

load_marks_threadpool_queue_size

可以推送到预取池的任务数量

logger

日志消息的位置和格式。

:

描述
async当为 true(默认)时,日志记录将异步进行(每个输出通道一个后台线程)。否则,它将在调用 LOG 的线程内记录。
async_queue_max_size使用异步日志记录时,保存在队列中等待刷新的最大消息数。超出此数量的消息将被丢弃
console启用控制台日志记录。设置为 1true 以启用。默认情况下,如果 ClickHouse 未以守护程序模式运行,则为 1,否则为 0
console_log_level控制台输出的日志级别。默认为 level
console_shutdown_log_level关机级别用于在服务器关机时设置控制台日志级别。
console_startup_log_level启动级别用于在服务器启动时设置控制台日志级别。启动后,日志级别将恢复为 console_log_level 设置
count轮换策略:ClickHouse 保留的最大历史日志文件数量。
errorlog错误日志文件的路径。
formatting.type控制台输出的日志格式。目前仅支持 json
level日志级别。允许的值:none(关闭日志记录)、fatalcriticalerrorwarningnoticeinformationdebugtracetest
log日志文件的路径。
rotation轮换策略:控制何时轮换日志文件。轮换可以基于大小、时间或两者的组合。示例:100M、daily、100M,daily。当日志文件超过指定大小或达到指定时间间隔时,它将被重命名并归档,并创建一个新的日志文件。
shutdown_level关机级别用于在服务器关机时设置根日志记录器级别。
size轮换策略:日志文件的最大大小(以字节为单位)。当日志文件大小超过此阈值时,它将被重命名并归档,并创建一个新的日志文件。
startup_level启动级别用于在服务器启动时设置根日志记录器级别。启动后,日志级别将恢复为 level 设置
stream_compress使用 LZ4 压缩日志消息。设置为 1true 以启用。
syslog_level将日志记录到 syslog 的日志级别。
use_syslog还将日志输出转发到 syslog。

日志格式说明符

logerrorLog 路径中的文件名支持以下格式说明符,用于生成的文件名(目录部分不支持它们)。

“示例”列显示了在 2023-07-06 18:32:07 时的输出。

说明符描述示例
%%文字 %%
%n换行符
%t水平制表符
%Y年份,以十进制数表示,例如 20172023
%y年份的最后两位数字,以十进制数表示(范围 [00,99])23
%C年份的前两位数字,以十进制数表示(范围 [00,99])20
%G四位 ISO 8601 周数年份,即包含指定周的年份。通常仅与 %V 一起使用2023
%g包含指定周的 ISO 8601 周数年份的最后两位数字。23
%b缩写的月份名称,例如 Oct(取决于语言环境)Jul
%h%b 的同义词Jul
%B完整的月份名称,例如 October(取决于语言环境)July
%m月份,以十进制数表示(范围 [01,12])07
%U一年中的周数,以十进制数表示(星期日是每周的第一天)(范围 [00,53])27
%W一年中的周数,以十进制数表示(星期一是每周的第一天)(范围 [00,53])27
%VISO 8601 周数(范围 [01,53])27
%j一年中的天数,以十进制数表示(范围 [001,366])187
%d月份中的天数,以零填充的十进制数表示(范围 [01,31])。个位数前面有零。06
%e月份中的天数,以空格填充的十进制数表示(范围 [1,31])。个位数前面有空格。&nbsp; 6
%a缩写的星期几名称,例如 Fri(取决于语言环境)Thu
%A完整的星期几名称,例如 Friday(取决于语言环境)Thursday
%w星期几,以整数表示,星期日为 0(范围 [0-6])4
%u星期几,以十进制数表示,星期一为 1(ISO 8601 格式)(范围 [1-7])4
%H小时,以十进制数表示,24 小时制(范围 [00-23])18
%I小时,以十进制数表示,12 小时制(范围 [01,12])06
%M分钟,以十进制数表示(范围 [00,59])32
%S秒,以十进制数表示(范围 [00,60])07
%c标准的日期和时间字符串,例如 Sun Oct 17 04:41:13 2010(取决于语言环境)Thu Jul 6 18:32:07 2023
%x本地化的日期表示形式(取决于语言环境)07/06/23
%X本地化的时间表示形式,例如 18:40:20 或 6:40:20 PM(取决于语言环境)18:32:07
%D简短的 MM/DD/YY 日期,等效于 %m/%d/%y07/06/23
%F简短的 YYYY-MM-DD 日期,等效于 %Y-%m-%d2023-07-06
%r本地化的 12 小时制时间(取决于语言环境)06:32:07 PM
%R相当于 "%H:%M"18:32
%T相当于 "%H:%M:%S" (ISO 8601 时间格式)18:32:07
%p本地化的上午或下午指示 (取决于区域设置)下午
%z与 UTC 的偏移量,采用 ISO 8601 格式 (例如 -0430),或者如果没有时区信息,则不显示任何字符+0800
%Z取决于区域设置的时区名称或缩写,或者如果没有时区信息,则不显示任何字符Z AWST

示例

<logger>
    <level>trace</level>
    <log>/var/log/clickhouse-server/clickhouse-server-%F-%T.log</log>
    <errorlog>/var/log/clickhouse-server/clickhouse-server-%F-%T.err.log</errorlog>
    <size>1000M</size>
    <count>10</count>
    <stream_compress>true</stream_compress>
</logger>

仅在控制台打印日志消息

<logger>
    <level>information</level>
    <console>true</console>
</logger>

按级别覆盖

可以覆盖单个日志名称的日志级别。例如,要禁用 "Backup" 和 "RBAC" 日志记录器的所有消息。

<logger>
    <levels>
        <logger>
            <name>Backup</name>
            <level>none</level>
        </logger>
        <logger>
            <name>RBAC</name>
            <level>none</level>
        </logger>
    </levels>
</logger>

syslog

将日志消息额外写入 syslog

<logger>
    <use_syslog>1</use_syslog>
    <syslog>
        <address>syslog.remote:10514</address>
        <hostname>myhost.local</hostname>
        <facility>LOG_LOCAL6</facility>
        <format>syslog</format>
    </syslog>
</logger>

<syslog> 的键

描述
地址syslog 的地址,格式为 host\[:port\]。如果省略,则使用本地守护进程。
主机名日志发送主机的名称 (可选)。
facilitysyslog facility 关键字。必须以大写形式指定,并带有 "LOG_" 前缀,例如 LOG_USERLOG_DAEMONLOG_LOCAL3 等。默认值:如果指定了 address,则为 LOG_USER;否则为 LOG_DAEMON
format日志消息格式。可能的值:bsdsyslog.

日志格式

您可以指定将在控制台日志中输出的日志格式。目前仅支持 JSON。

示例

这是一个输出 JSON 日志的示例

{
  "date_time_utc": "2024-11-06T09:06:09Z",
  "date_time": "1650918987.180175",
  "thread_name": "#1",
  "thread_id": "254545",
  "level": "Trace",
  "query_id": "",
  "logger_name": "BaseDaemon",
  "message": "Received signal 2",
  "source_file": "../base/daemon/BaseDaemon.cpp; virtual void SignalListener::run()",
  "source_line": "192"
}

要启用 JSON 日志记录支持,请使用以下代码片段

<logger>
    <formatting>
        <type>json</type>
        <!-- Can be configured on a per-channel basis (log, errorlog, console, syslog), or globally for all channels (then just omit it). -->
        <!-- <channel></channel> -->
        <names>
            <date_time>date_time</date_time>
            <thread_name>thread_name</thread_name>
            <thread_id>thread_id</thread_id>
            <level>level</level>
            <query_id>query_id</query_id>
            <logger_name>logger_name</logger_name>
            <message>message</message>
            <source_file>source_file</source_file>
            <source_line>source_line</source_line>
        </names>
    </formatting>
</logger>

JSON 日志的键重命名

可以通过更改 <names> 标签内的标签值来修改键名称。例如,要将 DATE_TIME 更改为 MY_DATE_TIME,可以使用 <date_time>MY_DATE_TIME</date_time>

JSON 日志的键省略

可以通过注释掉属性来省略日志属性。例如,如果您不希望日志打印 query_id,可以注释掉 <query_id> 标签。

logger.async

<true> (默认值) 时,日志记录将异步进行 (每个输出通道一个后台线程)。否则,它将在调用 LOG 的线程内记录。

logger.async_queye_max_size

使用异步日志记录时,队列中将保留的最大消息数量,等待刷新。超出消息将被丢弃。

logger.console

启用控制台日志记录。设置为 <1><true> 以启用。默认值为,如果 ClickHouse 未以守护进程模式运行,则为 <1>;否则为 <0>

logger.console_log_level

控制台输出的日志级别。默认为 <level>

logger.count

轮换策略:ClickHouse 保留的最大历史日志文件数量。

logger.errorlog

错误日志文件的路径。

logger.formatting.type

控制台输出的日志格式。目前仅支持 <json>

logger.level

日志级别。可接受的值:<none> (关闭日志记录)、<fatal><critical><error><warning><notice><information><debug><trace><test>

logger.log

日志文件的路径。

logger.rotation

轮换策略:控制何时轮换日志文件。轮换可以基于大小、时间或两者的组合。示例:100M、daily、100M,daily。当日志文件超过指定大小或达到指定时间间隔时,它将被重命名并归档,并创建一个新的日志文件。

logger.shutdown_level

关机级别用于在服务器关机时设置根日志记录器级别。

logger.size

轮换策略:日志文件的最大大小(以字节为单位)。当日志文件大小超过此阈值时,它将被重命名并归档,并创建一个新的日志文件。

logger.startup_level

启动级别用于在服务器启动时设置根日志记录器级别。启动后,日志级别将恢复为 <level> 设置。

logger.stream_compress

使用 LZ4 压缩日志消息。设置为 <1><true> 以启用。

logger.syslog_level

将日志记录到 syslog 的日志级别。

logger.use_syslog

还将日志输出转发到 syslog。

macros

复制表的参数替换。

如果未使用复制表,则可以省略。

有关更多信息,请参阅章节 创建复制表

示例

<macros incl="macros" optional="true" />

mark_cache_policy

标记缓存策略名称。

mark_cache_prewarm_ratio

预热期间填充的标记缓存总大小的比例。

mark_cache_size

标记缓存(MergeTree 系列表的索引)的最大大小。

注意

此设置可以在运行时修改,并立即生效。

mark_cache_size_ratio

标记缓存中受保护队列的大小(在 SLRU 策略的情况下),相对于缓存的总大小。

max_active_parts_loading_thread_pool_size

用于加载活动数据集部分(活动部分)的线程数,在服务器启动时。

max_authentication_methods_per_user

可以创建或修改的用户身份验证方法的最大数量。更改此设置不会影响现有用户。超出此设置限制的创建/修改身份验证相关查询将失败。非身份验证的创建/修改查询将成功。

注意

值为 0 表示无限制。

max_backup_bandwidth_for_server

服务器上所有备份的最大读取速度,以字节/秒为单位。零表示无限制。

max_backups_io_thread_pool_free_size

如果备份 IO 线程池中的 空闲 线程数超过 max_backup_io_thread_pool_free_size,ClickHouse 将释放空闲线程占用的资源并减小池的大小。如果需要,可以创建线程。

max_backups_io_thread_pool_size

ClickHouse 使用备份 IO 线程池中的线程来执行 S3 备份 IO 操作。max_backups_io_thread_pool_size 限制池中的最大线程数。

max_build_vector_similarity_index_thread_pool_size

用于构建向量索引的最大线程数。

注意

值为 0 表示所有核心。

max_concurrent_insert_queries

限制并发插入查询的总数。

注意

值为 0(默认值)表示无限制。

此设置可以在运行时修改,并立即生效。正在运行的查询将保持不变。

max_concurrent_queries

限制并发执行查询的总数。请注意,必须同时考虑 INSERTSELECT 查询的限制,以及用户查询的最大数量限制。

参见

注意

值为 0(默认值)表示无限制。

此设置可以在运行时修改,并立即生效。正在运行的查询将保持不变。

max_concurrent_select_queries

限制并发选择查询的总数。

注意

值为 0(默认值)表示无限制。

此设置可以在运行时修改,并立即生效。正在运行的查询将保持不变。

max_connections

服务器最大连接数。

max_database_num_to_throw

如果数据库数量大于此值,服务器将抛出异常。0 表示无限制。

max_database_num_to_warn

如果附加的数据库数量超过指定值,clickhouse 服务器会将警告消息添加到 system.warnings 表中。

示例

<max_database_num_to_warn>50</max_database_num_to_warn>

max_database_replicated_create_table_thread_pool_size

在 DatabaseReplicated 中,副本恢复期间创建表的线程数。 零表示线程数等于核心数。

max_dictionary_num_to_throw

如果字典的数量大于此值,服务器将抛出异常。

仅计算数据库引擎的表

  • Atomic
  • 普通
  • Replicated
  • 延迟
注意

值为 0 表示没有限制。

示例

<max_dictionary_num_to_throw>400</max_dictionary_num_to_throw>

max_dictionary_num_to_warn

如果附加的字典数量超过指定值,ClickHouse 服务器会将警告消息添加到 system.warnings 表中。

示例

<max_dictionary_num_to_warn>400</max_dictionary_num_to_warn>

max_distributed_cache_read_bandwidth_for_server

服务器从分布式缓存读取数据的最大总速度,单位为字节/秒。 零表示无限制。

max_distributed_cache_write_bandwidth_for_server

服务器向分布式缓存写入数据的最大总速度,单位为字节/秒。 零表示无限制。

max_entries_for_hash_table_stats

聚合期间允许哈希表统计信息收集的条目数量

max_fetch_partition_thread_pool_size

ALTER TABLE FETCH PARTITION 的线程数。

max_format_parsing_thread_pool_free_size

线程池中用于解析输入的空闲待命线程的最大数量。

max_format_parsing_thread_pool_size

用于解析输入的最大线程总数。

max_io_thread_pool_free_size

如果 IO 线程池中的 空闲 线程数超过 max_io_thread_pool_free_size,ClickHouse 将释放空闲线程占用的资源并减小池的大小。 如果需要,可以再次创建线程。

max_io_thread_pool_size

ClickHouse 使用 IO 线程池中的线程来执行一些 IO 操作(例如与 S3 交互)。 max_io_thread_pool_size 限制池中的最大线程数。

max_keep_alive_requests

ClickHouse 服务器关闭单个 keep-alive 连接之前,通过该连接的最大请求数。

示例

<max_keep_alive_requests>10</max_keep_alive_requests>

max_local_read_bandwidth_for_server

本地读取的最大速度,单位为字节/秒。

注意

值为 0 表示无限制。

max_local_write_bandwidth_for_server

本地写入的最大速度,单位为字节/秒。

注意

值为 0 表示无限制。

max_materialized_views_count_for_table

附加到表的物化视图数量的限制。

注意

此处仅考虑直接依赖的视图,一个视图之上创建另一个视图的情况不考虑。

max_merges_bandwidth_for_server

服务器上所有合并读取数据的最大速度,单位为字节/秒。 零表示无限制。

max_mutations_bandwidth_for_server

服务器上所有变更读取数据的最大速度,单位为字节/秒。 零表示无限制。

max_named_collection_num_to_throw

如果命名集合的数量大于此值,服务器将抛出异常。

注意

值为 0 表示没有限制。

示例

<max_named_collection_num_to_throw>400</max_named_collection_num_to_throw>

max_named_collection_num_to_warn

如果命名集合的数量超过指定值,ClickHouse 服务器会将警告消息添加到 system.warnings 表中。

示例

<max_named_collection_num_to_warn>400</max_named_collection_num_to_warn>

max_open_files

允许打开的最大文件数。

注意

我们建议在 macOS 中使用此选项,因为 getrlimit() 函数返回不正确的值。

max_os_cpu_wait_time_ratio_to_drop_connection

将 OS CPU 等待时间(OSCPUWaitMicroseconds 指标)与繁忙时间(OSCPUVirtualTimeMicroseconds 指标)的比率考虑为丢弃连接的最大比例。 使用 min 和 max 比例之间的线性插值来计算概率,在此点概率为 1。 有关更多详细信息,请参阅 服务器 CPU 过载时的行为控制

max_outdated_parts_loading_thread_pool_size

启动时加载不活动数据集部分(过时部分)的线程数。

max_part_num_to_warn

如果活动部分数量超过指定值,ClickHouse 服务器会将警告消息添加到 system.warnings 表中。

示例

<max_part_num_to_warn>400</max_part_num_to_warn>

max_partition_size_to_drop

删除分区时的限制。

如果 MergeTree 表的大小超过 max_partition_size_to_drop(以字节为单位),则无法使用 DROP PARTITION 查询删除分区。 此设置不需要重启 ClickHouse 服务器即可应用。 禁用限制的另一种方法是在 <clickhouse-path>/flags/force_drop_table 文件中创建。

注意

值为 0 表示可以无限制地删除分区。

此限制不限制 drop table 和 truncate table,请参阅 max_table_size_to_drop

示例

<max_partition_size_to_drop>0</max_partition_size_to_drop>

max_parts_cleaning_thread_pool_size

并发删除不活动数据部分的线程数。

max_pending_mutations_execution_time_to_warn

如果任何待处理的变更超过指定秒数,ClickHouse 服务器会将警告消息添加到 system.warnings 表中。

示例

<max_pending_mutations_execution_time_to_warn>10000</max_pending_mutations_execution_time_to_warn>

max_pending_mutations_to_warn

如果待处理的变更数量超过指定值,ClickHouse 服务器会将警告消息添加到 system.warnings 表中。

示例

<max_pending_mutations_to_warn>400</max_pending_mutations_to_warn>

max_prefixes_deserialization_thread_pool_free_size

如果前缀反序列化线程池中的 空闲 线程数超过 max_prefixes_deserialization_thread_pool_free_size,ClickHouse 将释放空闲线程占用的资源并减小池的大小。 如果需要,可以再次创建线程。

max_prefixes_deserialization_thread_pool_size

ClickHouse 使用前缀反序列化线程池中的线程并行读取 MergeTree 中 Wide 部分的文件前缀中的列和子列的元数据。 max_prefixes_deserialization_thread_pool_size 限制池中的最大线程数。

max_remote_read_network_bandwidth_for_server

读取数据时,服务器上网络数据交换的最大速度,单位为字节/秒。

注意

值为 0(默认值)表示无限制。

max_remote_write_network_bandwidth_for_server

写入数据时,服务器上网络数据交换的最大速度,单位为字节/秒。

注意

值为 0(默认值)表示无限制。

max_replicated_fetches_network_bandwidth_for_server

复制获取数据时,服务器上网络数据交换的最大速度,单位为字节/秒。 零表示无限制。

max_replicated_sends_network_bandwidth_for_server

复制发送数据时,服务器上网络数据交换的最大速度,单位为字节/秒。 零表示无限制。

max_replicated_table_num_to_throw

如果复制表的数量大于此值,服务器将抛出异常。

仅计算数据库引擎的表

  • Atomic
  • 普通
  • Replicated
  • 延迟
注意

值为 0 表示没有限制。

示例

<max_replicated_table_num_to_throw>400</max_replicated_table_num_to_throw>

max_server_memory_usage

服务器允许使用的最大内存量,以字节为单位。

注意

服务器的最大内存消耗进一步受到 max_server_memory_usage_to_ram_ratio 的限制。

作为特例,值为 0(默认值)表示服务器可以使用所有可用内存(排除 max_server_memory_usage_to_ram_ratio 施加的进一步限制)。

max_server_memory_usage_to_ram_ratio

服务器允许使用的最大内存量,表示为所有可用内存的比例。

例如,值为 0.9(默认值)表示服务器可以使用 90% 的可用内存。

允许在低内存系统上降低内存使用量。在 RAM 和交换空间较少的服务器上,您可能需要将 max_server_memory_usage_to_ram_ratio 设置为大于 1。

注意

服务器的最大内存消耗通过设置 max_server_memory_usage 进一步限制。

max_session_timeout

会话超时时间,以秒为单位。

示例

<max_session_timeout>3600</max_session_timeout>

max_table_num_to_throw

如果表数量大于此值,服务器将抛出异常。

以下表不计入统计

  • view
  • remote
  • dictionary
  • system

仅计算数据库引擎的表

  • Atomic
  • 普通
  • Replicated
  • 延迟
注意

值为 0 表示没有限制。

示例

<max_table_num_to_throw>400</max_table_num_to_throw>

max_table_num_to_warn

如果附加的表数量超过指定值,ClickHouse 服务器会将警告消息添加到 system.warnings 表中。

示例

<max_table_num_to_warn>400</max_table_num_to_warn>

max_table_size_to_drop

删除表的限制。

如果 MergeTree 表的大小超过 max_table_size_to_drop(以字节为单位),则无法使用 DROP 查询或 TRUNCATE 查询删除它。

注意

值为 0 表示您可以删除所有表,没有任何限制。

此设置不需要重启 ClickHouse 服务器即可生效。禁用限制的另一种方法是在 <clickhouse-path>/flags/force_drop_table 文件中创建文件。

示例

<max_table_size_to_drop>0</max_table_size_to_drop>

max_temporary_data_on_disk_size

外部聚合、连接或排序可以使用的最大存储量。超过此限制的查询将因异常而失败。

注意

值为 0 表示无限制。

参见

max_thread_pool_free_size

如果全局线程池中的**空闲**线程数大于 max_thread_pool_free_size,则 ClickHouse 会释放一些线程占用的资源,并减少池的大小。如果需要,可以再次创建线程。

示例

<max_thread_pool_free_size>1200</max_thread_pool_free_size>

max_thread_pool_size

ClickHouse 使用全局线程池中的线程来处理查询。如果没有空闲线程来处理查询,则会在池中创建一个新线程。max_thread_pool_size 限制池中线程的最大数量。

示例

<max_thread_pool_size>12000</max_thread_pool_size>

max_unexpected_parts_loading_thread_pool_size

在启动时加载非活动数据集分片(意外分片)的线程数。

max_view_num_to_throw

如果视图数量大于此值,服务器将抛出异常。

仅计算数据库引擎的表

  • Atomic
  • 普通
  • Replicated
  • 延迟
注意

值为 0 表示没有限制。

示例

<max_view_num_to_throw>400</max_view_num_to_throw>

max_view_num_to_warn

如果附加的视图数量超过指定值,ClickHouse 服务器会将警告消息添加到 system.warnings 表中。

示例

<max_view_num_to_warn>400</max_view_num_to_warn>

max_waiting_queries

并发等待查询总数的限制。等待查询的执行被阻塞,直到所需的表异步加载完成(参见 async_load_databases)。

注意

在检查以下设置控制的限制时,不计算等待查询

进行此更正是为了避免在服务器启动后立即达到这些限制。

注意

值为 0(默认值)表示无限制。

此设置可以在运行时修改,并立即生效。正在运行的查询将保持不变。

memory_worker_correct_memory_tracker

后台内存 worker 是否应根据来自外部来源(如 jemalloc 和 cgroups)的信息来校正内部内存跟踪器。

memory_worker_decay_adjustment_period_ms

内存压力必须持续多长时间(以毫秒为单位),才能动态调整 jemalloc 的 dirty_decay_ms。当内存使用量持续高于清除阈值时,将禁用自动脏页衰减(dirty_decay_ms=0)以积极回收内存。当使用量持续低于阈值时,将恢复默认衰减行为。设置为 0 以禁用动态调整并使用 jemalloc 的默认衰减设置。

memory_worker_period_ms

后台内存 worker 的滴答周期,它会校正内存跟踪器的内存使用量并在内存使用量较高时清理未使用的页面。如果设置为 0,则默认值将取决于内存使用源。

memory_worker_purge_dirty_pages_threshold_ratio

jemalloc 脏页相对于 ClickHouse 服务器可用内存的阈值比率。当脏页大小超过此比率时,后台内存 worker 会强制清除脏页。如果设置为 0,则将禁用基于脏页比率的强制清除。

memory_worker_purge_total_memory_threshold_ratio

相对于 ClickHouse 服务器可用内存的 jemalloc 清除阈值比率。当总内存使用量超过此比率时,后台内存 worker 会强制清除脏页。如果设置为 0,则将禁用基于总内存的强制清除。

memory_worker_use_cgroup

使用当前的 cgroup 内存使用信息来校正内存跟踪。

merge_tree

针对 MergeTree 中的表的微调。

有关更多信息,请参阅 MergeTreeSettings.h 头文件。

示例

<merge_tree>
    <max_suspicious_broken_parts>5</max_suspicious_broken_parts>
</merge_tree>

merge_workload

用于调节资源如何在合并和其他工作负载之间利用和共享。指定的值用作所有后台合并的 workload 设置值。可以被合并树设置覆盖。

参见

merges_mutations_memory_usage_soft_limit

设置执行合并和变异操作允许使用的 RAM 量上限。如果 ClickHouse 达到限制,它将不会安排新的后台合并或变异操作,但将继续执行已安排的任务。

注意

值为 0 表示无限制。

示例

<merges_mutations_memory_usage_soft_limit>0</merges_mutations_memory_usage_soft_limit>

merges_mutations_memory_usage_to_ram_ratio

默认的 merges_mutations_memory_usage_soft_limit 值计算为 memory_amount * merges_mutations_memory_usage_to_ram_ratio

参见

metric_log

默认情况下已禁用。

启用

要手动启用指标历史记录收集 system.metric_log,请在 /etc/clickhouse-server/config.d/metric_log.xml 中创建以下内容

<clickhouse>
    <metric_log>
        <database>system</database>
        <table>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>
    </metric_log>
</clickhouse>

禁用

要禁用 metric_log 设置,应在以下文件中创建文件 /etc/clickhouse-server/config.d/disable_metric_log.xml,内容如下

<clickhouse>
    <metric_log remove="1" />
</clickhouse>

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

min_os_cpu_wait_time_ratio_to_drop_connection

认为应该断开连接的操作系统 CPU 等待时间(OSCPUWaitMicroseconds 指标)与繁忙时间(OSCPUVirtualTimeMicroseconds 指标)的比率最小值。使用最小值和最大比率之间的线性插值来计算概率,此时概率为 0。有关详细信息,请参阅 服务器 CPU 过载时的行为控制

mlock_executable

在启动后执行 <mlockall>,以降低首次查询的延迟,并防止 ClickHouse 可执行文件在 IO 负载较高时被换出。

注意

建议启用此选项,但会导致启动时间增加最多几秒钟。请记住,如果没有“CAP_IPC_LOCK”功能,此设置将无法工作。

示例

<mlock_executable>false</mlock_executable>

mlock_executable_min_total_memory_amount_bytes

执行 <mlockall> 的最小内存阈值

mmap_cache_size

此设置允许避免频繁的 open/close 调用(由于随之而来的页面错误而非常昂贵),并从多个线程和查询中重用映射。设置值是映射区域的数量(通常等于映射文件的数量)。

可以使用以下系统表中的以下指标来监视映射文件中数据的量

注意

映射文件中数据的量不会直接消耗内存,也不会计入查询或服务器的内存使用量——因为这部分内存可以像操作系统页面缓存一样被丢弃。在 MergeTree 系列表的旧部分删除时,缓存会被自动释放(文件会被关闭),也可以通过 SYSTEM DROP MMAP CACHE 查询手动释放。

此设置可以在运行时修改,并立即生效。

mutation_workload

用于调节变异(mutations)和其他工作负载之间的资源利用和共享。指定的值将用作所有后台变异的 workload 设置值。可以被合并树设置覆盖。

参见

mysql_port

通过 MySQL 协议与客户端通信的端口。

注意
  • 正整数指定要监听的端口号
  • 空值用于禁用通过 MySQL 协议与客户端的通信。

示例

<mysql_port>9004</mysql_port>

mysql_require_secure_transport

如果设置为 true,则需要通过 mysql_port 与客户端进行安全通信。带有选项 <--ssl-mode=none> 的连接将被拒绝。与 OpenSSL 设置一起使用。

oom_score

在 Linux 系统上,这可以控制 OOM killer 的行为。

openSSL

SSL 客户端/服务器配置。

SSL 的支持由 libpoco 库提供。可用的配置选项在 SSLManager.h 中解释。默认值可以在 SSLManager.cpp 中找到。

服务器/客户端设置的键

选项描述默认值
cacheSessions启用或禁用会话缓存。必须与 sessionIdContext 结合使用。可接受的值:truefalsefalse
caConfig包含受信任 CA 证书的文件或目录的路径。如果指向文件,则必须是 PEM 格式,并且可以包含多个 CA 证书。如果指向目录,则必须包含每个 CA 证书一个 .pem 文件。文件名通过 CA 主题名称哈希值查找。详细信息请参阅 SSL_CTX_load_verify_locations 的手册页。
certificateFilePEM 格式的客户端/服务器证书文件的路径。如果 privateKeyFile 包含证书,则可以省略它。
cipherList支持的 OpenSSL 加密算法。ALL:!ADH:!LOW:!EXP:!MD5:!3DES:@STRENGTH
disableProtocols不允许使用的协议。
extendedVerification如果启用,则验证证书 CN 或 SAN 是否与对等主机名匹配。false
fips激活 OpenSSL FIPS 模式。如果库的 OpenSSL 版本支持 FIPS,则支持。false
invalidCertificateHandler用于验证无效证书的类(CertificateHandler 的子类)。例如:<invalidCertificateHandler> <name>RejectCertificateHandler</name> </invalidCertificateHandler>RejectCertificateHandler
loadDefaultCAFile是否使用 OpenSSL 的内置 CA 证书。ClickHouse 假定内置 CA 证书位于文件 /etc/ssl/cert.pem(或目录 /etc/ssl/certs)或由环境变量 SSL_CERT_FILE(或 SSL_CERT_DIR)指定的 文件(或目录)中。true
preferServerCiphers客户端首选的服务器加密算法。false
privateKeyFile包含 PEM 证书私钥的文件路径。该文件可以同时包含密钥和证书。
privateKeyPassphraseHandler请求访问私钥的密码短语的类(PrivateKeyPassphraseHandler 子类)。例如:<privateKeyPassphraseHandler>, <name>KeyFileHandler</name>, <options><password>test</password></options>, </privateKeyPassphraseHandler>KeyConsoleHandler
requireTLSv1需要 TLSv1 连接。可接受的值:truefalsefalse
requireTLSv1_1需要 TLSv1.1 连接。可接受的值:truefalsefalse
requireTLSv1_2需要 TLSv1.2 连接。可接受的值:truefalsefalse
sessionCacheSize服务器缓存的最大会话数。值为 0 表示无限会话。1024*20
sessionIdContext服务器为每个生成的标识符附加的唯一随机字符集。字符串的长度不得超过 SSL_MAX_SSL_SESSION_ID_LENGTH。始终建议使用此参数,因为它有助于避免服务器缓存会话或客户端请求缓存时出现问题。$\{application.name\}
sessionTimeout服务器上缓存会话的时间(小时)。2
verificationDepth验证链的最大长度。如果证书链长度超过设置值,则验证将失败。9
verificationMode检查节点证书的方法。详细信息请参阅 Context 类的描述。可能的值:nonerelaxedstrictoncerelaxed

设置示例

<openSSL>
    <server>
        <!-- openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt -->
        <certificateFile>/etc/clickhouse-server/server.crt</certificateFile>
        <privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile>
        <!-- openssl dhparam -out /etc/clickhouse-server/dhparam.pem 4096 -->
        <dhParamsFile>/etc/clickhouse-server/dhparam.pem</dhParamsFile>
        <verificationMode>none</verificationMode>
        <loadDefaultCAFile>true</loadDefaultCAFile>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
    </server>
    <client>
        <loadDefaultCAFile>true</loadDefaultCAFile>
        <cacheSessions>true</cacheSessions>
        <disableProtocols>sslv2,sslv3</disableProtocols>
        <preferServerCiphers>true</preferServerCiphers>
        <!-- Use for self-signed: <verificationMode>none</verificationMode> -->
        <invalidCertificateHandler>
            <!-- Use for self-signed: <name>AcceptCertificateHandler</name> -->
            <name>RejectCertificateHandler</name>
        </invalidCertificateHandler>
    </client>
</openSSL>

openSSL.client.caConfig

包含受信任 CA 证书的文件或目录的路径。如果指向文件,则必须是 PEM 格式,并且可以包含多个 CA 证书。如果指向目录,则必须包含每个 CA 证书一个 .pem 文件。文件名通过 CA 主题名称哈希值查找。详细信息请参阅 SSL_CTX_load_verify_locations 的手册页。

openSSL.client.cacheSessions

启用或禁用会话缓存。必须与 sessionIdContext 结合使用。可接受的值:truefalse

openSSL.client.certificateFile

PEM 格式的客户端/服务器证书文件的路径。如果 privateKeyFile 包含证书,则可以省略它。

openSSL.client.cipherList

支持的 OpenSSL 加密算法。

openSSL.client.disableProtocols

不允许使用的协议。

openSSL.client.extendedVerification

如果启用,则验证证书 CN 或 SAN 是否与对等主机名匹配。

openSSL.client.fips

激活 OpenSSL FIPS 模式。如果库的 OpenSSL 版本支持 FIPS,则支持。

openSSL.client.invalidCertificateHandler.name

用于验证无效证书的类(CertificateHandler 的子类)。例如:<invalidCertificateHandler> <name>RejectCertificateHandler</name> </invalidCertificateHandler>

openSSL.client.loadDefaultCAFile

确定是否使用 OpenSSL 的内置 CA 证书。ClickHouse 假定内置 CA 证书位于文件 /etc/ssl/cert.pem(或目录 /etc/ssl/certs)或由环境变量 SSL_CERT_FILE(或 SSL_CERT_DIR)指定的文件(或目录)中。

openSSL.client.preferServerCiphers

客户端首选的服务器加密算法。

openSSL.client.privateKeyFile

包含 PEM 证书私钥的文件路径。该文件可以同时包含密钥和证书。

openSSL.client.privateKeyPassphraseHandler.name

请求访问私钥的密码短语的类(PrivateKeyPassphraseHandler 子类)。例如:<privateKeyPassphraseHandler>, <name>KeyFileHandler</name>, <options><password>test</password></options>, </privateKeyPassphraseHandler>

openSSL.client.requireTLSv1

需要 TLSv1 连接。可接受的值:truefalse

openSSL.client.requireTLSv1_1

需要 TLSv1.1 连接。可接受的值:truefalse

openSSL.client.requireTLSv1_2

需要 TLSv1.2 连接。可接受的值:truefalse

openSSL.client.verificationDepth

验证链的最大长度。如果证书链长度超过设置值,则验证将失败。

openSSL.client.verificationMode

检查节点证书的方法。详细信息请参阅 Context 类的描述。可能的值:nonerelaxedstrictonce

openSSL.server.caConfig

包含受信任 CA 证书的文件或目录的路径。如果指向文件,则必须是 PEM 格式,并且可以包含多个 CA 证书。如果指向目录,则必须包含每个 CA 证书一个 .pem 文件。文件名通过 CA 主题名称哈希值查找。详细信息请参阅 SSL_CTX_load_verify_locations 的手册页。

openSSL.server.cacheSessions

启用或禁用会话缓存。必须与 sessionIdContext 结合使用。可接受的值:truefalse

openSSL.server.certificateFile

PEM 格式的客户端/服务器证书文件的路径。如果 privateKeyFile 包含证书,则可以省略它。

openSSL.server.cipherList

支持的 OpenSSL 加密算法。

openSSL.server.disableProtocols

不允许使用的协议。

openSSL.server.extendedVerification

如果启用,则验证证书 CN 或 SAN 是否与对等主机名匹配。

openSSL.server.fips

激活 OpenSSL FIPS 模式。如果库的 OpenSSL 版本支持 FIPS,则支持。

openSSL.server.invalidCertificateHandler.name

用于验证无效证书的类(CertificateHandler 的子类)。例如:<invalidCertificateHandler> <name>RejectCertificateHandler</name> </invalidCertificateHandler>

openSSL.server.loadDefaultCAFile

确定是否使用 OpenSSL 的内置 CA 证书。ClickHouse 假定内置 CA 证书位于文件 /etc/ssl/cert.pem(或目录 /etc/ssl/certs)或由环境变量 SSL_CERT_FILE(或 SSL_CERT_DIR)指定的文件(或目录)中。

openSSL.server.preferServerCiphers

客户端首选的服务器加密算法。

openSSL.server.privateKeyFile

包含 PEM 证书私钥的文件路径。该文件可以同时包含密钥和证书。

openSSL.server.privateKeyPassphraseHandler.name

请求访问私钥的密码短语的类(PrivateKeyPassphraseHandler 子类)。例如:<privateKeyPassphraseHandler>, <name>KeyFileHandler</name>, <options><password>test</password></options>, </privateKeyPassphraseHandler>

openSSL.server.requireTLSv1

需要 TLSv1 连接。可接受的值:truefalse

openSSL.server.requireTLSv1_1

需要 TLSv1.1 连接。可接受的值:truefalse

openSSL.server.requireTLSv1_2

需要 TLSv1.2 连接。可接受的值:truefalse

openSSL.server.sessionCacheSize

服务器缓存的最大会话数。值为 0 表示无限会话数。

openSSL.server.sessionIdContext

服务器为每个生成的标识符附加的唯一随机字符集。字符串的长度不得超过 <SSL_MAX_SSL_SESSION_ID_LENGTH>。始终建议设置此参数,因为它有助于避免服务器缓存会话和客户端请求缓存时出现的问题。

openSSL.server.sessionTimeout

服务器上缓存会话的时间(小时)。

openSSL.server.verificationDepth

验证链的最大长度。如果证书链长度超过设置值,则验证将失败。

openSSL.server.verificationMode

检查节点证书的方法。详细信息请参阅 Context 类的描述。可能的值:nonerelaxedstrictonce

opentelemetry_span_log

关于 opentelemetry_span_log 系统表的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

示例

<opentelemetry_span_log>
    <engine>
        engine MergeTree
        partition by toYYYYMM(finish_date)
        order by (finish_date, finish_time_us, trace_id)
    </engine>
    <database>system</database>
    <table>opentelemetry_span_log</table>
    <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>
</opentelemetry_span_log>

os_collect_psi_metrics

启用从 /proc/pressure/ 文件收集 PSI 指标。

os_cpu_busy_time_threshold

OS CPU 繁忙时间阈值(以微秒为单位,OSCPUVirtualTimeMicroseconds 指标),用于认为 CPU 正在执行一些有用的工作。如果繁忙时间低于此值,则不会认为存在 CPU 过载。

os_threads_nice_value_distributed_cache_tcp_handler

分布式缓存 TCP 处理程序线程的 Linux nice 值。较低的值意味着更高的 CPU 优先级。

需要 CAP_SYS_NICE 权限,否则不执行任何操作。

可能的值:-20 到 19。

os_threads_nice_value_merge_mutate

合并和变异线程的 Linux nice 值。较低的值意味着更高的 CPU 优先级。

需要 CAP_SYS_NICE 权限,否则不执行任何操作。

可能的值:-20 到 19。

os_threads_nice_value_zookeeper_client_send_receive

ZooKeeper 客户端发送和接收线程的 Linux nice 值。较低的值意味着更高的 CPU 优先级。

需要 CAP_SYS_NICE 权限,否则不执行任何操作。

可能的值:-20 到 19。

page_cache_free_memory_ratio

要从用户空间页面缓存中保留的内存限制的比例。类似于 Linux min_free_kbytes 设置。

page_cache_history_window_ms

释放内存后,用户空间页面缓存可以使用的延迟时间。

page_cache_max_size

用户空间页面缓存的最大大小。设置为 0 可禁用缓存。如果大于 page_cache_min_size,则缓存大小将在此范围内持续调整,以使用大部分可用内存,同时将总内存使用量保持在限制 (max_server_memory_usage[_to_ram_ratio]) 以下。

page_cache_min_size

用户空间页面缓存的最小大小。

page_cache_policy

用户空间页面缓存策略名称。

page_cache_shards

将用户空间页面缓存划分为多个分片,以减少互斥锁争用。实验性,不太可能提高性能。

page_cache_size_ratio

用户空间页面缓存中受保护队列的大小与缓存总大小的比率。

part_log

MergeTree 关联的日志事件。例如,添加或合并数据。您可以使用日志来模拟合并算法并比较它们的特征。您可以可视化合并过程。

查询记录在 system.part_log 系统表中,而不是单独的文件中。您可以在 table 参数中配置此表的名称(如下所示)。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

示例

<part_log>
    <database>system</database>
    <table>part_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>
</part_log>

parts_kill_delay_period

SharedMergeTree 中完全删除部件的周期。仅在 ClickHouse Cloud 中可用

parts_kill_delay_period_random_add

向 kill_delay_period 添加均匀分布的值,范围为 0 到 x 秒,以避免雷群效应和随之而来的 ZooKeeper 的 DoS 攻击,以防有大量表。仅在 ClickHouse Cloud 中可用

parts_killer_pool_size

用于清理共享合并树部件 killer 线程的线程池大小。仅在 ClickHouse Cloud 中可用

path

包含数据的目录的路径。

注意

尾部斜杠是必需的。

示例

<path>/var/lib/clickhouse/</path>

postgresql_port

通过 PostgreSQL 协议与客户端通信的端口。

注意
  • 正整数指定要监听的端口号
  • 空值用于禁用通过 PostgreSQL 协议与客户端的通信。

示例

<postgresql_port>9005</postgresql_port>

postgresql_require_secure_transport

如果设置为 true,则需要通过 postgresql_port 与客户端进行安全通信。拒绝带有选项 <sslmode=disable> 的连接。与 OpenSSL 设置一起使用。

prefetch_threadpool_pool_size

用于远程对象存储预取的后台池的大小

prefetch_threadpool_queue_size

可以推送到预取池的任务数量

prefixes_deserialization_thread_pool_thread_pool_queue_size

前缀反序列化线程池中可以安排的最大作业数。

注意

值为 0 表示无限制。

prepare_system_log_tables_on_startup

如果为 true,ClickHouse 会在启动前创建所有配置的 system.*_log 表。如果某些启动脚本依赖于这些表,则可能很有帮助。

primary_index_cache_policy

主索引缓存策略名称。

primary_index_cache_prewarm_ratio

预热期间填充的标记缓存总大小的比例。

primary_index_cache_size

主索引(MergeTree 系列表的索引)缓存的最大大小。

primary_index_cache_size_ratio

在主索引缓存中,受保护队列的大小与缓存总大小的比率(在 SLRU 策略的情况下)。

process_query_plan_packet

此设置允许读取 QueryPlan 数据包。当启用 serialize_query_plan 时,此数据包会发送用于分布式查询。默认情况下禁用,以避免查询计划二进制反序列化中的错误可能导致的潜在安全问题。

示例

<process_query_plan_packet>true</process_query_plan_packet>

processors_profile_log

关于 processors_profile_log 系统表的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

默认设置是

<processors_profile_log>
    <database>system</database>
    <table>processors_profile_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>
</processors_profile_log>

prometheus

公开用于从 Prometheus 抓取的指标数据。

设置

  • endpoint – prometheus 服务器抓取指标的 HTTP 端点。从 '/' 开始。
  • portendpoint 的端口。
  • metrics – 公开来自 system.metrics 表的指标。
  • events – 公开来自 system.events 表的指标。
  • asynchronous_metrics – 暴露来自 system.asynchronous_metrics 表的当前指标值。
  • errors - 暴露自服务器上次重启以来按错误码发生的错误数量。这些信息也可以从 system.errors 获取。

示例

<clickhouse>
    <listen_host>0.0.0.0</listen_host>
    <http_port>8123</http_port>
    <tcp_port>9000</tcp_port>
    <!-- highlight-start -->
    <prometheus>
        <endpoint>/metrics</endpoint>
        <port>9363</port>
        <metrics>true</metrics>
        <events>true</events>
        <asynchronous_metrics>true</asynchronous_metrics>
        <errors>true</errors>
    </prometheus>
    <!-- highlight-end -->
</clickhouse>

检查 (将 127.0.0.1 替换为您的 ClickHouse 服务器的 IP 地址或主机名)

curl 127.0.0.1:9363/metrics

prometheus.keeper_metrics_only

暴露 keeper 相关的指标

proxy

为 HTTP 和 HTTPS 请求定义代理服务器,目前受 S3 存储、S3 表函数和 URL 函数支持。

定义代理服务器有三种方法

  • 环境变量
  • 代理列表
  • 远程代理解析器。

使用 no_proxy 也可以支持为特定主机绕过代理服务器。

环境变量

http_proxyhttps_proxy 环境变量允许您为给定的协议指定代理服务器。如果您的系统上已设置,它应该可以无缝工作。

如果给定协议只有一个代理服务器且该代理服务器不更改,这是最简单的方法。

代理列表

这种方法允许您为协议指定一个或多个代理服务器。如果定义了多个代理服务器,ClickHouse 会以轮询方式使用不同的代理,在服务器之间平衡负载。如果协议有多个代理服务器且代理服务器列表不更改,这是最简单的方法。

配置模板

<proxy>
    <http>
        <uri>http://proxy1</uri>
        <uri>http://proxy2:3128</uri>
    </http>
    <https>
        <uri>http://proxy1:3128</uri>
    </https>
</proxy>

选择下方选项卡中的父字段以查看其子项

字段描述
<http>一个或多个 HTTP 代理的列表
<https>一个或多个 HTTPS 代理的列表

远程代理解析器

代理服务器可能会动态更改。在这种情况下,您可以定义解析器的端点。ClickHouse 会向该端点发送一个空的 GET 请求,远程解析器应返回代理主机。ClickHouse 将使用它来使用以下模板形成代理 URI:\{proxy_scheme\}://\{proxy_host\}:{proxy_port}

配置模板

<proxy>
    <http>
        <resolver>
            <endpoint>http://resolver:8080/hostname</endpoint>
            <proxy_scheme>http</proxy_scheme>
            <proxy_port>80</proxy_port>
            <proxy_cache_time>10</proxy_cache_time>
        </resolver>
    </http>

    <https>
        <resolver>
            <endpoint>http://resolver:8080/hostname</endpoint>
            <proxy_scheme>http</proxy_scheme>
            <proxy_port>3128</proxy_port>
            <proxy_cache_time>10</proxy_cache_time>
        </resolver>
    </https>

</proxy>

选择下方选项卡中的父字段以查看其子项

字段描述
<http>一个或多个解析器的列表*
<https>一个或多个解析器的列表*

优先级

代理设置的确定顺序如下

顺序设置
1.远程代理解析器
2.代理列表
3.环境变量

ClickHouse 将检查请求协议的最高优先级解析器类型。如果未定义,它将检查下一个最高优先级解析器类型,直到到达环境解析器。这也可以允许使用混合的解析器类型。

query_cache

查询缓存配置。

可用的设置如下

设置描述默认值
max_entries缓存中存储的 SELECT 查询结果的最大数量。1024
max_entry_size_in_bytesSELECT 查询结果在缓存中可能拥有的最大大小(字节)。1048576
max_entry_size_in_rowsSELECT 查询结果在缓存中可能拥有的最大行数。30000000
max_size_in_bytes最大缓存大小(字节)。0 表示禁用查询缓存。1073741824
注意
  • 更改的设置会立即生效。
  • 查询缓存的数据分配在 DRAM 中。如果内存不足,请确保为 max_size_in_bytes 设置一个较小的值,或者完全禁用查询缓存。

示例

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

query_cache.max_entries

缓存中存储的 SELECT 查询结果的最大数量。

query_cache.max_entry_size_in_bytes

SELECT 查询结果在缓存中可能拥有的最大大小(字节)。

query_cache.max_entry_size_in_rows

SELECT 查询结果在缓存中可能拥有的最大行数。

query_cache.max_size_in_bytes

最大缓存大小(字节)。0 表示禁用查询缓存。

query_condition_cache_policy

查询条件缓存策略名称。

query_condition_cache_size

查询条件缓存的最大大小。

注意

此设置可以在运行时修改,并立即生效。

query_condition_cache_size_ratio

在查询条件缓存中相对于缓存总大小的受保护队列的大小(在 SLRU 策略的情况下)。

query_log

设置用于记录使用 log_queries=1 设置接收到的查询。

查询记录在 system.query_log 表中,而不是单独的文件中。您可以在 table 参数中更改表名(如下所示)。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

如果表不存在,ClickHouse 将创建它。如果 ClickHouse 服务器更新时查询日志的结构发生更改,则旧结构的表将被重命名,并自动创建一个新表。

示例

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

query_masking_rules

基于正则表达式的规则,将在存储到服务器日志、system.query_logsystem.text_logsystem.processes 表以及发送到客户端的日志之前应用于查询以及所有日志消息。这可以防止敏感数据(例如姓名、电子邮件、个人标识符或信用卡号码)从 SQL 查询泄漏到日志中。

示例

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

配置字段:

设置描述
name规则的名称(可选)
regexpRE2 兼容的正则表达式(必需)
replace敏感数据的替换字符串(可选,默认情况下为六个星号)

掩码规则应用于整个查询(以防止从格式错误/不可解析的查询中泄漏敏感数据)。

system.events 表具有计数器 QueryMaskingRulesMatch,其中包含查询掩码规则匹配的总体数量。

对于分布式查询,每个服务器必须单独配置,否则,传递到其他节点的子查询将未经掩码存储。

query_metric_log

默认情况下已禁用。

启用

要手动启用指标历史记录收集 system.query_metric_log,请在 /etc/clickhouse-server/config.d/query_metric_log.xml 中创建以下内容

<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 中创建以下内容

<clickhouse>
    <query_metric_log remove="1" />
</clickhouse>

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

query_thread_log

设置用于记录使用 log_query_threads=1 设置接收到的查询的线程。

查询记录在 system.query_thread_log 表中,而不是单独的文件中。您可以在 table 参数中更改表名(如下所示)。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

如果表不存在,ClickHouse 将创建它。如果 ClickHouse 服务器更新时查询线程日志的结构发生更改,则旧结构的表将被重命名,并自动创建一个新表。

示例

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

query_views_log

设置用于记录依赖于使用 log_query_views=1 设置接收到的视图(实时、物化等)。

查询记录在 system.query_views_log 表中,而不是单独的文件中。您可以在 table 参数中更改表名(如下所示)。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

如果表不存在,ClickHouse 将创建它。如果 ClickHouse 服务器更新时查询视图日志的结构发生更改,则旧结构的表将被重命名,并自动创建一个新表。

示例

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

remap_executable

设置使用大页重新分配机器代码(“文本”)内存。

注意

此功能高度实验性。

示例

<remap_executable>false</remap_executable>

remote_servers

用于分布式表引擎和 `cluster` 表函数的集群配置。

示例

<remote_servers incl="clickhouse_remote_servers" />

关于 `incl` 属性的值,请参阅“配置文件”章节。

参见

remote_url_allow_hosts

允许在 URL 相关存储引擎和表函数中使用的主机列表。

在使用 `<host>` xml 标签添加主机时

  • 应精确地按照 URL 中的形式指定主机名,因为在 DNS 解析之前会检查主机名。例如:<host>clickhouse.com</host>
  • 如果 URL 中明确指定了端口,则会检查整个主机:端口例如:<host>clickhouse.com:80</host>
  • 如果主机名没有指定端口,则允许该主机名的任何端口。例如:如果指定了 <host>clickhouse.com</host>,则允许 clickhouse.com:20 (FTP)、clickhouse.com:80 (HTTP)、clickhouse.com:443 (HTTPS) 等。
  • 如果主机名指定为 IP 地址,则会按照 URL 中指定的方式进行检查。例如:[2a02:6b8:a::a]
  • 如果有重定向并且启用了重定向支持,则会检查每个重定向(location 字段)。

例如

<remote_url_allow_hosts>
    <host>clickhouse.com</host>
</remote_url_allow_hosts>

replica_group_name

复制数据库的副本组名称。

由复制数据库创建的集群将由同一组中的副本组成。DDL 查询将仅等待同一组中的副本。

默认情况下为空。

示例

<replica_group_name>backups</replica_group_name>

replicated_fetches_http_connection_timeout

用于获取分片请求的 HTTP 连接超时时间。如果没有显式设置,则从默认配置 http_connection_timeout 继承。

replicated_fetches_http_receive_timeout

用于获取分片请求的 HTTP 接收超时时间。如果没有显式设置,则从默认配置 http_receive_timeout 继承。

replicated_fetches_http_send_timeout

用于获取分片请求的 HTTP 发送超时时间。如果没有显式设置,则从默认配置 http_send_timeout 继承。

replicated_merge_tree

ReplicatedMergeTree 表的微调。此设置具有更高的优先级。

有关更多信息,请参阅 MergeTreeSettings.h 头文件。

示例

<replicated_merge_tree>
    <max_suspicious_broken_parts>5</max_suspicious_broken_parts>
</replicated_merge_tree>

restore_threads

执行 RESTORE 请求的最大线程数。

s3_credentials_provider_max_cache_size

可以缓存的最大 S3 凭证提供程序数量

s3_max_redirects

允许的最大 S3 重定向跳转次数。

s3_retry_attempts

用于 Aws::Client::RetryStrategy 的设置,Aws::Client 会自行重试,0 表示不重试

s3queue_disable_streaming

即使表已创建并且附加了物化视图,也禁用 S3Queue 中的流式传输。

s3queue_log

用于 `s3queue_log` 系统表的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

默认设置是

<s3queue_log>
    <database>system</database>
    <table>s3queue_log</table>
    <partition_by>toYYYYMM(event_date)</partition_by>
    <flush_interval_milliseconds>7500</flush_interval_milliseconds>
</s3queue_log>

send_crash_reports

用于将崩溃报告发送给 ClickHouse 核心开发团队的设置。

在预生产环境中启用它将不胜感激。

描述
enabled启用此功能的布尔标志,默认值为 `true`。设置为 `false` 以避免发送崩溃报告。
端点您可以覆盖发送崩溃报告的端点 URL。
send_logical_errorsLOGICAL_ERROR 类似于 `assert`,是 ClickHouse 中的一个错误。此布尔标志启用发送此异常(默认值:true)。

推荐用法

<send_crash_reports>
    <enabled>true</enabled>
</send_crash_reports>

series_keeper_path

Keeper 中带有自动递增数字的路径,由 `generateSerialID` 函数生成。每个系列都将是此路径下的一个节点。

show_addresses_in_stack_traces

如果设置为 true,将在堆栈跟踪中显示地址

shutdown_wait_backups_and_restores

如果设置为 true,ClickHouse 将在关闭之前等待正在运行的备份和恢复完成。

shutdown_wait_unfinished

等待未完成查询的秒数延迟

shutdown_wait_unfinished_queries

如果设置为 true,ClickHouse 将在关闭之前等待正在运行的查询完成。

skip_binary_checksum_checks

跳过 ClickHouse 二进制校验和完整性检查

skip_check_for_incorrect_settings

如果设置为 true,服务器设置将不会被检查是否正确。

示例

<skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>

snapshot_cleaner_period

完全删除 SharedMergeTree 的快照分片的周期。仅在 ClickHouse Cloud 中可用

snapshot_cleaner_pool_size

用于清理共享合并树快照清理线程的线程数。仅在 ClickHouse Cloud 中可用

ssh_server

主机密钥的公共部分将在首次连接时写入 SSH 客户端侧的 known_hosts 文件。

主机密钥配置默认情况下处于非活动状态。取消注释主机密钥配置,并提供相应的 ssh 密钥的路径以激活它们

示例

<ssh_server>
    <host_rsa_key>path_to_the_ssh_key</host_rsa_key>
    <host_ecdsa_key>path_to_the_ssh_key</host_ecdsa_key>
    <host_ed25519_key>path_to_the_ssh_key</host_ed25519_key>
</ssh_server>

startup_mv_delay_ms

调试参数,用于模拟物化视图创建延迟

startup_scripts.throw_on_error

如果设置为 true,如果在脚本执行过程中发生错误,服务器将不会启动。

storage_configuration

允许存储的多磁盘配置。

存储配置遵循以下结构

<storage_configuration>
    <disks>
        <!-- configuration -->
    </disks>
    <policies>
        <!-- configuration -->
    </policies>
</storage_configuration>

磁盘配置

以下是 `disks` 配置的结构

<storage_configuration>
    <disks>
        <disk_name_1>
            <path>/mnt/fast_ssd/clickhouse/</path>
        </disk_name_1>
        <disk_name_2>
            <path>/mnt/hdd1/clickhouse/</path>
            <keep_free_space_bytes>10485760</keep_free_space_bytes>
        </disk_name_2>
        <disk_name_3>
            <path>/mnt/hdd2/clickhouse/</path>
            <keep_free_space_bytes>10485760</keep_free_space_bytes>
        </disk_name_3>
        ...
    </disks>
</storage_configuration>

上述子标签定义了 `disks` 的以下设置

设置描述
<disk_name_N>磁盘的名称,应唯一。
path服务器数据将存储到的路径(datashadow 目录)。它应以 / 结尾
keep_free_space_bytes磁盘上保留的可用空闲空间大小。
注意

磁盘的顺序无关紧要。

策略配置

上述子标签定义了 `policies` 的以下设置

设置描述
policy_name_N策略的名称。策略名称必须唯一。
volume_name_N卷的名称。卷的名称必须唯一。
disk位于卷内的磁盘。
max_data_part_size_bytes可以驻留在该卷上任何磁盘中的数据块的最大大小。如果合并导致预计的数据块大小大于 max_data_part_size_bytes,则该数据块将被写入下一个卷。基本上,此功能允许您将新的/小的数据块存储在热(SSD)卷上,并在它们达到较大尺寸时将它们移动到冷(HDD)卷上。如果策略只有一个卷,请不要使用此选项。
move_factor卷上可用空闲空间的份额。如果空间减少,数据将开始传输到下一个卷(如果有)。对于传输,数据块按大小从大到小(降序)排序,并选择总大小足以满足 move_factor 条件的数据块,如果所有数据块的总大小不足,则将移动所有数据块。
perform_ttl_move_on_insert禁用在插入时移动具有已过期 TTL 的数据。默认情况下(如果启用),如果插入的数据块根据移动生命周期规则已经过期,则它将立即移动到规则中指定的卷/磁盘。如果目标卷/磁盘速度较慢(例如 S3),这可能会显著降低插入速度。如果禁用,已过期的部分数据将被写入默认卷,然后立即移动到规则中指定的卷中。
load_balancing磁盘平衡策略,round_robinleast_used
least_used_ttl_ms设置更新所有磁盘上可用空间(0 - 始终更新,-1 - 从不更新,默认值为 60000)的超时时间(以毫秒为单位)。请注意,如果磁盘仅由 ClickHouse 使用并且不会受到文件系统动态调整大小的影响,则可以使用 -1 值。在所有其他情况下,不建议这样做,因为它最终会导致不正确的空间分配。
prefer_not_to_merge禁用此卷上数据块的合并。注意:这可能有害并可能导致速度变慢。当此设置启用时(不要这样做),禁止在此卷上合并数据(这很糟糕)。这允许控制 ClickHouse 与慢速磁盘的交互方式。我们不建议完全使用它。
volume_priority定义填充卷的优先级(顺序)。值越小,优先级越高。参数值必须是自然数,并且覆盖从 1 到 N 的范围(N 是指定的最大参数值),且没有间隙。

对于 volume_priority

  • 如果所有卷都具有此参数,则它们将按照指定的顺序进行优先级排序。
  • 如果只有部分卷具有此特性,则不具有此特性的卷将具有最低优先级。具有此特性的卷将根据标签值进行优先级排序,其余卷的优先级将根据配置文件中彼此的描述顺序确定。
  • 如果未向任何卷提供此参数,则它们的顺序将根据配置文件中描述的顺序确定。
  • 卷的优先级可能不相同。

storage_connections_hard_limit

当达到此限制时,创建尝试将抛出异常。设置为 0 以关闭硬限制。该限制适用于存储连接。

storage_connections_soft_limit

超过此限制的连接的生存时间将显著缩短。该限制适用于存储连接。

storage_connections_store_limit

超过此限制的连接在使用后将被重置。设置为 0 以关闭连接缓存。该限制适用于存储连接。

storage_connections_warn_limit

如果正在使用的连接数超过此限制,则会将警告消息写入日志。该限制适用于存储连接。

storage_metadata_write_full_object_key

以 VERSION_FULL_OBJECT_KEY 格式写入磁盘元数据文件。默认情况下启用。此设置已被弃用。

storage_shared_set_join_use_inner_uuid

如果启用,则在创建 SharedSet 和 SharedJoin 时会生成内部 UUID。仅适用于 ClickHouse Cloud

table_engines_require_grant

如果设置为 true,用户需要授权才能使用特定引擎创建表,例如 GRANT TABLE ENGINE ON TinyLog to user

注意

默认情况下,为了向后兼容,使用特定表引擎创建表会忽略授权,但是您可以将此值设置为 true 来更改此行为。

tables_loader_background_pool_size

设置在后台池中执行异步加载作业的线程数。如果有很多表,建议保持后台池中的线程数较低。这将为并发查询执行保留 CPU 资源。后台池用于在服务器启动后异步加载表,而没有查询正在等待该表。

注意

值为 0 表示将使用所有可用的 CPU。

tables_loader_foreground_pool_size

设置在前景池中执行加载作业的线程数。前景池用于在服务器开始监听端口之前同步加载表,以及用于加载正在等待的表。前景池比后台池具有更高的优先级。这意味着在前景池中运行作业时,后台池中不会启动任何作业。

注意

值为 0 表示将使用所有可用的 CPU。

tcp_close_connection_after_queries_num

在关闭连接之前,每个 TCP 连接允许的最大查询数。设置为 0 以允许无限数量的查询。

tcp_close_connection_after_queries_seconds

在关闭连接之前,TCP 连接的最大生存时间(秒)。设置为 0 以允许无限的连接生存时间。

tcp_port

通过 TCP 协议与客户端通信的端口。

示例

<tcp_port>9000</tcp_port>

tcp_port_secure

与客户端安全通信的 TCP 端口。与 OpenSSL 设置一起使用。

默认值

<tcp_port_secure>9440</tcp_port_secure>

tcp_ssh_port

SSH 服务器的端口,允许用户通过 PTY 使用嵌入式客户端以交互方式连接和执行查询。

示例

<tcp_ssh_port>9022</tcp_ssh_port>

temporary_data_in_cache

使用此选项,临时数据将存储在特定磁盘的缓存中。在此部分中,应指定具有类型 cache 的磁盘名称。在这种情况下,缓存和临时数据将共享相同的空间,并且可以驱逐磁盘缓存以创建临时数据。

注意

只能使用一个选项来配置临时数据存储:tmp_pathtmp_policytemporary_data_in_cache

示例

local_disk 的缓存和临时数据都将存储在文件系统上的 /tiny_local_cache 中,由 tiny_local_cache 管理。

<clickhouse>
<storage_configuration>
<disks>
<local_disk>
<type>local</type>
<path>/local_disk/</path>
</local_disk>

<!-- highlight-start -->
<tiny_local_cache>
<type>cache</type>
<disk>local_disk</disk>
<path>/tiny_local_cache/</path>
<max_size_rows>10M</max_size_rows>
<max_file_segment_size>1M</max_file_segment_size>
<cache_on_write_operations>1</cache_on_write_operations>
</tiny_local_cache>
<!-- highlight-end -->
</disks>
</storage_configuration>

<!-- highlight-start -->
<temporary_data_in_cache>tiny_local_cache</temporary_data_in_cache>
<!-- highlight-end -->
</clickhouse>

temporary_data_in_distributed_cache

将临时数据存储在分布式缓存中。

text_index_dictionary_block_cache_max_entries

文本索引字典块缓存的大小(以条目为单位)。零表示禁用。

text_index_dictionary_block_cache_policy

文本索引字典块缓存策略名称。

text_index_dictionary_block_cache_size

文本索引字典块缓存的大小。零表示禁用。

注意

此设置可以在运行时修改,并立即生效。

text_index_dictionary_block_cache_size_ratio

在文本索引字典块缓存中,相对于缓存总大小的受保护队列的大小(在 SLRU 策略的情况下)。

text_index_header_cache_max_entries

文本索引头缓存的大小(以条目为单位)。零表示禁用。

text_index_header_cache_policy

文本索引头缓存策略名称。

text_index_header_cache_size

文本索引头缓存的大小。零表示禁用。

注意

此设置可以在运行时修改,并立即生效。

text_index_header_cache_size_ratio

在文本索引头缓存中,相对于缓存总大小的受保护队列的大小(在 SLRU 策略的情况下)。

text_index_postings_cache_max_entries

文本索引发布列表缓存的大小(以条目为单位)。零表示禁用。

text_index_postings_cache_policy

文本索引发布列表缓存策略名称。

text_index_postings_cache_size

文本索引发布列表缓存的大小。零表示禁用。

注意

此设置可以在运行时修改,并立即生效。

text_index_postings_cache_size_ratio

在文本索引发布列表缓存中,相对于缓存总大小的受保护队列的大小(在 SLRU 策略的情况下)。

text_log

用于记录文本消息的 text_log 系统表的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

此外

设置描述默认值
level将存储在表中 的最大消息级别(默认值为 Trace)。Trace

示例

<clickhouse>
    <text_log>
        <level>notice</level>
        <database>system</database>
        <table>text_log</table>
        <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>
        <!-- <partition_by>event_date</partition_by> -->
        <engine>Engine = MergeTree PARTITION BY event_date ORDER BY event_time TTL event_date + INTERVAL 30 day</engine>
    </text_log>
</clickhouse>

thread_pool_queue_size

可以安排在全局线程池上的最大作业数。增加队列大小会导致更大的内存使用量。建议将此值保持等于 max_thread_pool_size

注意

值为 0 表示无限制。

示例

<thread_pool_queue_size>12000</thread_pool_queue_size>

threadpool_local_fs_reader_pool_size

local_filesystem_read_method = 'pread_threadpool' 时,用于从本地文件系统读取的线程池中的线程数。

threadpool_local_fs_reader_queue_size

可以调度到线程池中的最大作业数,用于从本地文件系统读取。

threadpool_remote_fs_reader_pool_size

remote_filesystem_read_method = 'threadpool' 时,用于从远程文件系统读取的线程池中的线程数。

threadpool_remote_fs_reader_queue_size

可以调度到线程池中的最大作业数,用于从远程文件系统读取。

threadpool_writer_pool_size

用于写入对象存储的后台线程池的大小。

threadpool_writer_queue_size

可以推送到用于写入对象存储的后台线程池中的任务数量。

throw_on_unknown_workload

定义了访问具有查询设置 'workload' 的未知 WORKLOAD 时的行为。

  • 如果 true,则尝试访问未知 workload 的查询将抛出 RESOURCE_ACCESS_DENIED 异常。这对于在建立 WORKLOAD 层次结构并包含 WORKLOAD 默认值后强制执行资源调度很有用。
  • 如果 false(默认值),则为指向未知 WORKLOAD 的查询提供无限制的访问权限,且不进行资源调度。这在设置 WORKLOAD 的层次结构之前添加 WORKLOAD 默认值时非常重要。

示例

<throw_on_unknown_workload>true</throw_on_unknown_workload>

参见

timezone

服务器的时区。

指定为 IANA 标识符,用于 UTC 时区或地理位置(例如,Africa/Abidjan)。

时区对于在字符串和 DateTime 格式之间进行转换是必要的,当 DateTime 字段以文本格式输出(显示在屏幕上或写入文件)时,以及从字符串获取 DateTime 时。此外,如果输入参数中没有收到时区,时区也用于处理时间和日期的函数。

示例

<timezone>Asia/Istanbul</timezone>

参见

tmp_path

本地文件系统上的路径,用于存储处理大型查询的临时数据。

注意
  • 只能使用一个选项来配置临时数据存储:tmp_path、tmp_policy、temporary_data_in_cache。
  • 尾部斜杠是必需的。

示例

<tmp_path>/var/lib/clickhouse/tmp/</tmp_path>

tmp_policy

临时数据存储策略。所有带有 tmp 前缀的文件将在启动时删除。

注意

关于将对象存储用作 tmp_policy 的建议

  • 在每个服务器上使用单独的 bucket:path
  • 使用 metadata_type=plain
  • 您可能还需要为该 bucket 设置 TTL
注意
  • 只能使用一个选项来配置临时数据存储:tmp_pathtmp_policytemporary_data_in_cache
  • move_factorkeep_free_space_bytesmax_data_part_size_bytes 将被忽略。
  • 策略应恰好包含一个 volume

有关更多信息,请参阅 MergeTree 表引擎 文档。

示例

/disk1 已满时,临时数据将存储在 /disk2 上。

<clickhouse>
<storage_configuration>
<disks>
<disk1>
<path>/disk1/</path>
</disk1>
<disk2>
<path>/disk2/</path>
</disk2>
</disks>

<policies>
<!-- highlight-start -->
<tmp_two_disks>
<volumes>
<main>
<disk>disk1</disk>
<disk>disk2</disk>
</main>
</volumes>
</tmp_two_disks>
<!-- highlight-end -->
</policies>
</storage_configuration>

<!-- highlight-start -->
<tmp_policy>tmp_two_disks</tmp_policy>
<!-- highlight-end -->
</clickhouse>

top_level_domains_list

定义要添加的自定义顶级域名列表,每个条目的格式为 <name>/path/to/file</name>

例如

<top_level_domains_lists>
    <public_suffix_list>/path/to/public_suffix_list.dat</public_suffix_list>
</top_level_domains_lists>

参见

top_level_domains_path

包含顶级域名的目录。

示例

<top_level_domains_path>/var/lib/clickhouse/top_level_domains/</top_level_domains_path>

total_memory_profiler_sample_max_allocation_size

以指定的概率收集小于或等于指定值的随机分配。0 表示禁用。您可能需要将 'max_untracked_memory' 设置为 0,以使此阈值按预期工作。

total_memory_profiler_sample_min_allocation_size

以指定的概率收集大于或等于指定值的随机分配。0 表示禁用。您可能需要将 'max_untracked_memory' 设置为 0,以使此阈值按预期工作。

total_memory_profiler_step

每当服务器内存使用量大于字节数中的下一个步骤时,内存分析器将收集分配堆栈跟踪。零表示禁用内存分析器。小于几兆字节的值会降低服务器速度。

total_memory_tracker_sample_probability

允许收集随机分配和释放,并将它们写入 system.trace_log 系统表,trace_type 等于 MemorySample,概率为指定概率。概率适用于每次分配或释放,无论分配大小如何。请注意,采样仅在未跟踪内存量超过未跟踪内存限制(默认值为 4 MiB)时发生。如果降低了 total_memory_profiler_step,则可以降低它。您可以将 total_memory_profiler_step 设置为 1 以进行更精细的采样。

可能的值

  • 正数。
  • 0 — 禁用在 system.trace_log 系统表中写入随机分配和释放。

trace_log

用于 trace_log 系统表操作的设置。

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

默认服务器配置文件 config.xml 包含以下设置部分

<trace_log>
    <database>system</database>
    <table>trace_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>
    <symbolize>false</symbolize>
</trace_log>

uncompressed_cache_policy

未压缩缓存策略名称。

uncompressed_cache_size

MergeTree 系列表引擎使用的未压缩数据的最大大小(以字节为单位)。

服务器有一个共享缓存。内存按需分配。如果启用了 use_uncompressed_cache 选项,则使用该缓存。

未压缩缓存对于单个情况下的非常短的查询是有利的。

注意

值为 0 表示禁用。

此设置可以在运行时修改,并立即生效。

uncompressed_cache_size_ratio

在未压缩缓存中,相对于缓存总大小的受保护队列的大小(在 SLRU 策略的情况下)。

url_scheme_mappers

用于将缩短或符号化的 URL 前缀转换为完整 URL 的配置。

示例

<url_scheme_mappers>
    <s3>
        <to>https://{bucket}.s3.amazonaws.com</to>
    </s3>
    <gs>
        <to>https://storage.googleapis.com/{bucket}</to>
    </gs>
    <oss>
        <to>https://{bucket}.oss.aliyuncs.com</to>
    </oss>
</url_scheme_mappers>

use_minimalistic_part_header_in_zookeeper

在 ZooKeeper 中存储数据部分头的方法。此设置仅适用于 MergeTree 系列。可以指定

全局在 config.xml 文件的 merge_tree 部分

ClickHouse 使用该设置来设置服务器上的所有表。您可以随时更改设置。更改设置后,现有表会更改其行为。

对于每个表

在创建表时,指定相应的 引擎设置。即使全局设置发生更改,具有此设置的现有表的行为也不会更改。

可能的值

  • 0 — 功能已关闭。
  • 1 — 功能已启用。

如果 use_minimalistic_part_header_in_zookeeper = 1,则 复制 表使用单个 znode 以紧凑的方式存储数据部分头。如果表包含许多列,则此存储方法可以显着减少存储在 Zookeeper 中的数据量。

注意

应用 use_minimalistic_part_header_in_zookeeper = 1 后,无法将 ClickHouse 服务器降级到不支持此设置的版本。在集群中的 ClickHouse 服务器上升级时要小心。不要一次升级所有服务器。在测试环境中或集群的少数服务器上测试 ClickHouse 的新版本更安全。

已经使用此设置存储的数据部分头无法恢复到其以前的(非紧凑)表示形式。

user_defined_executable_functions_config

可执行用户定义函数的配置文件路径。

路径

  • 指定绝对路径或相对于服务器配置文件路径。
  • 路径可以包含通配符 * 和 ?。

参见

示例

<user_defined_executable_functions_config>*_function.xml</user_defined_executable_functions_config>

user_defined_path

包含用户定义文件的目录。用于 SQL 用户定义函数 SQL 用户定义函数

示例

<user_defined_path>/var/lib/clickhouse/user_defined/</user_defined_path>

user_directories

配置文件部分,其中包含设置

  • 预定义用户的配置文件路径。
  • 通过 SQL 命令创建的用户存储的文件夹路径。
  • 通过 SQL 命令创建的用户存储和复制的 ZooKeeper 节点路径。

如果指定了此部分,则不使用 users_configaccess_control_path 中的路径。

user_directories 部分可以包含任意数量的条目,条目的顺序表示其优先级(条目越高,优先级越高)。

示例

<user_directories>
    <users_xml>
        <path>/etc/clickhouse-server/users.xml</path>
    </users_xml>
    <local_directory>
        <path>/var/lib/clickhouse/access/</path>
    </local_directory>
</user_directories>

用户、角色、行策略、配额和配置文件也可以存储在 ZooKeeper 中

<user_directories>
    <users_xml>
        <path>/etc/clickhouse-server/users.xml</path>
    </users_xml>
    <replicated>
        <zookeeper_path>/clickhouse/access/</zookeeper_path>
    </replicated>
</user_directories>

您还可以定义部分 memory — 表示仅将信息存储在内存中,而不写入磁盘,以及 ldap — 表示将信息存储在 LDAP 服务器上。

要将 LDAP 服务器添加为远程用户目录,用于定义本地未定义的的用户,请定义一个 ldap 部分,并包含以下设置

设置描述
roles包含一个列表,列出从 LDAP 服务器检索的每个用户将被分配的本地定义的角色。如果没有指定角色,用户在身份验证后将无法执行任何操作。如果列出的任何角色在身份验证时本地未定义,则身份验证尝试将失败,就像提供的密码不正确一样。
serverLDAP 服务器名称之一,在 ldap_servers 配置部分中定义。此参数是必需的,不能为空。

示例

<ldap>
    <server>my_ldap_server</server>
        <roles>
            <my_local_role1 />
            <my_local_role2 />
        </roles>
</ldap>

user_files_path

包含用户文件的目录。用于 table 函数 file(), fileCluster()

示例

<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>

user_scripts_path

包含用户脚本文件的目录。用于可执行的用户定义函数 Executable User Defined Functions

示例

<user_scripts_path>/var/lib/clickhouse/user_scripts/</user_scripts_path>

users_config

指向包含

  • 用户配置的文件的路径。
  • 访问权限。
  • 设置配置文件。
  • 配额设置。

示例

<users_config>users.xml</users_config>

validate_tcp_client_information

确定在收到查询数据包时是否启用客户端信息验证。

默认情况下,它是 false

<validate_tcp_client_information>false</validate_tcp_client_information>

vector_similarity_index_cache_max_entries

向量相似度索引缓存的大小,以条目为单位。零表示禁用。

vector_similarity_index_cache_policy

向量相似度索引缓存策略名称。

vector_similarity_index_cache_size

向量相似度索引缓存的大小。零表示禁用。

注意

此设置可以在运行时修改,并立即生效。

vector_similarity_index_cache_size_ratio

向量相似度索引缓存中受保护队列的大小(在 SLRU 策略的情况下),相对于缓存的总大小。

wait_dictionaries_load_at_startup

此设置允许指定如果 dictionaries_lazy_loadfalse 时的行为。(如果 dictionaries_lazy_loadtrue,此设置不起作用。)

如果 wait_dictionaries_load_at_startupfalse,则服务器将在启动时开始加载所有字典,并与该加载并行接收连接。当字典首次在查询中使用时,如果尚未加载,则查询将等待字典加载完成。将 wait_dictionaries_load_at_startup 设置为 false 可以使 ClickHouse 启动更快,但是某些查询的执行速度可能会较慢(因为它们必须等待某些字典加载)。

如果 wait_dictionaries_load_at_startuptrue,则服务器将在启动时等待所有字典完成加载(成功或失败)后才接收任何连接。

示例

<wait_dictionaries_load_at_startup>true</wait_dictionaries_load_at_startup>

workload_path

用于存储所有 CREATE WORKLOADCREATE RESOURCE 查询的目录。默认情况下,使用服务器工作目录下的 /workload/ 文件夹。

示例

<workload_path>/var/lib/clickhouse/workload/</workload_path>

参见

workload_zookeeper_path

用于存储所有 CREATE WORKLOADCREATE RESOURCE 查询的 ZooKeeper 节点路径。为了保持一致性,所有 SQL 定义都存储为此单个 znode 的值。默认情况下不使用 ZooKeeper,并且定义存储在 磁盘 上。

示例

<workload_zookeeper_path>/clickhouse/workload/definitions.sql</workload_zookeeper_path>

参见

zookeeper

包含允许 ClickHouse 与 ZooKeeper 集群交互的设置。当使用复制表时,ClickHouse 使用 ZooKeeper 存储副本的元数据。如果未使用复制表,则可以省略此参数部分。

以下设置可以通过子标签进行配置

设置描述
nodeZooKeeper 端点。您可以设置多个端点。例如 <node index="1"><host>example_host</host><port>2181</port></node>index 属性指定尝试连接到 ZooKeeper 集群时的节点顺序。
operation_timeout_ms一次操作的最大超时时间,以毫秒为单位。
session_timeout_ms客户端会话的最大超时时间,以毫秒为单位。
root (可选)ClickHouse 服务器使用的 znodes 的根 znode。
fallback_session_lifetime.min (可选)主节点不可用时(负载均衡)回退节点 zookeeper 会话的最小生存时间。以秒为单位。默认值:3 小时。
fallback_session_lifetime.max (可选)主节点不可用时(负载均衡)回退节点 zookeeper 会话的最大生存时间。以秒为单位。默认值:6 小时。
identity (可选)ZooKeeper 访问请求 znodes 所需的用户名和密码。
use_compression (可选)如果设置为 true,则启用 Keeper 协议中的压缩。
use_xid_64 (可选)启用 64 位事务 ID。设置为 true 以启用扩展事务 ID 格式。默认值:false
pass_opentelemetry_tracing_context (可选)启用将 OpenTelemetry 跟踪上下文传播到 Keeper 请求。启用后,将为 Keeper 操作创建跟踪跨度,从而实现 ClickHouse 和 Keeper 之间的分布式跟踪。需要启用 use_xid_64。有关更多详细信息,请参阅 Tracing ClickHouse Keeper Requests。默认值:false

还有 zookeeper_load_balancing 设置(可选),它允许您选择 ZooKeeper 节点选择算法

算法名称描述
random随机选择一个 ZooKeeper 节点。
in_order选择第一个 ZooKeeper 节点,如果不可用,则选择第二个,依此类推。
nearest_hostname选择主机名与服务器主机名最相似的 ZooKeeper 节点,主机名与名称前缀进行比较。
hostname_levenshtein_distance就像 nearest_hostname 一样,但它以 Levenshtein 距离的方式比较主机名。
first_or_random选择第一个 ZooKeeper 节点,如果不可用,则随机选择剩余的 ZooKeeper 节点之一。
round_robin选择第一个 ZooKeeper 节点,如果重新连接发生,则选择下一个。

示例配置

<zookeeper>
    <node>
        <host>example1</host>
        <port>2181</port>
    </node>
    <node>
        <host>example2</host>
        <port>2181</port>
    </node>
    <session_timeout_ms>30000</session_timeout_ms>
    <operation_timeout_ms>10000</operation_timeout_ms>
    <!-- Optional. Chroot suffix. Should exist. -->
    <root>/path/to/zookeeper/node</root>
    <!-- Optional. Zookeeper digest ACL string. -->
    <identity>user:password</identity>
    <!--<zookeeper_load_balancing>random / in_order / nearest_hostname / hostname_levenshtein_distance / first_or_random / round_robin</zookeeper_load_balancing>-->
    <zookeeper_load_balancing>random</zookeeper_load_balancing>
    <!-- Optional. Enable 64-bit transaction IDs. -->
    <use_xid_64>false</use_xid_64>
    <!-- Optional. Enable OpenTelemetry tracing context propagation (requires use_xid_64). -->
    <pass_opentelemetry_tracing_context>false</pass_opentelemetry_tracing_context>
</zookeeper>

参见

zookeeper_log

用于 zookeeper_log 系统表的设置。

以下设置可以通过子标签进行配置

以下设置可以通过子标签进行配置

设置描述默认值注意
数据库数据库的名称。
table系统表的名称。
engineMergeTree 引擎定义 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
partition_by自定义分区键 用于系统表。如果为系统表指定了 engine,则应直接在 'engine' 中指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应直接在 'engine' 中指定 ttl 参数
order_by自定义排序键 用于系统表。如果定义了 engine,则无法使用。如果为系统表指定了 engine,则应直接在 'engine' 中指定 order_by 参数
storage_policy要用于表的存储策略的名称(可选)。如果为系统表指定了 engine,则应直接在 'engine' 中指定 storage_policy 参数
设置其他参数 用于控制 MergeTree 的行为(可选)。如果为系统表指定了 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

示例

<clickhouse>
    <zookeeper_log>
        <database>system</database>
        <table>zookeeper_log</table>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
        <ttl>event_date + INTERVAL 1 WEEK DELETE</ttl>
    </zookeeper_log>
</clickhouse>
    © . This site is unofficial and not affiliated with ClickHouse, Inc.