跳转到主内容
跳转到主内容

服务器设置

本节说明服务器设置。这些设置无法在会话或查询级别进行更改。

有关 ClickHouse 中配置文件的更多信息,请参阅 “Configuration Files”

其他设置在 “Settings” 部分中进行了说明。 在学习这些设置之前,建议先阅读 Configuration Files 部分,并注意替换用法(incloptional 属性)。

abort_on_logical_error

在发生 LOGICAL_ERROR 异常时让服务器崩溃。仅供专家使用。

access_control_improvements

用于可选增强访问控制系统的设置。

SettingDescriptionDefault
on_cluster_queries_require_cluster_grant设置 ON CLUSTER 查询是否需要 CLUSTER 权限。true
role_cache_expiration_time_seconds设置角色自上次访问以来在 Role Cache 中保存的时间(秒)。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>,与非 system 表相同。例外情况:部分 system 表(tablescolumnsdatabases,以及一些常量表,如 onecontributors)仍对所有人可访问;并且如果授予了某个 SHOW 权限(例如 SHOW USERS),则相应的 system 表(即 system.users)将可访问。true
settings_constraints_replace_previous设置在某个 SETTINGS PROFILE 中针对某个设置定义的约束,是否会覆盖该设置上先前的约束(这些先前约束定义在其他 profile 中),包括新约束未显式设置的字段。该选项还会启用 changeable_in_readonly 约束类型。true
table_engines_require_grant设置在使用特定表引擎创建表时,是否需要相应权限。false
users_without_row_policies_can_read_rows设置没有宽松 ROW POLICY 的用户是否仍然可以通过 SELECT 查询读取行。例如,如果有两个用户 A 和 B,并且只为 A 定义了 ROW POLICY,那么当此设置为 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 - 允许更改任意设置(experimental、beta、production)。
  • 1 - 仅允许更改 beta 和 production 功能设置。对 experimental 设置的更改会被拒绝。
  • 2 - 仅允许更改 production 设置。对 experimental 或 beta 设置的更改会被拒绝。

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

注意

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

allow_impersonate_user

启用或禁用 IMPERSONATE(EXECUTE AS target_user)功能。

allow_implicit_no_password

禁止在未显式指定 'IDENTIFIED WITH no_password' 的情况下创建无密码的 USER。

<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

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

async_load_databases

异步加载数据库和表。

  • 如果为 true,在 ClickHouse 服务器启动后,所有使用 OrdinaryAtomicReplicated 引擎的非系统数据库都会被异步加载。参见 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,在 ClickHouse 服务器启动之后,所有使用 OrdinaryAtomicReplicated 引擎的 system 数据库都会被异步加载。参见 system.asynchronous_loader 表,以及 tables_loader_background_pool_sizetables_loader_foreground_pool_size 服务器设置。任何尝试访问尚未加载的系统表的查询都会等待该表完成启动。至少有一个查询在等待的表会以更高优先级加载。同时也可以考虑设置 max_waiting_queries 参数以限制等待查询的总数。
  • 如果设置为 false,system 数据库会在服务器启动前完成加载。

示例

<async_load_system_database>true</async_load_system_database>

asynchronous_heavy_metrics_update_period_s

更新高开销异步指标的时间间隔(秒)。

asynchronous_insert_log

用于记录异步插入日志的 asynchronous_insert_log 系统表相关设置。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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>

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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 引擎表 执行刷新操作的最大线程数。

background_common_pool_size

用于在后台对 *MergeTree 引擎 表执行各种操作(主要是垃圾回收)的最大线程数。

background_distributed_schedule_pool_size

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

background_fetches_pool_size

在后台从其他副本获取 *MergeTree-engine 表的数据分区片段时可使用的最大线程数。

background_merges_mutations_concurrency_ratio

设置可并发执行的后台合并与变更(merges 和 mutations)数量与线程数之间的比值。

例如,如果该比值等于 2,并且 background_pool_size 被设置为 16,那么 ClickHouse 可以同时执行 32 个后台合并。这之所以可行,是因为后台操作可以被挂起和延后。这样可以使较小的合并获得更高的执行优先级。

注意

只能在运行时增加此比值。若要降低它,则必须重启服务器。

background_pool_size 设置类似,为了向后兼容,可以从 default profile 应用 background_merges_mutations_concurrency_ratio

background_merges_mutations_scheduling_policy

用于对后台合并(merge)和变更操作(mutation)进行调度的策略。可选值为:round_robinshortest_task_first

用于从后台线程池中选择下一个要执行的合并或变更的算法。该策略可以在运行时更改,无需重启服务器。 可以通过 default profile 应用,以保持向后兼容性。

可选值:

  • round_robin — 所有并发合并和变更按轮询顺序执行,以确保不会出现“饥饿”情况。较小的合并由于需要合并的数据块更少,通常会比较大的合并更快完成。
  • shortest_task_first — 始终优先执行较小的合并或变更。合并和变更会根据其结果大小被分配优先级。结果较小的合并会被严格优先于较大的合并。该策略能够以尽可能快的速度完成小分区片段的合并,但在被大量 INSERT 操作严重压载的分区中,可能会导致大型合并长期处于饥饿状态。

background_message_broker_schedule_pool_size

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

background_move_pool_size

在后台将数据分区片段移动到其他磁盘或卷时可使用的最大线程数,适用于 MergeTree 引擎表

background_pool_size

设置用于对 MergeTree 引擎表执行后台合并和变更操作的线程数量。

注意
  • 为了在 ClickHouse 服务器启动时保持向后兼容性,此设置也可以通过 default profile 配置在服务器启动时生效。
  • 只能在运行时增加线程数量。
  • 若要减少线程数量,必须重启服务器。
  • 通过调整此设置,可以控制 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 操作。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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 语句时使用。

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

SettingTypeDescriptionDefault
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在协同备份/恢复过程中遇到 bad version 错误后允许重试的最大次数。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_pathString使用 ON CLUSTER 子句时,在 ZooKeeper 中存储备份和恢复元数据的路径。/clickhouse/backups

此配置默认设置为:

<backups>
    ....
</backups>

backups_io_thread_pool_queue_size

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

注意

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

bcrypt_workfactor

用于 bcrypt_password 认证类型的工作因子,该认证类型使用 Bcrypt 算法。 工作因子决定了计算哈希值和验证密码所需的计算量和时间。

<bcrypt_workfactor>12</bcrypt_workfactor>
注意

对于需要频繁进行身份验证的应用程序, 由于在较高工作因子下 bcrypt 的计算开销较大, 请考虑采用其他身份验证方法。

blob_storage_log

用于 blob_storage_log 系统表的相关设置。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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

以秒为单位的时间间隔,在此期间服务器允许的最大内存使用量会根据 cgroups 中对应的阈值进行调整。

要禁用 cgroups 观察器,将此值设为 0

compiled_expression_cache_elements_size

设置已编译表达式缓存的大小(以元素个数计)。

compiled_expression_cache_size

设置用于编译表达式的缓存大小(单位:字节)。

压缩

用于 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 – 压缩级别。参见 Codecs
注意

你可以配置多个 <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 = 1 的查询时,增加具有较大 max_threads 的查询的延迟。
  • fair_round_robin — 每个 use_concurrency_control = 1 的查询最多分配 max_threads - 1 个 CPU 插槽。这是 round_robin 的一种变体,它不为每个查询的第一个线程分配 CPU 插槽。这样,max_threads = 1 的查询不需要任何插槽,也就无法不公平地独占所有插槽。不会无条件授予任何插槽。

concurrent_threads_soft_limit_num

允许用于运行所有查询的最大查询处理线程数(不包括用于从远程服务器获取数据的线程)。这不是一个硬性上限。如果达到该限制,查询仍然至少会获得一个线程来运行。如果在执行期间有更多线程可用,查询可以扩展到所需的线程数。

注意

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

concurrent_threads_soft_limit_ratio_to_cores

concurrent_threads_soft_limit_num 相同,但以 CPU 核心数量的比例形式指定。

config-file

指定服务器配置文件。

config_reload_interval_ms

ClickHouse 重新加载配置并检查新变更的时间间隔

core_dump

配置核心转储(core dump)文件大小的软限制。

注意

硬限制需通过系统工具进行设置

示例

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

cpu_slot_preemption

定义如何对 CPU 资源(MASTER THREAD 和 WORKER THREAD)进行工作负载调度。

  • 当为 true(推荐)时,核算基于实际消耗的 CPU 时间。会为相互竞争的工作负载分配公平的 CPU 时间。Slot(槽位)会在有限时间内被分配,到期后需要重新请求。在 CPU 资源过载的情况下,请求 slot 可能会阻塞线程执行,即可能发生抢占,从而确保 CPU 时间使用的公平性。
  • 当为 false(默认)时,核算基于分配的 CPU slot 数量。会为相互竞争的工作负载分配公平数量的 CPU slot。线程启动时分配一个 slot,在线程执行期间持续持有,并在线程结束执行时释放。为查询执行分配的线程数量只能从 1 增加到 max_threads,且不会减少。对此长时间运行的查询更有利,但可能导致短查询出现 CPU 资源饥饿。

示例

<cpu_slot_preemption>true</cpu_slot_preemption>

另请参阅

cpu_slot_preemption_timeout_ms

该设置定义了工作线程在抢占期间最多可以等待的时间(毫秒),即在等待被授予新的 CPU 槽位时的等待时长。超时后,如果线程仍无法获取新的 CPU 槽位,它将退出,该查询的并发执行线程数会被动态缩减为更低的数量。需要注意的是,主线程的并发度永远不会被缩减,但可能会被无限期抢占。仅当启用了 cpu_slot_preemption 且为 WORKER THREAD 定义了 CPU 资源时,该设置才有意义。

示例

<cpu_slot_preemption_timeout_ms>1000</cpu_slot_preemption_timeout_ms>

另请参阅

cpu_slot_quantum_ns

定义线程在获取一个 CPU 插槽后,到需要再次请求 CPU 插槽之前被允许消耗的 CPU 纳秒数。仅当启用了 cpu_slot_preemption 且为 MASTER THREAD 或 WORKER THREAD 定义了 CPU 资源时才起作用。

示例

<cpu_slot_quantum_ns>10000000</cpu_slot_quantum_ns>

另请参阅

crash_log

crash_log 系统表操作的相关设置。

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

SettingDescriptionDefaultNote
buffer_size_rows_flush_threshold行数阈值。当达到该阈值时,会在后台触发将日志刷新到磁盘。max_size_rows / 2
database数据库名称。
engine系统表的 MergeTree 引擎定义如果定义了 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
flush_interval_milliseconds将内存中缓冲区的数据刷新到表中的时间间隔(毫秒)。7500
flush_on_crash设置在发生崩溃时是否应将日志转储到磁盘。false
max_size_rows日志的最大大小(以行数计)。当尚未刷新的日志数量达到 max_size_rows 时,会将日志转储到磁盘。1024
order_by系统表的 自定义排序键。如果已定义 engine,则不能使用。如果为系统表指定了 engine,则必须在 'engine' 内直接指定 order_by 参数。
partition_by系统表的 自定义分区键如果为系统表指定了 engine,则必须在 'engine' 内直接指定 partition_by 参数。
reserved_size_rows为日志预先分配的内存行数。1024
settings控制 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

允许在 Replicated 数据库中永久地分离表

database_replicated_drop_broken_tables

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

dead_letter_queue

用于配置 'dead_letter_queue' 系统表。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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

禁用 insert/alter/delete 查询。如果需要只读节点以避免插入和 mutation 影响读取性能,则会启用此设置。即使启用了该设置,仍允许向外部引擎(S3、DataLake、MySQL、PostrgeSQL、Kafka 等)执行插入操作。

disable_internal_dns_cache

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

disable_tunneling_for_https_requests_over_http_proxy

默认情况下,在通过 HTTP 代理发起 HTTPS 请求时,会使用隧道(即 HTTP CONNECT)。可以通过此设置来禁用该行为。

no_proxy

默认情况下,所有请求都会经过代理。若要对特定主机禁用代理,必须设置 no_proxy 变量。 它可以在 list 解析器和 remote 解析器的 <proxy> 子句中设置,也可以作为 environment 解析器的环境变量进行设置。 它支持 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 格式 SETTING, 并且具有 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> 中可配置的设置包括:

SettingDescriptionDefault Value
cleanup_delay_period在收到新节点事件后开始清理,如果距离上次清理的时间少于 cleanup_delay_period 秒,则不会执行本次清理。60
max_tasks_in_queue队列中可以存在的最大任务数。1,000
path在 Keeper 中为 DDL 查询的 task_queue 指定的路径
pool_size可同时运行的 ON CLUSTER 查询数量
profile用于执行 DDL 查询的 profile
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 中用于 DDL 查询的 <task_queue> 路径

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 codecs 使用。密钥(或多个密钥)应通过环境变量提供,或在配置文件中进行设置。

密钥可以是十六进制值,或者是长度为 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 显示了当前用于加密的密钥。

此外,用户可以添加一个 nonce,其长度必须为 12 字节(默认情况下,加密和解密过程使用由零字节组成的 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>

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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

输入数据 schema 所在目录的路径,例如用于 CapnProto 格式的 schema。

示例

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

全局 profiler 的 CPU 时钟定时周期(单位:纳秒)。将该值设置为 0 可关闭全局 CPU 时钟 profiler。推荐取值:针对单个查询至少为 10000000(每秒 100 次),针对集群范围的 profiling 至少为 1000000000(每秒 1 次)。

global_profiler_real_time_period_ns

全局 profiler 的实时时钟计时周期(单位:纳秒)。将该值设为 0 可关闭实时时钟全局 profiler。对于单个查询,推荐至少设置为 10000000(每秒 100 次);对于集群级 profiling,推荐设置为 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 表发送在时间段内累积的增量数据。
  • 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>。 规则会按照定义的顺序从上到下进行检查, 第一个匹配项会执行对应的处理器。

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

Sub-tagsDefinition
url用于匹配请求 URL,可以使用 'regex:' 前缀启用正则匹配(可选)
methods用于匹配请求方法,可以使用逗号分隔多个方法(可选)
headers用于匹配请求头,匹配每个子元素(子元素名称为请求头名称),可以使用 'regex:' 前缀启用正则匹配(可选)
handler请求处理器
empty_query_string检查 URL 中不存在查询字符串

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

Sub-tagsDefinition
url重定向的目标地址
type支持的类型: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 类型一起使用,响应的 content-type
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."(末尾带有换行符)

示例

在访问 http://localhost: 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 元数据文件缓存的最大条目数。0 表示禁用。

iceberg_metadata_files_cache_policy

Iceberg 元数据文件缓存策略名称。

iceberg_metadata_files_cache_size

iceberg 元数据缓存的最大容量(字节)。0 表示禁用。

iceberg_metadata_files_cache_size_ratio

在 iceberg 元数据缓存中,受保护队列(在使用 SLRU 策略时)的大小占缓存总大小的比例。

ignore_empty_sql_security_in_create_view_query

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

注意

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

include_from

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

有关更多信息,请参阅配置文件一节。

示例

<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 策略时,二级索引未压缩缓存中受保护队列的大小占缓存总大小的比例。

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 profile

jemalloc_flush_profile_on_memory_exceeded

当出现总内存超限错误时,会刷新 jemalloc profile

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 套接字接收超时。

keeper_server.socket_send_timeout_sec

Keeper 套接字发送超时时间(秒)。

ldap_servers

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

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

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

SettingDescription
bind_dn用于构造绑定 DN 的 Template。最终 DN 将在每次认证尝试期间,通过将模板中的所有 \{user_name\} 子串替换为实际用户名来构造。
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 设置为与 bind DN 相同,但一旦执行搜索,它会更新为实际检测到的用户 DN 值。
verification_cooldown在一次成功绑定尝试之后,在指定的秒数时间段内,对于所有连续请求,都会假定用户已成功认证,而无需联系 LDAP 服务器。指定 0(默认)以禁用缓存,并强制对每次认证请求都联系 LDAP 服务器。

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

SettingDescription
base_dn用于构造 LDAP 搜索基础 DN 的模板。最终 DN 将在 LDAP 搜索期间,通过将模板中的所有 \{user_name\} 和 '{bind_dn}' 子串替换为实际用户名和 bind DN 来构造。
scopeLDAP 搜索范围。可接受的值为:baseone_levelchildrensubtree(默认)。
search_filter用于构造 LDAP 搜索过滤器的模板。最终过滤器将在 LDAP 搜索期间,通过将模板中的所有 \{user_name\}\{bind_dn\}\{base_dn\} 子串替换为实际用户名、bind DN 和 base 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>

示例(典型的 Active Directory,已配置用于后续角色映射的用户 DN 检测):

<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

监听套接字的 backlog(待处理连接队列大小)。默认值 <4096> 与 Linux 5.4+ 的默认值相同。

通常无需更改此值,因为:

  • 默认值已经足够大;
  • 服务器使用单独线程来接受客户端连接。

因此,即使你在 ClickHouse 服务器上看到 <TcpExtListenOverflows>(来自 <nstat>)为非零且该计数器在增加,也不意味着需要增大该值,因为:

  • 通常如果 <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

允许多个服务器监听同一地址和端口(address: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

日志消息的位置和格式。

:

KeyDescription
async当为 true(默认)时,日志将异步记录(每个输出通道一个后台线程)。否则将在调用 LOG 的线程中记录日志。
async_queue_max_size使用异步日志时,队列中等待写入的最大消息数量。超出的消息将被丢弃。
console启用输出到控制台的日志。设置为 1true 以启用。如果 ClickHouse 不以守护进程模式运行,则默认值为 1,否则为 0
console_log_level控制台输出的日志级别。默认与 level 一致。
count轮转策略:ClickHouse 最多保留的历史日志文件数量。
errorlog错误日志文件的路径。
formatting.type控制台输出的日志格式。目前仅支持 json
level日志级别。可接受的值:none(关闭日志)、fatalcriticalerrorwarningnoticeinformation,debugtracetest
log日志文件的路径。
rotation轮转策略:控制何时轮转日志文件。轮转可以基于大小、时间或二者的组合。例如:100M、daily、100M,daily。当日志文件超过指定大小或达到指定时间间隔时,会被重命名并归档,并创建新的日志文件。
shutdown_level用于在服务器关闭时设置根 logger 的日志级别。
size轮转策略:日志文件的最大字节大小。当日志文件大小超过该阈值时,会被重命名并归档,并创建新的日志文件。
startup_level用于在服务器启动时设置根 logger 的日志级别。启动完成后,日志级别会恢复为 level 设置。
stream_compress使用 LZ4 压缩日志消息。设置为 1true 以启用。
syslog_level输出到 syslog 时使用的日志级别。
use_syslog同时将日志输出转发到 syslog。

日志格式说明符

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

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

格式说明符说明示例
%%字面百分号%
%n换行符
%t水平制表符
%Y以十进制表示的年份,例如 2017 年2023
%y年份后 2 位数字,十进制数(取值范围 [00,99])23
%C年份前两位数字,以十进制表示(范围 [00,99])20
%G四位数的 ISO 8601 周历年份,即包含指定周的年份。通常只在配合 %V 使用时才有意义。2023
%gISO 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本地化日期格式(依赖于区域设置)2023/07/06
%X本地化的时间表示形式,例如 18:40:20 或 6:40:20 PM(取决于区域设置)18:32:07
%D短格式 MM/DD/YY 日期,与 %m/%d/%y 等价07/06/23
%F短格式 YYYY-MM-DD 日期,与 %Y-%m-%d 等价2023-07-06
%r本地化的 12 小时制时间(取决于区域设置)06:32:07 PM
%R等价于 "%H:%M"18:32
%T等同于 "%H:%M:%S"(ISO 8601 时间格式)18:32:07
%p本地化的上午/下午标记(取决于语言环境)PM
%z以 ISO 8601 格式表示的相对于 UTC 的偏移量(例如 -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>

&lt;syslog&gt; 的键:

KeyDescription
addresssyslog 的地址,格式为 host\[:port\]。如果省略,将使用本地守护进程。
hostname日志发送方的主机名(可选)。
facilitysyslog facility keyword。必须使用大写,并以 "LOG_" 作为前缀,例如 LOG_USERLOG_DAEMONLOG_LOCAL3 等。默认值:如果指定了 address,则为 LOG_USER,否则为 LOG_DAEMON
format日志消息格式。可选值:bsdsyslog.

Log formats

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

Example

下面是一个 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

启动级别用于在服务器启动时设置根 logger 的日志级别。服务器启动完成后,日志级别会恢复为 <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 缓存总大小的比例。

mark_cache_size

用于存储标记(MergeTree 表族的索引)的缓存的最大容量。

注意

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

mark_cache_size_ratio

在标记缓存中(在使用 SLRU 策略时)受保护队列的大小,占该缓存总大小的比例。

max_active_parts_loading_thread_pool_size

用于在启动时加载活动分区片段(Active)的线程数。

max_authentication_methods_per_user

为单个用户可创建或修改配置的身份验证方法的最大数量。 更改此设置不会影响现有用户。如果创建或修改与身份验证相关的查询超过此设置中指定的上限,这些查询将会失败。 与身份验证无关的创建或修改查询不会受到影响,并会成功执行。

注意

值为 0 表示无限制。

max_backup_bandwidth_for_server

服务器上所有备份操作的最大读取速度(以字节/秒为单位)。0 表示不限制。

max_backups_io_thread_pool_free_size

如果备份 IO 线程池中空闲线程的数量超过 max_backup_io_thread_pool_free_size,ClickHouse 会释放这些空闲线程占用的资源,并缩减线程池大小。必要时会重新创建线程。

max_backups_io_thread_pool_size

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

max_build_vector_similarity_index_thread_pool_size

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

注意

值为 0 表示使用所有 CPU 核心。

max_concurrent_insert_queries

限制并发 INSERT 查询的总数。

注意

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

此设置可以在运行时修改,并会立即生效。已在运行中的查询不会被更改。

max_concurrent_queries

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

另请参阅:

注意

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

此设置可以在运行时修改,并会立即生效。已在运行中的查询不会受到影响。

max_concurrent_select_queries

对并发执行的 SELECT 查询总数的限制。

注意

值为 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 中用于在副本恢复期间创建表的线程数量。当设置为 0 时,线程数量等于 CPU 核心数。

max_dictionary_num_to_throw

如果字典数量超过该值,服务器将抛出异常。

仅统计以下数据库引擎的表:

  • Atomic
  • Ordinary
  • Replicated
  • Lazy
注意

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

服务器上从分布式缓存读取数据的总最大速度(字节/秒)。0 表示无限制。

max_distributed_cache_write_bandwidth_for_server

服务器上分布式缓存的最大总写入带宽,单位为字节/秒。0 表示不限制。

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 用于限制 IO 线程池中的最大线程数。

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

限制可附加到单个表的 materialized view 数量。

注意

此处仅统计直接依赖的视图,基于其他视图再创建视图的情况不计入。

max_merges_bandwidth_for_server

服务器上所有合并操作的最大读取带宽(字节/秒)。0 表示无限制。

max_mutations_bandwidth_for_server

服务器上所有 mutation 操作的最大读取带宽,单位为字节每秒。0 表示不限制。

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

用于决定是否断开连接的操作系统 CPU 等待时间(OSCPUWaitMicroseconds 指标)与忙碌时间(OSCPUVirtualTimeMicroseconds 指标)之比的最大值。通过在最小与最大比值之间进行线性插值来计算概率,在该比值处概率为 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

如果任意一个挂起的 mutation 的执行时间超过指定的秒数阈值,ClickHouse 服务器会向 system.warnings 表中添加警告信息。

示例

<max_pending_mutations_execution_time_to_warn>10000</max_pending_mutations_execution_time_to_warn>

max_pending_mutations_to_warn

如果待处理的 mutation 数量超过指定的值,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

用于副本抓取的网络数据交换最大速度,单位为字节/秒。0 表示无限制。

max_replicated_sends_network_bandwidth_for_server

副本发送时通过网络进行数据交换的最大速率,单位为字节/秒。0 表示不限制。

max_replicated_table_num_to_throw

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

仅统计使用以下数据库引擎的表:

  • Atomic
  • Ordinary
  • Replicated
  • Lazy
注意

值为 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 和 swap 容量都较小的主机上,可能需要将 max_server_memory_usage_to_ram_ratio 设置为大于 1 的值。

注意

服务器的最大内存消耗还会受到 max_server_memory_usage SETTING 的进一步限制。

max_session_timeout

最大会话超时时长(以秒为单位)。

示例:

<max_session_timeout>3600</max_session_timeout>

max_table_num_to_throw

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

下列类型的表不计入该数量:

  • view
  • remote
  • dictionary
  • system

只统计以下数据库引擎的表:

  • Atomic
  • Ordinary
  • Replicated
  • Lazy
注意

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

可用于外部聚合、JOIN 或排序的最大存储空间。 超过此限制的查询将因为抛出异常而失败。

注意

值为 0 表示不限制。

另请参阅:

max_thread_pool_free_size

如果全局线程池(Global Thread pool)中的空闲线程数大于 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

如果 VIEW 的数量超过该值,服务器将抛出异常。

仅统计以下数据库引擎中的表:

  • Atomic
  • Ordinary
  • Replicated
  • Lazy
注意

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

后台内存工作线程是否应根据 jemalloc、cgroups 等外部来源的信息来校正内部内存跟踪器。

memory_worker_period_ms

后台内存工作线程的轮询周期,用于修正 memory tracker 的内存使用量,并在高内存使用期间清理未使用的内存页。若设置为 0,则将使用默认值,该默认值取决于内存使用来源。

memory_worker_purge_dirty_pages_threshold_ratio

相对于 ClickHouse 服务器可用内存的 jemalloc 脏页阈值比例。当脏页大小超过该比例时,后台内存工作线程会强制回收脏页。若设置为 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 设置值,可被 MergeTree 的设置覆盖。

另请参阅

merges_mutations_memory_usage_soft_limit

设置在执行 merge 和 mutation 操作时允许使用的 RAM 上限。 当 ClickHouse 达到设置的上限时,将不会再调度新的后台 merge 或 mutation 操作,但会继续执行已经调度的任务。

注意

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

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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

OS CPU 等待时间(OSCPUWaitMicroseconds 指标)与忙碌时间(OSCPUVirtualTimeMicroseconds 指标)之间的最小比值,用于判定是否应当断开连接。通过在最小比值和最大比值之间进行线性插值来计算概率,在该最小比值时概率为 0。 更多详情参见 在服务器 CPU 过载时控制行为

mlock_executable

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

注意

建议启用此选项,但这会导致启动时间最多增加几秒。请注意,如果没有 CAP_IPC_LOCK capability,此设置将无法生效。

示例

<mlock_executable>false</mlock_executable>

mlock_executable_min_total_memory_amount_bytes

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

mmap_cache_size

此设置可以避免频繁进行打开/关闭调用(由于随之而来的缺页异常,这类调用代价很高),并允许在多个线程和查询之间复用映射。该设置的值表示映射区域的数量(通常等于被映射文件的数量)。

可以通过以下系统表中的如下指标监控映射文件中的数据量:

注意

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

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

mutation_workload

用于调节变更(mutation)与其他工作负载之间的资源使用与共享方式。指定的值会作为所有后台变更操作的 workload 设置值。可以通过 MergeTree 的设置进行覆盖。

另请参阅

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 subject name 的哈希值进行查找。更多详情请参考 SSL_CTX_load_verify_locations 的 man 页面。
certificateFilePEM 格式的客户端或服务器证书文件路径。如果 privateKeyFile 中已包含证书,则可以省略此项。
cipherListOpenSSL 支持的加密套件。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
privateKeyFilePEM 证书对应私钥文件的路径。该文件可以同时包含私钥和证书。
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 的 man 手册页。

openSSL.client.cacheSessions

启用或禁用会话缓存功能。必须与 <sessionIdContext> 配合使用。可接受的值:<true><false>

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 连接。允许的取值:<true><false>

openSSL.client.requireTLSv1_1

要求使用 TLSv1.1 协议的连接。可接受的取值:<true><false>

openSSL.client.requireTLSv1_2

要求使用 TLSv1.2 连接。可接受的值:<true><false>

openSSL.client.verificationDepth

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

openSSL.client.verificationMode

用于验证节点证书的方式。详细信息参见 Context 类的描述。可选值:<none><relaxed><strict><once>

openSSL.server.caConfig

包含受信任 CA 证书的文件或目录的路径。如果指向一个文件,则该文件必须是 PEM 格式,并且可以包含多个 CA 证书。如果指向一个目录,则该目录必须为每个 CA 证书包含一个 .pem 文件。文件名是根据 CA 主题名称的哈希值进行查找的。更多细节请参阅 SSL_CTX_load_verify_locations 的 man 页面。

openSSL.server.cacheSessions

启用或禁用会话缓存。必须与 <sessionIdContext> 配合使用。可接受的值:<true><false>

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 连接。可选值:<true><false>

openSSL.server.requireTLSv1_1

是否要求使用 TLSv1.1 连接。可接受的值:<true><false>

openSSL.server.requireTLSv1_2

是否要求使用 TLSv1.2 连接。可接受的取值:<true><false>

openSSL.server.sessionCacheSize

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

openSSL.server.sessionIdContext

服务器附加到每个生成的会话标识符上的一组唯一随机字符。字符串长度不得超过 <SSL_MAX_SSL_SESSION_ID_LENGTH>。始终建议设置此参数,因为无论服务器是否缓存会话,还是客户端是否请求缓存,它都有助于避免相关问题。

openSSL.server.sessionTimeout

会话在服务器端的缓存时长(以小时为单位)。

openSSL.server.verificationDepth

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

openSSL.server.verificationMode

用于校验节点证书的方法。详情参见 Context 类的说明。可选值:<none><relaxed><strict><once>

opentelemetry_span_log

opentelemetry_span_log 系统表的设置。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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

操作系统 CPU 忙碌时间(OSCPUVirtualTimeMicroseconds 指标)的阈值,单位为微秒。仅当忙碌时间超过该值时,才认为 CPU 在执行有用工作;如果忙碌时间低于该值,则不会认为 CPU 处于过载状态。

os_threads_nice_value_distributed_cache_tcp_handler

分布式缓存 TCP 处理器线程使用的 Linux nice 值。数值越低,CPU 优先级越高。

需要 CAP_SYS_NICE 权限,否则该设置不会生效(no-op)。

可选值范围:-20 到 19。

os_threads_nice_value_merge_mutate

用于合并(merge)和变更(mutation)线程的 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 拆分为相应数量的分片(shard),以减少互斥锁争用。属于实验性功能,一般不太可能带来性能提升。

page_cache_size_ratio

用户态页面缓存中受保护队列的大小,占该缓存总大小的比例。

part_log

记录与 MergeTree 相关的日志事件,例如添加或合并数据。可以使用该日志来模拟合并算法并比较它们的特性,也可以将合并过程可视化。

查询会记录在 system.part_log 表中,而不是单独的文件中。可以在 table 参数中配置该表的名称(见下文)。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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

用于清理共享 MergeTree 过期分区片段的线程数。仅在 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

预热期间要填充的 mark 缓存大小占其总大小的比例。

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 系统表的设置。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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 endpoint。必须以 '/' 开头。
  • 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 代理的列表

远程代理解析器

代理服务器可能会动态变化。在这种情况下,可以定义一个解析器的 endpoint。ClickHouse 会向该 endpoint 发送一个空的 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>一个或多个 resolver 的列表*
<https>一个或多个 resolver 的列表*

优先级

代理设置的生效顺序如下:

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

ClickHouse 会根据请求协议,先检查优先级最高的解析器类型。如果未定义, 则会依次检查下一个优先级的解析器类型,直到检查到 environment 解析器为止。 这也意味着可以混合使用不同类型的解析器。

query_cache

查询缓存的配置。

可用的配置项如下:

SettingDescriptionDefault Value
max_entries缓存中可存储的 SELECT 查询结果的最大数量。1024
max_entry_size_in_bytes可保存到缓存中的 SELECT 查询结果在字节数上的最大大小。1048576
max_entry_size_in_rows可保存到缓存中的 SELECT 查询结果在行数上的最大行数。30000000
max_size_in_bytes缓存的最大容量(字节)。0 表示禁用查询缓存。1073741824
注意
  • 修改后的配置会立即生效。
  • 查询缓存的数据分配在 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 参数(见下文)更改该表的名称。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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>

配置字段

SettingDescription
name规则名称(可选)
regexp兼容 RE2 的正则表达式(必需)
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>

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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 参数更改该表的名称(见下文)。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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

用于记录视图(live、materialized 等)日志的设置,其生效取决于接收到的启用了 log_query_views=1 设置的查询。

查询会记录在 system.query_views_log 表中,而不是单独的文件中。可以通过 table 参数(见下文)更改该表的名称。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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

用于使用 huge pages 为机器代码("text" 段)重新映射内存的设置。

注意

该功能目前处于高度实验性阶段。

示例

<remap_executable>false</remap_executable>

remote_servers

用于 Distributed 表引擎和 cluster 表函数的集群配置。

示例

<remote_servers incl="clickhouse_remote_servers" />

关于 incl 属性的值,请参见“Configuration files”一节。

另请参阅

remote_url_allow_hosts

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

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

  • 必须与 URL 中的写法完全一致,因为会在 DNS 解析之前检查名称。例如:<host>clickhouse.com</host>
  • 如果在 URL 中显式指定了端口,则会将 host:port 作为整体进行检查。例如:<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

用于 Replicated 数据库的副本组名称。

通过 Replicated 数据库创建的集群由同一组内的副本组成。 DDL 查询只会等待同一组内的副本完成。

默认为空。

示例

<replica_group_name>backups</replica_group_name>

replicated_fetches_http_connection_timeout

用于数据分片拉取请求的 HTTP 连接超时时间。如果未显式设置,则继承自默认 profile http_connection_timeout

replicated_fetches_http_receive_timeout

用于 fetch part 请求的 HTTP 接收超时时间。若未显式设置,则从默认 profile 的 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 系统表的相关设置。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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 核心开发团队发送崩溃报告的相关设置。

尤其是在预生产环境中启用此功能,我们将深表感谢。

Keys:

KeyDescription
enabled启用该功能的布尔标志,默认为 true。将其设置为 false 可避免发送崩溃报告。
endpoint可以覆盖用于发送崩溃报告的 endpoint URL。
send_logical_errorsLOGICAL_ERROR 类似于 assert,表示 ClickHouse 中的一个 bug。此布尔标志用于启用发送这类异常(默认值:true)。

推荐用法

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

series_keeper_path

Keeper 中的路径,其中包含由 generateSerialID FUNCTION 生成的自增编号。每个序列都会作为该路径下的一个节点。

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>

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 定义了以下设置:

SettingDescription
<disk_name_N>磁盘名称,必须唯一。
path用于存储服务器数据(datashadow 目录)的路径,应以 / 结尾。
keep_free_space_bytes以字节为单位的磁盘预留空闲空间大小。
注意

磁盘的定义顺序无关紧要。

策略配置

上述子标签为 policies 定义了以下设置:

SettingDescription
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),这可能会显著降低插入性能。如果禁用,则过期的数据部分会先写入默认卷,然后再根据过期生存时间 (TTL) 的规则立即移动到指定卷。
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

文本索引字典块缓存的最大条目数量。设置为 0 表示禁用该缓存。

text_index_dictionary_block_cache_policy

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

text_index_dictionary_block_cache_size

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

注意

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

text_index_dictionary_block_cache_size_ratio

文本索引字典块缓存中(采用 SLRU 策略时)受保护队列大小与该缓存总大小的比例。

text_index_header_cache_max_entries

文本索引头缓存的大小(以条目数计)。值为 0 表示禁用。

text_index_header_cache_policy

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

text_index_header_cache_size

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

注意

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

text_index_header_cache_size_ratio

文本索引头部缓存中受保护队列(在使用 SLRU 策略时)的大小相对于缓存总大小的比例。

text_index_postings_cache_max_entries

文本索引倒排列表缓存的大小(按条目数计)。设置为 0 表示禁用。

text_index_postings_cache_policy

文本索引倒排列表缓存策略名称。

text_index_postings_cache_size

文本索引 posting 列表的缓存大小。0 表示禁用。

注意

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

text_index_postings_cache_size_ratio

在文本索引 posting 列表缓存中(在使用 SLRU 策略时),受保护队列大小与缓存总大小的比例。

text_log

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

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。1048576
reserved_size_rows为日志预分配的内存行数。8192
buffer_size_rows_flush_threshold行数阈值。如果达到该阈值,则会在后台触发将日志刷新到磁盘的操作。max_size_rows / 2
flush_on_crash设置在发生崩溃时是否应将日志写入磁盘。false

此外:

SettingDescriptionDefault Value
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 default 之后,这对于强制所有查询都进行资源调度非常有用。
  • 如果为 false(默认),则对 workload 设置项指向未知 WORKLOAD 的查询提供不受限的访问(不进行资源调度)。这在配置 WORKLOAD 层级且尚未添加 WORKLOAD default 之前非常重要。

示例

<throw_on_unknown_workload>true</throw_on_unknown_workload>

另请参阅

timezone

服务器的时区设置。

指定为表示 UTC 时区或地理位置的 IANA 标识符(例如 Africa/Abidjan)。

在将 DateTime 字段以文本格式输出(打印到屏幕或写入文件)以及从字符串解析 DateTime 时,时区是 String 与 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 Table Engine 文档。

示例

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

另请参阅:

  • 函数 cutToFirstSignificantSubdomainCustom 及其变体, 该函数接受一个自定义 TLD 列表的名称,并返回域名中从顶级子域直至第一个重要子域在内的部分。

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

以概率 total_memory_profiler_sample_probability 收集大小小于或等于指定值的随机内存分配。0 表示禁用。你可能需要将 max_untracked_memory 设置为 0,才能使该阈值按预期生效。

total_memory_profiler_sample_min_allocation_size

total_memory_profiler_sample_probability 的概率收集大小大于或等于指定值的随机内存分配。0 表示禁用。可以将 'max_untracked_memory' 设置为 0,以便该阈值按预期生效。

total_memory_profiler_step

每当服务器内存使用量(以字节计)超过下一个步长阈值时,内存分析器都会收集当前分配操作的堆栈跟踪。值为 0 表示禁用内存分析器。将该值设置为低于数兆字节会减慢服务器。

total_memory_tracker_sample_probability

允许随机采样内存分配和释放,并将这些事件按指定概率写入 system.trace_log 系统表中,此时 trace_type 等于 MemorySample。该概率作用于每一次内存分配或释放操作,而不考虑分配大小。注意,只有在未跟踪内存量超过未跟踪内存限制时才会进行采样(默认值为 4 MiB)。如果降低 total_memory_profiler_step,则该未跟踪内存限制也会随之降低。可以将 total_memory_profiler_step 设置为 1 以获得更加精细的采样粒度。

Possible values:

  • 正的双精度浮点数。
  • 0 — 禁用向 system.trace_log 系统表写入随机内存分配和释放记录。

trace_log

trace_log 系统表操作的相关设置。

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。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 Functions 使用。

示例

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

SettingDescription
roles包含本地定义角色列表的配置节,这些角色将被分配给从 LDAP 服务器检索到的每个用户。如果未指定任何角色,用户在完成认证后将无法执行任何操作。如果列出的任一角色在认证时尚未在本地定义,则认证尝试将失败,就像提供了错误的密码一样。
serverldap_servers 配置节中定义的 LDAP 服务器名称之一。此参数为必填项,且不能为空。

示例

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

user_files_path

用户文件所在的目录。用于表函数 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

向量相似度索引缓存的大小(按条目数量计)。设置为 0 表示禁用。

vector_similarity_index_cache_policy

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

vector_similarity_index_cache_size

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

注意

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

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

指向 ZooKeeper 节点的路径,用作所有 CREATE WORKLOADCREATE RESOURCE 查询的存储位置。为确保一致性,所有 SQL 定义都作为这个单一 znode 的值进行存储。默认情况下不会使用 ZooKeeper,而是将定义存储在磁盘上。

示例

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

另请参阅

zookeeper

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

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

SettingDescription
nodeZooKeeper 端点。可以设置多个端点。例如:<node index="1"><host>example_host</host><port>2181</port></node>index 属性指定在尝试连接到 ZooKeeper 集群时节点的顺序。
operation_timeout_ms单个操作的最大超时时间(毫秒)。
session_timeout_ms客户端会话的最大超时时间(毫秒)。
root (optional)作为 ClickHouse 服务器所使用各 znode 的根 znode。
fallback_session_lifetime.min (optional)当主节点不可用时(负载均衡),到回退节点的 ZooKeeper 会话的最小存活时间下限。以秒为单位设置。默认值:3 小时。
fallback_session_lifetime.max (optional)当主节点不可用时(负载均衡),到回退节点的 ZooKeeper 会话的最大存活时间上限。以秒为单位设置。默认值:6 小时。
identity (optional)ZooKeeper 访问所请求 znode 所需的用户和密码。
use_compression (optional)如果设置为 true,则在 Keeper 协议中启用压缩。

还有一个可选的 zookeeper_load_balancing 设置,可用于选择 ZooKeeper 节点选择算法:

Algorithm NameDescription
random随机选择一个 ZooKeeper 节点。
in_order选择第一个 ZooKeeper 节点,如果它不可用则选择第二个,依此类推。
nearest_hostname选择主机名与服务器主机名最相似的 ZooKeeper 节点,主机名按名称前缀进行比较。
hostname_levenshtein_distancenearest_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>
</zookeeper>

另请参阅

zookeeper_log

Settings for the zookeeper_log system table.

The following settings can be configured by sub-tags:

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

SettingDescriptionDefaultNote
database数据库名称。
table系统表名称。
engine系统表的 MergeTree 引擎定义如果已定义 partition_byorder_by,则不能使用该设置。如果未指定,则默认选择 MergeTree
partition_by系统表的自定义分区键如果为系统表指定了 engine,则应在 engine 内部直接指定 partition_by 参数
ttl指定表的 TTL如果为系统表指定了 engine,则应在 engine 内部直接指定 ttl 参数
order_by系统表的自定义排序键。如果已定义 engine,则不能使用该设置。如果为系统表指定了 engine,则应在 engine 内部直接指定 order_by 参数
storage_policy要用于该表的存储策略名称(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 storage_policy 参数
settings控制 MergeTree 行为的额外参数(可选)。如果为系统表指定了 engine,则应在 engine 内部直接指定 settings 参数
flush_interval_milliseconds将内存缓冲区中的数据刷新到表的时间间隔。7500
max_size_rows日志的最大行数。当未刷新的日志数量达到最大值时,日志会被写入磁盘。1048576
reserved_size_rows为日志预分配的内存行数。8192
buffer_size_rows_flush_threshold行数阈值。如果达到该阈值,则会在后台触发将日志刷新到磁盘的操作。max_size_rows / 2
flush_on_crash设置在发生崩溃时是否应将日志写入磁盘。false

Example

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