服务器设置
本节包含服务器设置的说明。这些设置无法在会话级或查询级进行更改。
有关 ClickHouse 中配置文件的更多信息,请参阅 Configuration Files。
其他设置在 Settings 部分中进行了说明。
在学习这些设置之前,建议先阅读 Configuration Files
部分,并注意其中替换(incl 和 optional 属性)的用法。
abort_on_logical_error
access_control_improvements
访问控制系统可选改进相关的设置。
| Setting | Description | Default |
|---|---|---|
users_without_row_policies_can_read_rows | 设置没有放宽行策略(row policy)的用户,是否仍然可以通过 SELECT 查询读取行。例如,如果有两个用户 A 和 B,并且只为 A 定义了行策略,那么当该设置为 true 时,用户 B 将能看到所有行;当该设置为 false 时,用户 B 将看不到任何行。 | true |
on_cluster_queries_require_cluster_grant | 设置 ON CLUSTER 查询是否需要 CLUSTER 权限。 | true |
select_from_system_db_requires_grant | 设置 SELECT * FROM system.<table> 是否需要授予权限,还是可以由任意用户直接执行。如果设置为 true,则该查询需要 GRANT SELECT ON system.<table>,与非 system 表相同。例外情况:少数 system 表(tables、columns、databases,以及一些常量表,如 one、contributors)对所有人仍然可访问;并且如果授予了某个 SHOW 权限(例如 SHOW USERS),则相应的 system 表(即 system.users)将可访问。 | true |
select_from_information_schema_requires_grant | 设置 SELECT * FROM information_schema.<table> 是否需要授予权限,还是可以由任意用户直接执行。如果设置为 true,则该查询需要 GRANT SELECT ON information_schema.<table>,与普通表相同。 | true |
settings_constraints_replace_previous | 设置在某个 SETTINGS PROFILE 中针对某个设置的约束,是否会取消此前(在其他 profile 中)对该设置生效的约束动作,包括新约束中未设置的字段。该设置还会启用 changeable_in_readonly 约束类型。 | true |
table_engines_require_grant | 设置在使用特定表引擎创建表时,是否需要相应的权限。 | false |
role_cache_expiration_time_seconds | 设置某个角色在 Role Cache 中自上次访问起被保留的时间(秒)。 | 600 |
示例:
access_control_path
ClickHouse 服务器用于存储通过 SQL 命令创建的用户和角色配置的文件夹路径。
另请参阅
aggregate_function_group_array_action_when_limit_is_reached
throw(抛出异常)或 discard(丢弃多余的值)
aggregate_function_group_array_max_element_size
allow_feature_tier
控制是否允许用户更改与不同功能层级相关的设置。
0- 允许更改任何设置(experimental、beta、production)。1- 只允许更改 beta 和 production 功能设置。对 experimental 设置的更改会被拒绝。2- 只允许更改 production 设置。对 experimental 或 beta 设置的更改会被拒绝。
这等价于对所有 EXPERIMENTAL / BETA 功能设置一个只读约束。
当值为 0 时,表示所有设置都可以被更改。
allow_impersonate_user
allow_implicit_no_password
禁止创建未设置密码的用户,除非显式指定 'IDENTIFIED WITH no_password'。
allow_no_password
设置是否允许使用不安全的 no_password 密码类型。
allow_plaintext_password
设置是否允许使用不安全的明文密码类型。
allow_use_jemalloc_memory
allowed_disks_for_table_engines
可用于 Iceberg 的磁盘列表
async_insert_queue_flush_on_shutdown
async_insert_threads
async_load_databases
异步加载数据库和表。
- 如果为
true,所有使用Ordinary、Atomic和Replicated引擎的非 system 数据库会在 ClickHouse 服务器启动后异步加载。参见system.asynchronous_loader表以及tables_loader_background_pool_size和tables_loader_foreground_pool_size服务器设置。任何尝试访问尚未加载的表的查询,将会等待该表完成启动。如果加载任务失败,查询会重新抛出错误(而不是在async_load_databases = false的情况下关闭整个服务器)。至少有一个查询在等待的表会以更高优先级加载。对某个数据库执行的 DDL 查询将会等待该数据库完成启动。也可以考虑为等待中的查询总数设置限制max_waiting_queries。 - 如果为
false,所有数据库会在服务器启动时加载。
示例
async_load_system_database
异步加载 system 数据库中的系统表。如果 system 数据库中有大量日志表和分区片段,这会非常有用。该设置独立于 async_load_databases。
- 如果设置为
true,在 ClickHouse 服务器启动后,所有使用Ordinary、Atomic和Replicated引擎的system数据库将会异步加载。请参阅system.asynchronous_loader表,以及tables_loader_background_pool_size和tables_loader_foreground_pool_size服务器设置。任何尝试访问尚未加载的系统表的查询,都会等待该表完成启动。至少被一个查询等待的表会以更高优先级进行加载。还可以考虑设置max_waiting_queries来限制等待查询的总数量。 - 如果设置为
false,system数据库会在服务器启动前完成加载。
示例
asynchronous_heavy_metrics_update_period_s
asynchronous_insert_log
用于为 asynchronous_insert_log 系统表配置相关设置,该表用于记录异步插入操作的日志。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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_metric_log
在 ClickHouse Cloud 的部署中默认启用。
如果在你的环境中该设置不是默认启用的,则可以根据 ClickHouse 的安装方式,按照下面的说明启用或禁用它。
启用
要手动开启异步指标日志历史记录收集功能 system.asynchronous_metric_log,请创建 /etc/clickhouse-server/config.d/asynchronous_metric_log.xml 文件,并填入以下内容:
禁用
要禁用 asynchronous_metric_log 设置,请创建以下文件 /etc/clickhouse-server/config.d/disable_asynchronous_metric_log.xml,内容如下:
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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
asynchronous_metrics_update_period_s
auth_use_forwarded_address
对通过代理连接的客户端,在认证时使用其源地址。
此设置应格外谨慎使用,因为转发地址很容易被伪造——接受此类认证的服务器不应被直接访问,而应仅通过受信任的代理访问。
background_buffer_flush_schedule_pool_size
background_common_pool_size
background_distributed_schedule_pool_size
background_fetches_pool_size
background_merges_mutations_concurrency_ratio
设置可并发执行的后台合并与变更操作数量与线程数量之间的比率。
例如,如果该比率等于 2,且 background_pool_size 被设置为 16,那么 ClickHouse 可以并发执行 32 个后台合并。这是可行的,因为后台操作可以被挂起或延后执行。这样可以为小型合并提供更高的执行优先级。
您只能在运行时提高该比率。若要降低它,必须重启服务器。
与 background_pool_size 设置类似,出于向后兼容的考虑,可以在 default 配置文件中应用 background_merges_mutations_concurrency_ratio。
background_merges_mutations_scheduling_policy
用于对后台合并和 mutation 进行调度的策略。可能的取值为:round_robin 和 shortest_task_first。
由后台线程池用于选择下一个要执行的合并或 mutation 的算法。该策略可以在运行时更改,而无需重启服务器。
也可以从 default profile 应用,以保持向后兼容性。
可能的取值:
round_robin— 所有并发的合并和 mutation 按轮询顺序执行,以确保不会出现“饥饿”现象。较小的合并仅因需要合并的块更少,所以会比较大的合并更快完成。shortest_task_first— 始终优先执行较小的合并或 mutation。根据合并结果的数据大小为合并和 mutation 分配优先级。结果数据较小的合并会被严格优先于较大的合并。此策略可确保小分区片段以尽可能快的速度完成合并,但在INSERT负载很高的分区中,可能导致大型合并长期处于饥饿状态,迟迟得不到执行。
background_message_broker_schedule_pool_size
background_move_pool_size
background_pool_size
设置用于对 MergeTree 引擎表执行后台合并和变更操作的线程数量。
- 为了在 ClickHouse 服务器启动时保持向后兼容,此设置也可以在服务器启动时通过
defaultprofile 的配置进行设置。 - 你只能在运行时增加线程数量。
- 要减少线程数量,必须重新启动服务器。
- 通过调整此设置,你可以控制 CPU 和磁盘负载。
较小的线程池大小会占用更少的 CPU 和磁盘资源,但后台进程推进得更慢,最终可能会影响查询性能。
在更改此设置之前,请同时查看相关的 MergeTree 设置,例如:
number_of_free_entries_in_pool_to_lower_max_size_of_merge。number_of_free_entries_in_pool_to_execute_mutation。number_of_free_entries_in_pool_to_execute_optimize_entire_partition。
示例
background_schedule_pool_max_parallel_tasks_per_type_ratio
background_schedule_pool_size
backup_log
用于 backup_log 系统表的设置,该系统表用于记录 BACKUP 和 RESTORE 操作。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
示例
backup_threads
BACKUP 请求的最大线程数。
backups
备份相关的设置,在执行 BACKUP and RESTORE 语句时使用。
以下设置可以在子标签中进行配置:
| Setting | Type | Description | Default |
|---|---|---|---|
allow_concurrent_backups | Bool | 决定是否允许在同一主机上并发运行多个备份操作。 | true |
allow_concurrent_restores | Bool | 决定是否允许在同一主机上并发运行多个恢复操作。 | true |
allowed_disk | String | 使用 File() 进行备份时用于存放备份的磁盘。必须设置此配置项才能使用 File。 | `` |
allowed_path | String | 使用 File() 进行备份时用于存放备份的路径。必须设置此配置项才能使用 File。 | `` |
attempts_to_collect_metadata_before_sleep | UInt | 在比较收集到的元数据后发现不一致时,在进入休眠前尝试(重新)收集元数据的次数。 | 2 |
collect_metadata_timeout | UInt64 | 备份期间收集元数据的超时时间(毫秒)。 | 600000 |
compare_collected_metadata | Bool | 若为 true,则将收集到的元数据与现有元数据进行比较,以确保它们在备份期间未被更改。 | true |
create_table_timeout | UInt64 | 恢复期间创建表的超时时间(毫秒)。 | 300000 |
max_attempts_after_bad_version | UInt64 | 在协调备份/恢复期间遇到 “bad version” 错误后重试的最大次数。 | 3 |
max_sleep_before_next_attempt_to_collect_metadata | UInt64 | 在下一次尝试收集元数据之前的最大休眠时间(毫秒)。 | 100 |
min_sleep_before_next_attempt_to_collect_metadata | UInt64 | 在下一次尝试收集元数据之前的最小休眠时间(毫秒)。 | 5000 |
remove_backup_files_after_failure | Bool | 如果 BACKUP 命令失败,ClickHouse 会尝试删除失败前已经复制到备份中的文件,否则将保留这些已复制的文件不变。 | true |
sync_period_ms | UInt64 | 协调备份/恢复的同步周期(毫秒)。 | 5000 |
test_inject_sleep | Bool | 用于测试的休眠注入。 | false |
test_randomize_order | Bool | 若为 true,则会随机化某些操作的执行顺序,用于测试目的。 | false |
zookeeper_path | String | 使用 ON CLUSTER 子句时,在 ZooKeeper 中存储备份和恢复元数据的路径。 | /clickhouse/backups |
此配置项默认设置为:
backups_io_thread_pool_queue_size
Backups IO 线程池中可调度作业的最大数量。鉴于当前的 S3 备份逻辑,建议将此队列保持为不限制。
值为 0(默认)表示无限制。
bcrypt_workfactor
用于 bcrypt_password 认证类型的工作因子,该认证类型使用 Bcrypt 算法。
工作因子定义了计算哈希值和验证密码所需的计算量和时间。
对于需要高频执行身份验证的应用程序, 鉴于在较高工作因子下 bcrypt 的计算开销较大, 请考虑采用其他身份验证方法。
blob_storage_log
blob_storage_log 系统表的设置。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
示例:
builtin_dictionaries_reload_interval
重新加载内置字典的时间间隔(秒)。
ClickHouse 每隔 x 秒重新加载一次内置字典。这样就可以在无需重启服务器的情况下在运行时编辑字典。
示例
cache_size_to_ram_max_ratio
cannot_allocate_thread_fault_injection_probability
cgroups_memory_usage_observer_wait_time
以秒为单位的时间间隔,在此期间服务器允许的最大内存使用量会根据对应的 cgroups 阈值进行调整。
要禁用 cgroups observer,请将该值设置为 0。
compiled_expression_cache_elements_size
compiled_expression_cache_size
compression
用于 MergeTree 引擎表的数据压缩相关设置。
如果您刚开始使用 ClickHouse,我们建议不要更改此设置。
配置模板:
<case> 字段:
min_part_size– 数据分片的最小大小。min_part_size_ratio– 数据分片大小与表大小的比例。method– 压缩方法。可接受的值:lz4、lz4hc、zstd、deflate_qpl。level– 压缩级别。参见 Codecs。
可以配置多个 <case> 部分。
满足条件时的操作:
- 如果某个数据分片匹配某个条件集,ClickHouse 使用指定的压缩方法。
- 如果某个数据分片匹配多个条件集,ClickHouse 使用第一个匹配的条件集。
如果某个数据分片不满足任何条件,ClickHouse 使用 lz4 压缩。
示例
concurrent_threads_scheduler
用于调度由 concurrent_threads_soft_limit_num 和 concurrent_threads_soft_limit_ratio_to_cores 指定的 CPU 槽位的策略。该算法用于控制在并发查询之间如何分配有限数量的 CPU 槽位。调度器可以在运行时更改,而无需重启服务器。
可能的取值:
round_robin— 每个use_concurrency_control= 1 的查询最多会分配max_threads个 CPU 槽位,每个线程占用一个槽位。在发生竞争时,CPU 槽位会以轮询方式分配给各个查询。注意,第一个槽位是无条件授予的,这可能会在存在大量max_threads= 1 的查询时,导致max_threads较大的查询出现不公平以及延迟增加。fair_round_robin— 每个use_concurrency_control= 1 的查询最多会分配max_threads - 1个 CPU 槽位。它是round_robin的一种变体,不需要为每个查询的第一个线程分配 CPU 槽位。这样,max_threads= 1 的查询不再需要任何槽位,也就无法不公平地占用所有槽位。不会无条件授予任何槽位。
concurrent_threads_soft_limit_num
除用于从远程服务器检索数据的线程外,允许用于执行所有查询的最大查询处理线程数。这不是硬性限制。如果达到该限制,查询仍然至少会获得一个线程来运行。如果在执行期间有更多线程可用,查询可以扩展到所需的线程数量。
值为 0(默认)表示无限制。
concurrent_threads_soft_limit_ratio_to_cores
concurrent_threads_soft_limit_num 相同,但以 CPU 核心数的比例形式指定。
config_reload_interval_ms
ClickHouse 重新加载配置并检查新变更的时间间隔
core_dump
配置核心转储(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_timeout_ms
该设置定义了在抢占期间(即等待分配另一个 CPU 槽位时)工作线程最多可以等待多少毫秒。超时后,如果线程仍无法获取新的 CPU 槽位,它将退出,并且该查询的并发执行线程数会被动态缩减到更小的规模。注意,主线程不会被缩减并发度,但可以被无限期抢占。仅当启用了 cpu_slot_preemption 且为 WORKER THREAD 定义了 CPU 资源时,该设置才有意义。
示例
另请参阅
cpu_slot_quantum_ns
定义线程在获取一个 CPU slot 之后、在需要再次请求 CPU slot 之前允许消耗的 CPU 纳秒数。仅当启用了 cpu_slot_preemption 且为 MASTER THREAD 或 WORKER THREAD 定义了 CPU 资源时才有意义。
示例
另请参阅
crash_log
crash_log 系统表操作的相关设置。
可以通过子标签配置以下设置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果定义了 partition_by 或 order_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 | 日志的最大行数。当未刷新的日志数量达到 max_size_rows 时,会将日志转储到磁盘。 | 1024 | |
reserved_size_rows | 为日志预分配的内存行数。 | 1024 | |
buffer_size_rows_flush_threshold | 行数阈值。如果达到该阈值,则会在后台启动将日志刷新到磁盘的操作。 | max_size_rows / 2 | |
flush_on_crash | 设置在崩溃时是否应将日志转储到磁盘。 | false |
默认的服务器配置文件 config.xml 包含以下设置部分:
custom_cached_disks_base_directory
此设置用于指定通过 SQL 创建的自定义缓存磁盘的缓存路径。
对于自定义磁盘,custom_cached_disks_base_directory 比 filesystem_caches_path(在 filesystem_caches_path.xml 中)具有更高优先级,
如果前者未设置,则使用后者。
文件系统缓存配置的路径必须位于该目录之内,
否则将抛出异常,从而阻止磁盘被创建。
这不会影响在旧版本中创建、之后对服务器进行升级的磁盘。 在这种情况下,为了使服务器能够成功启动,不会抛出异常。
示例:
custom_settings_prefixes
自定义设置 的前缀列表。多个前缀之间必须使用逗号分隔。
示例
另请参阅
database_atomic_delay_before_drop_table_sec
在此延迟时间内,可以使用 UNDROP 语句恢复已删除的表。如果 DROP TABLE 使用了 SYNC 修饰符运行,则会忽略该设置。
此设置的默认值为 480(8 分钟)。
database_catalog_drop_error_cooldown_sec
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 秒内没有被修改,则该任务会删除此目录。
这同样适用于 clickhouse-server 不期望在 store/ 中出现的目录。
值为 0 表示“从不删除”。默认值对应 30 天。
database_replicated_allow_detach_permanently
database_replicated_drop_broken_tables
dead_letter_queue
用于配置 'dead_letter_queue' 系统表的相关设置。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
默认设置如下:
default_database
default_password_type
用于在诸如 CREATE USER u IDENTIFIED BY 'p' 之类的查询中自动设置密码类型。
可接受的值为:
plaintext_passwordsha256_passworddouble_sha1_passwordbcrypt_password
default_profile
默认设置概要。设置概要定义在由 user_config 设置指定的文件中。
示例
default_replica_name
ZooKeeper 中该副本的名称。
示例
default_replica_path
表在 ZooKeeper 中的路径。
示例
default_session_timeout
默认会话超时时长(秒)。
dictionaries_config
字典配置文件的路径。
路径:
- 可以指定绝对路径或相对于服务器配置文件的路径。
- 路径中可以包含通配符 * 和 ?。
另请参阅:
- "Dictionaries"。
示例
dictionaries_lazy_load
字典的惰性加载。
- 如果设置为
true,则每个字典会在首次使用时加载。如果加载失败,使用该字典的函数会抛出异常。 - 如果设置为
false,则服务器会在启动时加载所有字典。
服务器在启动时会一直等待所有字典完成加载后,才会接收任何连接
(例外:如果 wait_dictionaries_load_at_startup 被设置为 false)。
示例
dictionary_background_reconnect_interval
background_reconnect 的 MySQL 和 Postgres 字典在连接失败后进行重连重试的时间间隔。
disable_insertion_and_mutation
禁用 insert/alter/delete 查询。如果需要只读节点,以防止插入和变更操作影响读取性能,可以启用此设置。即使启用了该设置,针对外部引擎(S3、DataLake、MySQL、PostrgeSQL、Kafka 等)的插入操作仍然是允许的。
disable_internal_dns_cache
disable_tunneling_for_https_requests_over_http_proxy
默认情况下,会使用隧道(即 HTTP CONNECT)通过 HTTP 代理发起 HTTPS 请求。可以通过此设置禁用该行为。
no_proxy
默认情况下,所有请求都会通过代理。若要对特定主机禁用代理,必须设置 no_proxy 变量。
它可以在 list 和 remote 解析器的 <proxy> 子句中设置,也可以作为 environment 解析器的环境变量进行设置。
它支持 IP 地址、域名、子域名以及用于完全绕过代理的 '*' 通配符。前导点会被移除,其行为与 curl 一致。
Example
下面的配置会绕过对 clickhouse.cloud 及其所有子域(例如 auth.clickhouse.cloud)的代理请求。
GitLab 也是同样的处理方式,即使其前面带有一个点。gitlab.com 和 about.gitlab.com 都将绕过代理。
disk_connections_hard_limit
disk_connections_soft_limit
disk_connections_store_limit
disk_connections_warn_limit
display_secrets_in_show_and_select
启用或禁用在针对表、数据库、表函数和字典的 SHOW 与 SELECT 查询中显示机密信息。
要查看机密信息的用户还必须开启
format_display_secrets_in_show_and_select 格式设置,
并且拥有
displaySecretsInShowAndSelect 权限。
可能的取值:
0— 禁用。1— 启用。
distributed_cache_apply_throttling_settings_from_client
distributed_cache_keep_up_free_connections_ratio
distributed_ddl
管理在集群上执行分布式 DDL 查询(CREATE、DROP、ALTER、RENAME)。
仅在启用了 ZooKeeper 时生效。
<distributed_ddl> 中可配置的项包括:
| Setting | Description | Default Value |
|---|---|---|
path | Keeper 中用于存放 DDL 查询 task_queue 的路径 | |
profile | 用于执行 DDL 查询的 profile | |
pool_size | 可以同时运行的 ON CLUSTER 查询数量 | |
max_tasks_in_queue | 队列中可存在的任务的最大数量 | 1,000 |
task_max_lifetime | 如果节点存在时间超过该值,则将其删除 | 7 * 24 * 60 * 60(一周的秒数) |
cleanup_delay_period | 收到新节点事件后,如果距离上次清理时间至少已过去 cleanup_delay_period 秒,则开始执行清理 | 60 秒 |
示例
distributed_ddl_use_initial_user_and_roles
ON CLUSTER 查询将在远程分片上保留并使用发起查询的用户及其角色来执行。这样可以在整个集群中保持一致的访问控制策略,但要求这些用户和角色在所有节点上都已存在。
dns_allow_resolve_names_to_ipv4
dns_allow_resolve_names_to_ipv6
dns_cache_max_entries
dns_cache_update_period
dns_max_consecutive_failures
drop_distributed_cache_pool_size
drop_distributed_cache_queue_size
enable_azure_sdk_logging
encryption
配置用于获取 加密编解码器 所使用密钥的命令。密钥(或多个密钥)应写入环境变量中或在配置文件中进行设置。
密钥可以是十六进制(hex),或者是长度为 16 字节的字符串。
示例
从配置中加载:
不建议在配置文件中存储密钥,这样不安全。你可以将密钥移到安全磁盘上的单独配置文件中,并在 config.d/ 目录下为该配置文件创建一个符号链接。
当密钥为十六进制编码时,从配置中加载:
从环境变量中加载密钥:
在这里,current_key_id 用于设置当前用于加密的密钥,且所有指定的密钥都可用于解密。
以下每种方法都可以用于多个密钥:
这里的 current_key_id 显示当前用于加密的密钥。
另外,用户可以添加一个长度必须为 12 字节的 nonce(默认情况下,加密和解密过程使用的是由全零字节组成的 nonce):
也可以将其设置为十六进制:
以上所有内容同样适用于 aes_256_gcm_siv(但密钥长度必须为 32 字节)。
error_log
默认情况下处于禁用状态。
启用
要手动启用错误历史记录收集功能 system.error_log,请创建 /etc/clickhouse-server/config.d/error_log.xml 文件,并填入以下内容:
禁用
要禁用 error_log 设置,请创建文件 /etc/clickhouse-server/config.d/disable_error_log.xml,其内容如下:
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
format_parsing_thread_pool_queue_size
可调度到线程池中用于解析输入的任务的最大数量。
值为 0 表示无限制。
format_schema_path
包含输入数据模式(schema)的目录路径,例如用于 CapnProto 格式的模式(schema)。
示例
global_profiler_cpu_time_period_ns
global_profiler_real_time_period_ns
google_protos_path
定义一个目录,用于存放 Protobuf 类型所需的 proto 文件。
示例:
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_rollup
Graphite 数据汇总(rollup)设置。
更多详细信息,请参阅 GraphiteMergeTree。
示例
hsts_max_age
HSTS 的有效期(秒)。
值为 0 表示 ClickHouse 禁用 HSTS。如果将其设置为正数,则会启用 HSTS,max-age 即为你设置的数值。
示例
http_connections_hard_limit
http_connections_soft_limit
http_connections_store_limit
http_connections_warn_limit
http_handlers
允许使用自定义 HTTP 处理器。
要添加一个新的 http 处理器,只需添加一个新的 <rule>。
规则按照定义的顺序自上而下进行检查,
第一个匹配项将运行相应的处理器。
可以通过子标签配置以下设置:
| Sub-tags | Definition |
|---|---|
url | 用于匹配请求 URL,可以使用 'regex:' 前缀进行正则匹配(可选) |
methods | 用于匹配请求方法,可以使用逗号分隔多个要匹配的方法(可选) |
headers | 用于匹配请求头,匹配每个子元素(子元素名称为请求头名称),可以使用 'regex:' 前缀进行正则匹配(可选) |
handler | 请求处理器 |
empty_query_string | 检查 URL 中是否不存在查询字符串 |
handler 包含以下设置,可通过子标签进行配置:
| Sub-tags | Definition |
|---|---|
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_options_response
用于在 OPTIONS HTTP 请求的响应中添加响应头(headers)。
OPTIONS 方法用于发起 CORS 预检请求。
更多信息,请参阅 OPTIONS。
示例:
http_server_default_response
当访问 ClickHouse HTTP(S) 服务器时默认展示的页面。 默认值为 "Ok."(末尾带有换行符)。
示例
在访问 http://localhost: http_port 时打开 https://tabix.io/。
iceberg_catalog_threadpool_pool_size
iceberg_catalog_threadpool_queue_size
iceberg_metadata_files_cache_max_entries
iceberg_metadata_files_cache_policy
iceberg_metadata_files_cache_size
iceberg_metadata_files_cache_size_ratio
ignore_empty_sql_security_in_create_view_query
如果为 true,ClickHouse 在 CREATE VIEW 查询中不会为空的 SQL security 语句写入默认设置。
此设置仅在迁移期间需要,并将在 24.4 版本中废弃。
include_from
包含替换内容的文件路径。支持 XML 和 YAML 两种格式。
有关更多信息,请参阅“配置文件”部分。
示例
index_mark_cache_policy
index_mark_cache_size
索引标记缓存的最大容量。
值为 0 表示禁用。
此设置可以在运行时修改,并会立即生效。
index_mark_cache_size_ratio
index_uncompressed_cache_policy
index_uncompressed_cache_size
未压缩的 MergeTree 索引数据块缓存的最大容量。
值为 0 表示禁用。
该设置可以在运行时修改,并会立即生效。
index_uncompressed_cache_size_ratio
interserver_http_credentials
在复制期间用于连接其他服务器的用户名和密码。此外,服务器还会使用这些凭据对其他副本进行认证。
因此,在一个集群中,所有副本的 interserver_http_credentials 必须相同。
- 默认情况下,如果省略
interserver_http_credentials配置段,在复制期间不会使用认证。 interserver_http_credentials设置与 ClickHouse 客户端凭据配置无关。- 这些凭据在通过
HTTP和HTTPS进行复制时通用。
可以通过以下子标签配置这些设置:
user— 用户名。password— 密码。allow_empty— 如果为true,则即使已设置了凭据,也允许其他副本在未认证的情况下连接。如果为false,则拒绝未认证的连接。默认值:false。old— 包含在凭据轮换期间使用的旧user和password。可以指定多个old配置段。
凭据轮换
ClickHouse 支持在无需同时停止所有副本来更新配置的情况下,动态轮换服务器间凭据。可以分多个步骤更改凭据。
要启用认证,请将 interserver_http_credentials.allow_empty 设置为 true 并添加凭据。这样既允许带认证的连接,也允许不带认证的连接。
在配置完所有副本之后,将 allow_empty 设置为 false,或移除该设置。这样会强制必须使用新凭据进行身份验证。
要更改现有凭据,请将用户名和密码移到 interserver_http_credentials.old 部分,并使用新值更新 user 和 password。此时服务器会使用新凭据连接到其他副本,并接受使用新旧凭据的连接。
当新凭证已应用到所有副本后,即可删除旧凭证。
interserver_http_host
其他服务器可用于访问此服务器的主机名。
如果省略,则以与 hostname -f 命令相同的方式定义。
对于摆脱对特定网络接口的依赖非常有用。
示例
interserver_http_port
用于 ClickHouse 服务器之间数据交换的端口。
示例
interserver_https_host
与 interserver_http_host 类似,不同之处在于该主机名可以被其他服务器用来通过 HTTPS 访问此服务器。
示例
interserver_https_port
用于通过 HTTPS 在 ClickHouse 服务器之间交换数据的端口。
示例
interserver_listen_host
对允许在 ClickHouse 服务器之间交换数据的主机进行限制。 如果使用 Keeper,则对不同 Keeper 实例之间的通信也会应用同样的限制。
默认情况下,该值等于 listen_host 设置。
示例
类型:
默认值:
io_thread_pool_queue_size
可以调度到 IO 线程池中的最大任务数量。
值为 0 表示无限制。
jemalloc_collect_global_profile_samples_in_trace_log
jemalloc_enable_background_threads
jemalloc_enable_global_profiler
jemalloc_flush_profile_interval_bytes
jemalloc_flush_profile_interval_bytes 字节后,将刷新 jemalloc profile
jemalloc_flush_profile_on_memory_exceeded
jemalloc_max_background_threads_num
keep_alive_timeout
在通过 HTTP 协议接收请求时,ClickHouse 在关闭连接之前等待传入请求的时间(秒)。
示例
keeper_hosts
动态设置。包含一组 ClickHouse 可能连接到的 [Zoo]Keeper 主机。不暴露来自 <auxiliary_zookeepers> 的信息。
keeper_multiread_batch_size
对支持批处理的 [Zoo]Keeper 执行 MultiRead 请求时的最大批次大小。若设置为 0,则禁用批处理。仅在 ClickHouse Cloud 中可用。
ldap_servers
在此列出 LDAP 服务器及其连接参数,以便:
- 将其用作特定本地用户的认证器,这些用户将认证机制配置为
ldap而不是password - 将其用作远程用户目录。
可以通过子标签配置以下设置:
| Setting | Description |
|---|---|
host | LDAP 服务器的主机名或 IP,此参数为必填项且不能为空。 |
port | LDAP 服务器端口,如果 enable_tls 设为 true,默认值为 636,否则为 389。 |
bind_dn | 用于构造绑定 DN 的模板。最终 DN 将在每次认证尝试时,通过用实际用户名替换模板中所有 \{user_name\} 子字符串来构造。 |
user_dn_detection | 通过 LDAP 搜索检测已绑定用户实际用户 DN 的配置段。主要用于在服务器为 Active Directory 时,在后续角色映射时的搜索过滤器中使用。最终的用户 DN 将用于在允许的位置替换所有 \{user_dn\} 子字符串。默认情况下,用户 DN 设置为与 bind DN 相同,但一旦执行搜索,它将更新为实际检测到的用户 DN 值。 |
verification_cooldown | 成功绑定尝试之后的一段时间(以秒为单位),在此期间,用户在所有连续请求中都将被视为已成功认证,而无需联系 LDAP 服务器。指定 0(默认值)以禁用缓存,并强制对每个认证请求都联系 LDAP 服务器。 |
enable_tls | 用于触发与 LDAP 服务器建立安全连接的标志。指定 no 以使用纯文本 (ldap://) 协议(不推荐)。指定 yes 以使用基于 SSL/TLS 的 LDAP (ldaps://) 协议(推荐,也是默认值)。指定 starttls 以使用传统的 StartTLS 协议(先使用纯文本 (ldap://) 协议,然后升级为 TLS)。 |
tls_minimum_protocol_version | SSL/TLS 的最小协议版本。可接受的值为:ssl2、ssl3、tls1.0、tls1.1、tls1.2(默认值)。 |
tls_require_cert | SSL/TLS 对端证书验证行为。可接受的值为:never、allow、try、demand(默认值)。 |
tls_cert_file | 证书文件路径。 |
tls_key_file | 证书密钥文件路径。 |
tls_ca_cert_file | CA 证书文件路径。 |
tls_ca_cert_dir | 包含 CA 证书的目录路径。 |
tls_cipher_suite | 允许的密码套件(使用 OpenSSL 表示法)。 |
user_dn_detection 设置可以通过子标签进行配置:
| Setting | Description |
|---|---|
base_dn | 用于构造 LDAP 搜索 base DN 的模板。最终 DN 将在 LDAP 搜索期间,通过用实际用户名和 bind DN 替换模板中所有 \{user_name\} 和 '{bind_dn}' 子字符串来构造。 |
scope | LDAP 搜索的范围。可接受的值为:base、one_level、children、subtree(默认值)。 |
search_filter | 用于构造 LDAP 搜索过滤器的模板。最终过滤器将在 LDAP 搜索期间,通过用实际用户名、bind DN 和 base DN 替换模板中所有 \{user_name\}、\{bind_dn\} 和 \{base_dn\} 子字符串来构造。注意,必须在 XML 中正确转义特殊字符。 |
Example:
示例(典型的 Active Directory,已配置用户 DN 检测,用于后续角色映射):
license_file
ClickHouse Enterprise Edition 许可证文件内容
license_public_key_for_testing
用于 CI 的许可证演示密钥,仅供使用
listen_backlog
监听套接字的 backlog(挂起连接队列大小)。默认值 4096 与 Linux 5.4+) 中的默认值相同。
通常不需要更改此值,因为:
- 默认值已经足够大,
- 为了接受客户端连接,服务器会使用单独的线程。
因此,即使你在 ClickHouse 服务器上看到 TcpExtListenOverflows(来自 nstat)为非零且该计数器在增长,也不意味着需要增加该值,因为:
- 通常如果
4096都不够,这表明 ClickHouse 的内部扩展存在问题,因此更好的做法是报告该问题。 - 这并不意味着服务器之后就能处理更多连接(即使能,到那时客户端可能已经退出或断开连接)。
示例
listen_host
对请求来源主机进行限制。若希望服务器响应所有主机,请指定 ::。
示例:
listen_reuse_port
允许多个服务器监听同一地址和端口。操作系统会将请求随机路由到某一台服务器。不建议启用此设置。
示例
类型:
默认值:
listen_try
在尝试监听时,即使 IPv6 或 IPv4 网络不可用,服务器也不会退出。
示例
load_marks_threadpool_pool_size
load_marks_threadpool_queue_size
logger
日志消息的位置和格式。
键:
| Key | Description |
|---|---|
level | 日志级别。可接受的值:none(关闭日志)、fatal、critical、error、warning、notice、information、debug、trace、test |
log | 日志文件的路径。 |
errorlog | 错误日志文件的路径。 |
size | 轮转策略:日志文件的最大大小(字节)。当日志文件大小超过该阈值时,会被重命名并归档,并创建新的日志文件。 |
count | 轮转策略:最多保留多少个 ClickHouse 历史日志文件。 |
stream_compress | 使用 LZ4 压缩日志消息。设置为 1 或 true 以启用。 |
console | 启用输出到控制台的日志。设置为 1 或 true 以启用。如果 ClickHouse 不以守护进程模式运行,默认值为 1,否则为 0。 |
console_log_level | 控制台输出的日志级别。默认为 level。 |
formatting.type | 控制台输出的日志格式。目前仅支持 json。 |
use_syslog | 同时将日志输出转发到 syslog。 |
syslog_level | 写入 syslog 的日志级别。 |
async | 当为 true(默认)时,日志记录将异步执行(每个输出通道一个后台线程)。否则将在线程内(调用 LOG 的线程)记录日志。 |
async_queue_max_size | 使用异步日志记录时,队列中等待刷新的最大消息数量。超出的消息将被丢弃。 |
startup_level | 启动级别用于在服务器启动时设置根 logger 的级别。启动完成后日志级别会恢复为 level 设置指定的值。 |
shutdown_level | 关闭级别用于在服务器关闭时设置根 logger 的级别。 |
日志格式说明符
log 和 errorLog 路径中的文件名支持下列格式说明符,用于生成最终的文件名(目录部分不支持这些说明符)。
“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 |
%g | ISO 8601 周历年份的最后 2 位数字,即包含指定周的年份。 | 23 |
%b | 缩写形式的月份名称,例如 Oct(随区域设置而变化) | Jul |
%h | 与 %b 等价 | Jul |
%B | 完整月份名称,例如 October(取决于语言环境) | July |
%m | 月份的十进制数字表示(范围 [01,12]) | 07 |
%U | 以十进制数表示的一年中的第几周(星期日为一周的第一天)(范围 [00,53]) | 27 |
%W | 一年中的第几周,使用十进制数表示(星期一为每周的第一天)(范围 [00,53]) | 27 |
%V | ISO 8601 周数(范围 [01,53]) | 27 |
%j | 以十进制数字表示的一年中的第几天(范围 [001,366]) | 187 |
%d | 以零填充的十进制数表示的月份中的日期(范围 [01,31])。一位数前补 0。 | 06 |
%e | 以空格填充的十进制表示的月份中的日期(范围 [1,31])。个位数前面补一个空格。 | 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/7/6 |
%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 | 本地化的上午/下午标记(取决于语言环境) | 下午 |
%z | 以 ISO 8601 格式表示的与 UTC 的偏移量(例如 -0430),如果时区信息不可用则不输出任何字符 | +0800 |
%Z | 与区域设置相关的时区名称或缩写;如果时区信息不可用,则不输出任何字符 | Z AWST |
示例
要仅在控制台输出日志消息:
按级别覆盖
可以单独覆盖特定日志名称的日志级别。例如,要屏蔽日志记录器 "Backup" 和 "RBAC" 的所有消息。
syslog
要将日志消息同时写入 syslog:
<syslog> 的键:
| Key | Description |
|---|---|
address | syslog 的地址,格式为 host\[:port\]。如果省略,则使用本地守护进程。 |
hostname | 发送日志的主机名(可选)。 |
facility | syslog 的 facility 关键字。必须使用大写并带有 "LOG_" 前缀,例如 LOG_USER、LOG_DAEMON、LOG_LOCAL3 等。默认值:如果指定了 address,则为 LOG_USER,否则为 LOG_DAEMON。 |
format | 日志消息格式。可选值:bsd 和 syslog. |
Log formats
可以指定在控制台日志中输出的日志格式。目前仅支持 JSON。
Example
下面是一个 JSON 格式输出日志的示例:
要启用 JSON 日志支持,请使用以下配置片段:
为 JSON 日志重命名键
可以通过修改 <names> 标签内各标签的值来调整键名。例如,要将 DATE_TIME 改为 MY_DATE_TIME,可以使用 <date_time>MY_DATE_TIME</date_time>。
在 JSON 日志中省略键
可以通过将属性注释掉来省略日志属性。例如,如果你不希望日志输出 query_id,可以将 <query_id> 标签注释掉。
macros
用于复制表的参数替换。
如果不使用复制表,则可以省略。
有关更多信息,请参阅创建复制表部分。
示例
mark_cache_policy
mark_cache_prewarm_ratio
mark_cache_size
marks(MergeTree 表族索引标记)的缓存最大大小。
此设置可以在运行时修改,并会立即生效。
mark_cache_size_ratio
max_active_parts_loading_thread_pool_size
max_authentication_methods_per_user
为单个用户创建或修改时所允许的最大身份验证方式数量。 更改此设置不会影响已存在的用户。与身份验证相关的 CREATE/ALTER 查询如果超出该设置中指定的限制,将会执行失败。 与身份验证无关的 CREATE/ALTER 查询会成功执行。
值为 0 表示不设上限。
max_backup_bandwidth_for_server
max_backups_io_thread_pool_free_size
max_backup_io_thread_pool_free_size,ClickHouse 将释放空闲线程占用的资源并减小线程池大小。如有需要,可以重新创建线程。
max_backups_io_thread_pool_size
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
限制并发执行的查询总数。请注意,还需要同时考虑对 INSERT 和 SELECT 查询的限制,以及对用户最大查询数的限制。
另请参阅:
值为 0(默认)表示不限制。
此设置可以在运行时修改,并会立即生效。已在运行中的查询将保持不变。
max_concurrent_select_queries
限制同时执行的 SELECT 查询的总数。
值为 0(默认)表示不限制。
此设置可以在运行时修改,并会立即生效。已在运行中的查询不会受到影响。
max_connections
max_database_num_to_throw
max_database_num_to_warn
如果已附加的数据库数量超过指定值,ClickHouse 服务器会向 system.warnings 表添加警告信息。
示例
max_database_replicated_create_table_thread_pool_size
max_dictionary_num_to_throw
当 Dictionary 的数量超过该值时,服务器将抛出异常。
只统计以下数据库引擎的表:
- Atomic
- Ordinary
- Replicated
- Lazy
值为 0 表示不做限制。
示例
max_dictionary_num_to_warn
如果已附加的字典数量超过该值,ClickHouse 服务器会向 system.warnings 表添加警告消息。
示例
max_distributed_cache_read_bandwidth_for_server
max_distributed_cache_write_bandwidth_for_server
max_entries_for_hash_table_stats
max_fetch_partition_thread_pool_size
max_format_parsing_thread_pool_free_size
用于解析输入的线程池中保留的最大空闲备用线程数。
max_format_parsing_thread_pool_size
用于解析输入数据的最大线程总数。
max_io_thread_pool_free_size
如果 IO 线程池中空闲线程的数量超过 max_io_thread_pool_free_size,ClickHouse 将释放这些空闲线程所占用的资源并缩小线程池规模。如有需要,可以重新创建线程。
max_io_thread_pool_size
ClickHouse 使用 IO 线程池中的线程来执行某些 IO 操作(例如与 S3 进行交互)。max_io_thread_pool_size 用于限制该线程池中的最大线程数。
max_keep_alive_requests
在一个 keep-alive 连接被 ClickHouse 服务器关闭之前,通过该连接所能处理的最大请求数。
示例
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
max_mutations_bandwidth_for_server
max_named_collection_num_to_throw
如果命名集合数超过此值,服务器会抛出异常。
值为 0 表示不做限制。
示例
max_named_collection_num_to_warn
如果命名集合的数量超过指定值,ClickHouse 服务器会在 system.warnings 表中添加警告信息。
示例
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_partition_size_to_drop
对删除分区的限制。
如果 MergeTree 表的大小超过 max_partition_size_to_drop(以字节为单位),则无法使用 DROP PARTITION 查询删除分区。
更改此设置后,无需重启 ClickHouse 服务器即可生效。禁用该限制的另一种方式是创建 <clickhouse-path>/flags/force_drop_table 文件。
示例
max_parts_cleaning_thread_pool_size
max_pending_mutations_execution_time_to_warn
如果任意挂起的 mutation 的执行时间超过指定的秒数,ClickHouse 服务器会在 system.warnings 表中添加警告信息。
示例
max_pending_mutations_to_warn
如果待处理的 mutation 数量超过指定值,ClickHouse 服务器会向 system.warnings 表添加警告消息。
示例
max_prefixes_deserialization_thread_pool_free_size
如果前缀反序列化线程池中空闲线程的数量超过 max_prefixes_deserialization_thread_pool_free_size,ClickHouse 将释放这些空闲线程占用的资源并缩小线程池大小。如有需要,可以重新创建线程。
max_prefixes_deserialization_thread_pool_size
ClickHouse 使用前缀反序列化线程池中的线程,从 MergeTree 的 Wide 分区片段的文件前缀中并行读取列和子列的元数据。max_prefixes_deserialization_thread_pool_size 用于限制该线程池中的最大线程数。
max_remote_read_network_bandwidth_for_server
读取数据时,通过网络进行数据交换的最大速度,单位为字节/秒。
值为 0(默认)表示不受限制。
max_remote_write_network_bandwidth_for_server
用于写入的数据在网络上的最大传输速率(以字节/秒计)。
值为 0(默认)表示不限制。
max_replicated_fetches_network_bandwidth_for_server
max_replicated_sends_network_bandwidth_for_server
max_replicated_table_num_to_throw
如果副本表的数量超过该值,服务器将抛出异常。
只统计以下数据库引擎的表:
- Atomic
- Ordinary
- Replicated
- Lazy
值为 0 表示无限制。
示例
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 设置项的限制。
max_session_timeout
会话的最大超时时间(以秒为单位)。
示例:
max_table_num_to_throw
当表的数量超过该值时,服务器将抛出异常。
以下类型的表不计入:
- view
- remote
- dictionary
- system
仅统计以下数据库引擎的表:
- Atomic
- Ordinary
- Replicated
- Lazy
值为 0 表示不作限制。
示例
max_table_num_to_warn
如果已附加的表数量超过指定值,ClickHouse 服务器会向 system.warnings 表中添加警告信息。
示例
max_table_size_to_drop
删除表的限制。
如果 MergeTree 表的大小超过 max_table_size_to_drop(以字节为单位),则不能使用 DROP 查询或 TRUNCATE 查询删除该表。
值为 0 表示可以在没有任何限制的情况下删除所有表。
更改该设置不需要重启 ClickHouse 服务器。禁用此限制的另一种方法是,在 <clickhouse-path>/flags/ 目录下创建 force_drop_table 文件。
示例
max_temporary_data_on_disk_size
可用于外部聚合、JOIN 或排序操作的最大磁盘空间。 超过此限制的查询将会因抛出异常而失败。
值 0 表示不受限制。
另请参阅:
max_thread_pool_free_size
如果全局线程池中空闲线程的数量大于 max_thread_pool_free_size,则 ClickHouse 会释放部分线程占用的资源,并缩小线程池大小。如有需要,可以重新创建线程。
示例
max_thread_pool_size
ClickHouse 使用全局线程池(Global Thread Pool)中的线程来处理查询。当没有空闲线程可用于处理查询时,会在池中创建一个新线程。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_warn
如果已附加的视图数量超过指定值,ClickHouse 服务器会向 system.warnings 表写入警告消息。
示例
max_waiting_queries
限制同时处于等待状态的查询总数。
当所需的表正在异步加载时,处于等待状态的查询执行会被阻塞(参见 async_load_databases)。
在检查由以下设置控制的限制时,不会将处于等待状态的查询计入其中:
max_concurrent_queriesmax_concurrent_insert_queriesmax_concurrent_select_queriesmax_concurrent_queries_for_usermax_concurrent_queries_for_all_users
这样处理是为了避免在服务器刚启动后就立即触及这些限制。
值为 0(默认)表示不设限制。
此设置可以在运行时修改,并会立即生效。已经在运行的查询将保持不变。
memory_worker_correct_memory_tracker
后台 memory worker 是否应根据来自 jemalloc 和 cgroups 等外部来源的信息来校正内部内存跟踪器
memory_worker_period_ms
后台内存 worker 的执行周期,用于在较高内存使用期间校正 memory tracker 的内存用量,并清理未使用的页面。如果设置为 0,则会根据内存使用来源使用默认值。
memory_worker_use_cgroup
merge_tree
针对 MergeTree 表的调优设置。
有关更多信息,请参阅 MergeTreeSettings.h 头文件。
示例
merge_workload
用于控制合并操作与其他工作负载之间的资源使用与共享方式。指定的值会作为所有后台合并的 workload 设置值。可以通过 MergeTree 设置进行覆盖。
另请参阅
merges_mutations_memory_usage_soft_limit
设置在执行合并和变更(merge 和 mutation)操作时允许使用的 RAM 内存上限。 如果 ClickHouse 达到该限制,将不会再调度任何新的后台合并或变更操作,但会继续执行已调度的任务。
值为 0 表示不限制。
示例
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 文件,并填入以下内容:
禁用
要禁用 metric_log 设置,您需要创建如下文件 /etc/clickhouse-server/config.d/disable_metric_log.xml,内容如下:
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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
用于判断是否断开连接的最小比值:操作系统 CPU 等待时间(OSCPUWaitMicroseconds 指标)与忙碌时间(OSCPUVirtualTimeMicroseconds 指标)之比。使用该最小比值和最大比值之间的线性插值来计算概率,在此比值时概率为 0。
更多详情请参阅在服务器 CPU 过载时控制行为。
mlock_executable
在启动后执行 mlockall,以降低首次查询的延迟,并防止在高 IO 负载下 ClickHouse 可执行文件被换出(分页到磁盘)。
建议启用此选项,但这会使启动时间增加最多几秒钟。 请注意,如果没有 "CAP_IPC_LOCK" 权限,此设置将无法生效。
示例
mmap_cache_size
此设置可以避免频繁进行 open/close 调用(这些调用由于引发的缺页异常开销很大),并允许在多个线程和查询之间复用映射。该设置的值表示映射区域的数量(通常等于映射文件的数量)。
映射文件中的数据量可以通过以下系统表中的指标进行监控:
MMappedFiles/MMappedFileBytes/MMapCacheCells位于system.metrics、system.metric_logCreatedReadBufferMMap/CreatedReadBufferMMapFailed/MMappedFileCacheHits/MMappedFileCacheMisses位于system.events、system.processes、system.query_log、system.query_thread_log、system.query_views_log
映射文件中的数据量不会直接消耗内存,也不会计入查询或服务器的内存使用,因为这部分内存可以像操作系统的页缓存一样被丢弃。缓存会在 MergeTree 系列表中旧分区片段被删除时自动清理(关闭文件),也可以通过 SYSTEM DROP MMAP CACHE 查询手动清理。
此设置可以在运行时修改,并会立即生效。
mutation_workload
用于调节 mutation 与其他工作负载之间的资源使用和共享方式。指定的值会作为所有后台 mutation 的 workload 设置值。可以通过 MergeTree 设置进行覆盖。
另请参阅
mysql_port
用于通过 MySQL 协议与客户端通信的端口。
- 正整数指定要监听的端口号
- 留空则禁用通过 MySQL 协议与客户端的通信。
示例
mysql_require_secure_transport
如果设置为 true,则要求通过 mysql_port 与客户端进行安全通信。带有 --ssl-mode=none 选项的连接将被拒绝。将其与 OpenSSL 设置配合使用。
openSSL
SSL 客户端/服务器配置。
SSL 支持由 libpoco 库提供。可用的配置选项详见 SSLManager.h,默认值可在 SSLManager.cpp 中找到。
服务器/客户端配置所使用的键:
| 参数 | 说明 | 默认值 |
|---|---|---|
privateKeyFile | PEM 证书私钥文件的路径。该文件中可以同时包含私钥和证书。 | |
certificateFile | 以 PEM 格式的客户端/服务器证书文件路径。如果 privateKeyFile 已包含证书,则可以省略。 | |
caConfig | 包含受信任 CA 证书的文件或目录的路径。若指向文件,则该文件必须为 PEM 格式,并且可以包含多个 CA 证书。若指向目录,则该目录中每个 CA 证书必须对应一个 .pem 文件。文件名是根据 CA 主题名哈希值进行查找的。更多细节可参见 SSL_CTX_load_verify_locations 的 man 手册。 | |
verificationMode | 用于验证节点证书的方式。具体说明参见 Context 类的描述。可选值:none、relaxed、strict、once。 | relaxed |
verificationDepth | 验证链的最大允许长度。如果证书链长度超过该值,验证将失败。 | 9 |
loadDefaultCAFile | 是否使用 OpenSSL 的内置 CA 证书。ClickHouse 假定这些内置 CA 证书存放在文件 /etc/ssl/cert.pem(或目录 /etc/ssl/certs)中,或者存放在由环境变量 SSL_CERT_FILE(或 SSL_CERT_DIR)指定的文件(或目录)中。 | true |
cipherList | 受支持的 OpenSSL 加密套件。 | ALL:!ADH:!LOW:!EXP:!MD5:!3DES:@STRENGTH |
cacheSessions | 启用或禁用会话缓存功能。必须与 sessionIdContext 配合使用。可接受的值:true 或 false。 | false |
sessionIdContext | 一组唯一的随机字符,服务器会将其附加到每个生成的标识符后面。该字符串的长度不得超过 SSL_MAX_SSL_SESSION_ID_LENGTH。始终建议配置此参数,因为无论服务器是否缓存会话,还是客户端是否请求缓存,它都可以帮助避免问题。 | $\{application.name\} |
sessionCacheSize | 服务器用于缓存的最大会话数。值为 0 表示会话数不受限制。 | 1024*20 |
sessionTimeout | 服务器缓存会话的时长(单位:小时)。 | 2 |
extendedVerification | 启用后,验证证书的 CN 或 SAN 是否与对端主机名一致。 | false |
requireTLSv1 | 要求使用 TLSv1 连接。允许的取值:true、false。 | false |
requireTLSv1_1 | 要求使用 TLSv1.1 连接。可接受的取值:true、false。 | false |
requireTLSv1_2 | 要求使用 TLSv1.2 连接。可选值:true、false。 | false |
fips | 启用 OpenSSL 的 FIPS 模式。仅当该库所使用的 OpenSSL 版本支持 FIPS 时才可用。 | false |
privateKeyPassphraseHandler | 用于请求用于访问私钥的口令的类(PrivateKeyPassphraseHandler 的子类)。例如:<privateKeyPassphraseHandler>、<name>KeyFileHandler</name>、<options><password>test</password></options>、</privateKeyPassphraseHandler>。 | KeyConsoleHandler |
invalidCertificateHandler | 用于验证无效证书的类(CertificateHandler 的子类)。例如:<invalidCertificateHandler><name>RejectCertificateHandler</name></invalidCertificateHandler>。 | RejectCertificateHandler |
disableProtocols | 禁止使用的协议。 | |
preferServerCiphers | 使用客户端优先顺序的服务器端加密套件。 | false |
配置示例:
opentelemetry_span_log
opentelemetry_span_log 系统表的设置。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
示例:
os_collect_psi_metrics
os_cpu_busy_time_threshold
os_threads_nice_value_distributed_cache_tcp_handler
Linux 中分布式缓存 TCP 处理器线程的 nice 值。值越低,CPU 优先级越高。
需要 CAP_SYS_NICE 能力,否则该设置不会生效。
可选取值范围:-20 到 19。
os_threads_nice_value_merge_mutate
用于合并和 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
page_cache_history_window_ms
page_cache_max_size
page_cache_min_size,则缓存大小会在此范围内持续调整,在尽可能利用可用内存的同时,将总内存使用量控制在限制值(max_server_memory_usage[_to_ram_ratio])之下。
page_cache_min_size
page_cache_policy
page_cache_shards
page_cache_size_ratio
part_log
记录与 MergeTree 相关的日志事件,例如添加或合并数据。可以使用该日志来模拟合并算法并比较它们的特性,也可以对合并过程进行可视化。
查询会记录在 system.part_log 表中,而不是单独的文件中。可以通过 table 参数(见下文)配置该表的名称。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
示例
parts_kill_delay_period
在 SharedMergeTree 中彻底删除分区片段的时间间隔。仅在 ClickHouse Cloud 中可用
parts_kill_delay_period_random_add
向 kill_delay_period 添加一个在 0 到 x 秒之间均匀分布的随机值,以避免在存在大量表时产生“惊群效应(thundering herd effect)”,并进而导致对 ZooKeeper 的拒绝服务攻击(DoS)。仅在 ClickHouse Cloud 中可用。
parts_killer_pool_size
用于清理共享 MergeTree 过期对象的线程数。仅在 ClickHouse Cloud 中可用。
path
包含数据的目录路径。
路径末尾必须带有斜杠。
示例
postgresql_port
用于与客户端进行 PostgreSQL 协议通信的端口。
- 正整数表示要监听的端口号。
- 留空表示禁用通过 PostgreSQL 协议与客户端的通信。
示例
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
可调度到 prefixes 反序列化线程池中的最大作业数。
值为 0 表示不限制。
prepare_system_log_tables_on_startup
如果为 true,ClickHouse 会在启动之前创建所有已配置的 system.*_log 表。如果某些启动脚本依赖这些表,这会很有帮助。
primary_index_cache_policy
primary_index_cache_prewarm_ratio
primary_index_cache_size
primary_index_cache_size_ratio
process_query_plan_packet
此设置允许读取 QueryPlan 数据包。启用 serialize_query_plan 时,对于分布式查询会发送此数据包。 默认禁用,以避免由于查询计划二进制反序列化中的缺陷而可能导致的安全问题。
示例
processors_profile_log
processors_profile_log 系统表的设置。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
默认设置如下:
prometheus
为 Prometheus 提供可抓取的指标数据。
设置项:
endpoint– Prometheus 服务器用于抓取指标的 HTTP 端点。需以 '/' 开头。port–endpoint使用的端口。metrics– 暴露来自 system.metrics 表的指标。events– 暴露来自 system.events 表的指标。asynchronous_metrics– 暴露来自 system.asynchronous_metrics 表的当前指标值。errors– 暴露自上次服务器重启以来按错误码统计的错误次数。该信息同样可以从 system.errors 表中获取。
示例
检查(将 127.0.0.1 替换为 ClickHouse 服务器的 IP 地址或主机名):
proxy
为 HTTP 和 HTTPS 请求定义代理服务器,目前 S3 存储、S3 表函数以及 URL 函数已支持该功能。
定义代理服务器有三种方式:
- 环境变量
- 代理列表
- 远程代理解析器
还可以使用 no_proxy 为特定主机绕过代理服务器。
Environment variables
http_proxy 和 https_proxy 环境变量允许为给定协议指定
代理服务器。如果已在系统上进行了设置,即可无缝生效。
如果某个协议只对应一个且不会变化的代理服务器, 这是最简单的方式。
Proxy lists
这种方式允许为某个协议指定一个或多个 代理服务器。如果定义了多个代理服务器, ClickHouse 会以轮询的方式使用不同的代理,从而在服务器之间平衡 负载。如果某个协议有多个代理服务器且代理服务器列表不会改变, 这是最简单的方式。
Configuration template
在下方的选项卡中选择一个父字段以查看其子字段:
- <proxy>
- <http> and <https>
| 字段 | 描述 |
|---|---|
<http> | 一个或多个 HTTP 代理的列表 |
<https> | 一个或多个 HTTPS 代理的列表 |
| 字段 | 描述 |
|---|---|
<uri> | 代理的 URI |
远程代理解析器
代理服务器可能会动态变化。在这种情况下,可以定义解析器的 endpoint。ClickHouse 会向该 endpoint 发送一个空的 GET 请求,远程解析器应返回代理主机。
ClickHouse 将使用它,通过以下模板来生成代理 URI:\{proxy_scheme\}://\{proxy_host\}:{proxy_port}
配置模板
在下方的选项卡中选择一个父字段以查看其子字段:
- <proxy>
- <http> and <https>
- <resolver>
| 字段 | 描述 |
|---|---|
<http> | 一个或多个 resolver 的列表* |
<https> | 一个或多个 resolver 的列表* |
| 字段 | 描述 |
|---|---|
<resolver> | resolver 的端点及其他相关详细信息 |
你可以使用多个 <resolver> 元素,但对于给定协议,只会使用第一个
<resolver>。该协议的其他 <resolver> 元素将被忽略。这意味着,如果需要负载均衡,应由远程 resolver 实现。
| 字段 | 描述 |
|---|---|
<endpoint> | proxy resolver 的 URI |
<proxy_scheme> | 最终 proxy URI 的协议。可为 http 或 https。 |
<proxy_port> | proxy resolver 的端口号 |
<proxy_cache_time> | ClickHouse 缓存来自 resolver 的值的时间(以秒为单位)。将此值设置为 0 会使 ClickHouse 在每个 HTTP 或 HTTPS 请求时都向 resolver 发起一次访问。 |
优先级
代理设置按以下顺序确定:
| 顺序 | 设置 |
|---|---|
| 1. | 远程 proxy resolver |
| 2. | proxy 列表 |
| 3. | 环境变量 |
ClickHouse 将根据请求协议检查优先级最高的解析器类型。若未定义该类型, 则会继续检查下一个优先级的解析器类型,直到检查到 environment 解析器为止。 这也允许混合使用多种解析器类型。
query_cache
查询缓存 配置。
可用的设置如下:
| Setting | Description | Default Value |
|---|---|---|
max_size_in_bytes | 缓存的最大大小(字节数)。0 表示禁用查询缓存。 | 1073741824 |
max_entries | 缓存中可存储的 SELECT 查询结果的最大数量。 | 1024 |
max_entry_size_in_bytes | 可写入缓存的 SELECT 查询结果的最大大小(字节数)。 | 1048576 |
max_entry_size_in_rows | 可写入缓存的 SELECT 查询结果的最大行数。 | 30000000 |
- 修改后的设置会立即生效。
- 查询缓存的数据分配在 DRAM 中。如果内存紧张,请确保将
max_size_in_bytes设置为较小的值,或者直接禁用查询缓存。
示例
query_condition_cache_policy
query_condition_cache_size
查询条件缓存的最大容量。
此设置可以在运行时修改,并会立即生效。
query_condition_cache_size_ratio
query_log
用于在启用 log_queries=1 设置时记录服务器接收到的查询。
查询会被记录到 system.query_log 表中,而不是单独的文件中。可以通过 table 参数更改该表的名称(见下文)。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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_masking_rules
基于正则表达式的规则,会在将查询及所有日志消息写入服务器日志之前生效,包括 system.query_log、system.text_log、system.processes 表中的记录,以及发送给客户端的日志。这样可以防止 SQL 查询中的敏感数据(如姓名、电子邮件、个人标识符或信用卡号)泄露到日志中。
示例
配置字段:
| Setting | Description |
|---|---|
name | 规则名称(可选) |
regexp | RE2 兼容的正则表达式(必填) |
replace | 用于替换敏感数据的字符串(可选,默认为 6 个星号) |
脱敏规则会应用到整个查询(以防止由于格式错误或不可解析的查询导致敏感数据泄露)。
system.events 表中有一个计数器 QueryMaskingRulesMatch,记录查询脱敏规则匹配的总次数。
对于分布式查询,需要在每台服务器上分别进行配置,否则传递到其他节点的子查询将会在未脱敏的情况下被存储。
query_metric_log
默认情况下处于禁用状态。
启用
要手动启用指标历史记录采集 system.query_metric_log,请创建 /etc/clickhouse-server/config.d/query_metric_log.xml 文件,并填入以下内容:
禁用
要禁用 query_metric_log 设置,请创建文件 /etc/clickhouse-server/config.d/disable_query_metric_log.xml,内容如下:
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 参数更改该表的名称(见下文)。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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
用于记录视图(实时视图、物化视图等)日志的设置,生效前提是已启用 log_query_views=1 设置,该设置取决于所接收到的查询。
查询会记录在 system.query_views_log 表中,而不是单独的文件中。你可以通过 table 参数更改该表的名称(见下文)。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 服务器升级后查询视图日志的结构发生了变化,则旧结构的表会被重命名,并自动创建一个新表。
示例
remap_executable
用于为机器代码(“text” 段)重新分配使用大页的内存的设置。
此功能仍处于高度实验性质阶段。
示例:
remote_servers
Distributed 表引擎和 cluster 表函数所使用的集群配置。
示例
关于 incl 属性的值,请参阅“配置文件”一节。
另请参阅
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 字段)。
例如:
replica_group_name
Replicated 数据库的副本组名称。
由 Replicated 数据库创建的集群将由同一组内的副本构成。 DDL 查询只会等待同一组内的副本。
默认为空。
示例
replicated_fetches_http_connection_timeout
http_connection_timeout 继承该值。
replicated_fetches_http_receive_timeout
http_receive_timeout。
replicated_fetches_http_send_timeout
http_send_timeout。
replicated_merge_tree
用于在 ReplicatedMergeTree 中对表进行精细调优。此设置具有更高的优先级。
更多信息请参阅 MergeTreeSettings.h 头文件。
示例
restore_threads
s3_credentials_provider_max_cache_size
s3_max_redirects
s3_retry_attempts
s3queue_disable_streaming
s3queue_log
s3queue_log 系统表的设置。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
默认配置如下:
send_crash_reports
用于向 ClickHouse 核心开发团队发送崩溃报告的设置。
启用此功能(尤其是在预生产环境中)非常有帮助。
配置项:
| Key | Description |
|---|---|
enabled | 用于启用该功能的布尔开关,默认值为 true。将其设置为 false 可以避免发送崩溃报告。 |
send_logical_errors | LOGICAL_ERROR 类似于 assert,表示 ClickHouse 中的一个 bug。此布尔开关用于启用发送此类异常(默认值:true)。 |
endpoint | 可以覆盖用于发送崩溃报告的 endpoint URL。 |
推荐用法
series_keeper_path
Keeper 中的路径,包含由 generateSerialID function 生成的自增编号。该路径下的每个序列对应一个节点。
show_addresses_in_stack_traces
shutdown_wait_backups_and_restores
shutdown_wait_unfinished
shutdown_wait_unfinished_queries
skip_binary_checksum_checks
ssh_server
主机密钥的公钥部分将在首次连接时写入 SSH 客户端的 known_hosts 文件中。
主机密钥配置默认处于未启用状态。 取消注释主机密钥配置,并提供对应 SSH 密钥的路径以启用它们:
示例:
startup_mv_delay_ms
storage_configuration
支持多磁盘存储配置。
存储配置的结构如下:
磁盘配置
disks 的配置遵循如下所示的结构:
上述子标签为 disks 定义了以下设置:
| Setting | Description |
|---|---|
<disk_name_N> | 磁盘名称,必须唯一。 |
path | 用于存储服务器数据(data 和 shadow 目录)的路径,应以 / 结尾。 |
keep_free_space_bytes | 磁盘上预留的空闲空间大小。 |
磁盘的先后顺序无关紧要。
策略配置
上面的子标签为 policies 定义了以下设置:
| Setting | Description |
|---|---|
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_robin 或 least_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
storage_connections_soft_limit
storage_connections_store_limit
storage_connections_warn_limit
storage_metadata_write_full_object_key
storage_shared_set_join_use_inner_uuid
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_close_connection_after_queries_seconds
tcp_port
用于通过 TCP 协议与客户端通信的端口。
示例
tcp_port_secure
用于客户端安全通信的 TCP 端口。与 OpenSSL 相关设置配合使用。
默认值
tcp_ssh_port
供 SSH 服务器使用的端口,允许用户通过 PTY 使用内置客户端进行交互式连接并执行查询。
示例:
temporary_data_in_cache
使用此选项时,临时数据将存储在指定磁盘的缓存中。
在本节中,你需要指定一个类型为 cache 的磁盘名称。
在这种情况下,缓存和临时数据将共享同一存储空间,并且在需要为临时数据腾出空间时,可以淘汰磁盘缓存。
配置临时数据存储时只能使用一个选项:tmp_path、tmp_policy、temporary_data_in_cache。
示例
local_disk 的缓存和临时数据都将存储在文件系统上的 /tiny_local_cache 中,由 tiny_local_cache 管理。
temporary_data_in_distributed_cache
text_index_dictionary_block_cache_max_entries
text_index_dictionary_block_cache_policy
text_index_dictionary_block_cache_size
此设置可以在运行时修改,并会立即生效。
text_index_dictionary_block_cache_size_ratio
text_index_header_cache_max_entries
text_index_header_cache_policy
text_index_header_cache_size
该设置可以在运行时修改,并会立即生效。
text_index_header_cache_size_ratio
text_index_postings_cache_max_entries
text_index_postings_cache_policy
text_index_postings_cache_size
该设置可以在运行时修改,并会立即生效。
text_index_postings_cache_size_ratio
text_log
用于配置 text_log 系统表以记录文本消息。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
另外:
| Setting | Description | Default Value |
|---|---|---|
level | 将会存储到表中的最大消息级别(默认为 Trace)。 | Trace |
示例
thread_pool_queue_size
可在全局线程池中调度的作业的最大数目。增大队列大小会导致更大的内存占用。建议将该值设置为与 max_thread_pool_size 相同。
值为 0 表示不受限制。
示例
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 期间非常重要。
示例
另请参阅
timezone
服务器的时区。
指定为表示 UTC 时区或某个地理位置的 IANA 标识符(例如,Africa/Abidjan)。
在将 DateTime 字段以文本格式输出(打印到屏幕或写入文件),以及从字符串获取 DateTime 时,需要时区信息以在 String 和 DateTime 格式之间进行转换。此外,当函数的输入参数中未显式指定时区时,系统会使用该时区来执行时间和日期相关的函数。
示例
另请参阅
tmp_path
在本地文件系统上用于存储处理大查询时临时数据的路径。
- 配置临时数据存储时,这三个选项
tmp_path、tmp_policy、temporary_data_in_cache只能选其一。 - 末尾必须带斜杠。
示例
tmp_policy
用于临时数据存储的策略。所有带有 tmp 前缀的文件会在启动时被删除。
将对象存储用作 tmp_policy 的推荐做法:
- 在每台服务器上使用单独的
bucket:path - 使用
metadata_type=plain - 也可以为该 bucket 设置生存时间 (TTL)
- 配置临时数据存储时只能使用以下选项中的一个:
tmp_path、tmp_policy、temporary_data_in_cache。 move_factor、keep_free_space_bytes、max_data_part_size_bytes等选项会被忽略。- 策略必须且只能包含 一个卷(volume)
更多信息请参阅 MergeTree Table Engine 文档。
示例
当 /disk1 已满时,临时数据将会存储在 /disk2 上。
top_level_domains_list
定义要添加的自定义顶级域名列表,其中每个条目的格式为 <name>/path/to/file</name>。
例如:
另请参阅:
- 函数
cutToFirstSignificantSubdomainCustom及其变体, 它接受一个自定义的 TLD 列表名称,并返回域名中从顶级域名起,包含到第一个重要子域名为止的那一部分。
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
total_memory_tracker_sample_probability
允许收集随机的内存分配和释放,并按指定概率将它们写入 system.trace_log 系统表中,记录为 trace_type 等于 MemorySample 的条目。该概率应用于每一次分配或释放操作,而不考虑分配大小。请注意,只有当未跟踪内存的数量超过未跟踪内存限制时(默认值为 4 MiB)才会进行采样。如果降低 total_memory_profiler_step 的值,则可以相应降低该未跟踪内存限制。可以将 total_memory_profiler_step 设置为 1,以进行更细粒度的采样。
可能的取值:
- 正的双精度浮点数。
0— 禁用向system.trace_log系统表写入随机分配和释放记录。
trace_log
与 trace_log 系统表操作相关的设置。
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 包含以下设置部分:
uncompressed_cache_policy
uncompressed_cache_size
MergeTree 系列表引擎使用的未压缩数据的最大容量(字节数)。
服务器上有一个共享缓存。内存按需分配。仅当启用 use_uncompressed_cache 选项时才会使用该缓存。
在某些情况下,对非常短的查询使用未压缩缓存更有优势。
值为 0 表示禁用。
此设置可以在运行时修改,并会立即生效。
uncompressed_cache_size_ratio
url_scheme_mappers
用于将简写或符号形式的 URL 前缀解析为完整 URL 的配置。
示例:
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_path
用于存放用户自定义文件的目录。供 SQL 用户自定义函数使用,参见 SQL User Defined Functions。
示例
user_directories
配置文件中包含以下设置的部分:
- 预定义用户配置文件的路径。
- 通过 SQL 命令创建的用户所存储文件夹的路径。
- 通过 SQL 命令创建并在 ZooKeeper 中存储和复制的用户的节点路径。
如果指定了此部分,则不会使用 users_config 和 access_control_path 中的路径。
user_directories 部分可以包含任意数量的条目,条目的顺序表示其优先级(位置越靠前优先级越高)。
示例
用户、角色、行级策略、配额和设置配置文件也可以保存在 ZooKeeper 中:
你还可以定义 memory 部分——表示仅在内存中存储信息,而不写入磁盘,和 ldap 部分——表示在 LDAP 服务器上存储信息。
要将 LDAP 服务器添加为本地未定义用户的远程用户目录,请定义一个包含以下设置的 ldap 部分:
| Setting | Description |
|---|---|
server | 在 ldap_servers 配置部分中定义的 LDAP 服务器名称之一。该参数为必填项,且不能为空。 |
roles | 包含本地定义角色列表的部分,这些角色将分配给从 LDAP 服务器检索到的每个用户。如果未指定任何角色,用户在完成身份验证后将无法执行任何操作。如果列出的任一角色在身份验证时尚未在本地定义,则本次身份验证将失败,其表现与提供了错误密码相同。 |
示例
user_files_path
包含用户文件的目录。供表函数 file()、fileCluster() 使用。
示例
user_scripts_path
用户脚本文件所在的目录。供 Executable 用户自定义函数(Executable User Defined Functions)使用。
示例
类型:
默认值:
users_config
包含以下内容的文件的路径:
- 用户配置。
- 访问权限。
- SETTINGS PROFILE(设置配置文件)。
- QUOTA(配额)设置。
示例
validate_tcp_client_information
默认情况下为 false:
vector_similarity_index_cache_max_entries
vector_similarity_index_cache_policy
vector_similarity_index_cache_size
此设置可以在运行时修改,并会立即生效。
vector_similarity_index_cache_size_ratio
wait_dictionaries_load_at_startup
此设置用于指定在 dictionaries_lazy_load 为 false 时的行为。
(如果 dictionaries_lazy_load 为 true,则此设置不会产生任何影响。)
如果 wait_dictionaries_load_at_startup 为 false,则服务器会在启动时开始加载所有字典,并在加载的同时即可接收连接。
当某个字典在查询中首次被使用时,如果该字典尚未加载完成,则该查询会一直等待该字典加载完成。
将 wait_dictionaries_load_at_startup 设为 false 可以让 ClickHouse 启动得更快,但某些查询可能会执行得更慢
(因为它们必须等待某些字典完成加载)。
如果 wait_dictionaries_load_at_startup 为 true,则服务器会在启动阶段等待
所有字典加载完成(无论成功与否)之后,才开始接收任何连接。
示例
workload_path
用作存储所有 CREATE WORKLOAD 和 CREATE RESOURCE 查询的目录。默认使用服务器工作目录下的 /workload/ 目录。
示例
另请参阅
workload_zookeeper_path
指向 ZooKeeper 节点的路径,用作所有 CREATE WORKLOAD 和 CREATE RESOURCE 查询的存储位置。为保证一致性,所有 SQL 定义都作为同一个 znode 的值存储。默认情况下不使用 ZooKeeper,定义会存储在磁盘上。
示例
另请参阅
zookeeper
包含允许 ClickHouse 与 ZooKeeper 集群交互的设置。ClickHouse 在使用复制表时,会使用 ZooKeeper 来存储副本的元数据。如果不使用复制表,则可以省略本节参数。
可以通过子标签配置以下设置:
| Setting | Description |
|---|---|
node | ZooKeeper 端点。可以设置多个端点。例如:<node index="1"><host>example_host</host><port>2181</port></node>。index 属性指定在尝试连接 ZooKeeper 集群时节点的顺序。 |
session_timeout_ms | 客户端会话的最大超时时间(毫秒)。 |
operation_timeout_ms | 单次操作的最大超时时间(毫秒)。 |
root (optional) | ClickHouse 服务器所使用 znodes 的根 znode。 |
fallback_session_lifetime.min (optional) | 当主节点不可用(负载均衡)时,与回退节点之间的 ZooKeeper 会话存活时间的最小限制。单位为秒。默认值:3 小时。 |
fallback_session_lifetime.max (optional) | 当主节点不可用(负载均衡)时,与回退节点之间的 ZooKeeper 会话存活时间的最大限制。单位为秒。默认值:6 小时。 |
identity (optional) | ZooKeeper 访问所请求 znodes 所需的用户和密码。 |
use_compression (optional) | 如果设置为 true,则在 Keeper 协议中启用压缩。 |
还有一个可选的 zookeeper_load_balancing 设置,用于选择 ZooKeeper 节点的选择算法:
| Algorithm Name | Description |
|---|---|
random | 随机选择一个 ZooKeeper 节点。 |
in_order | 选择第一个 ZooKeeper 节点,如果它不可用则选择第二个,以此类推。 |
nearest_hostname | 选择与服务器主机名最相似的 ZooKeeper 节点,主机名按名称前缀进行比较。 |
hostname_levenshtein_distance | 与 nearest_hostname 类似,但使用 levenshtein 距离方式比较主机名。 |
first_or_random | 选择第一个 ZooKeeper 节点,如果它不可用,则从剩余的 ZooKeeper 节点中随机选择一个。 |
round_robin | 选择第一个 ZooKeeper 节点,如果发生重连则选择下一个节点。 |
配置示例
另请参阅
zookeeper_log
zookeeper_log 系统表的设置项。
可以通过子标签来配置以下设置:
以下设置可以通过子标签进行配置:
| Setting | Description | Default | Note |
|---|---|---|---|
database | 数据库名称。 | ||
table | 系统表名称。 | ||
engine | 系统表的 MergeTree 引擎定义。 | 如果已定义 partition_by 或 order_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 |
示例