跳至主要内容

全局服务器设置

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

这些设置存储在 ClickHouse 服务器上的 config.xml 文件中。

其他设置在“设置”部分中进行了描述。

在学习设置之前,请阅读配置文件部分,并注意替换的使用(incloptional 属性)。

allow_use_jemalloc_memory

允许使用 jemalloc 内存。

类型:布尔值

默认值:1

asynchronous_heavy_metrics_update_period_s

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

类型:UInt32

默认值:120

asynchronous_metrics_update_period_s

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

类型:UInt32

默认值:1

auth_use_forwarded_address

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

注意

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

类型:布尔值

默认值:0

background_buffer_flush_schedule_pool_size

用于在后台执行 Buffer 引擎表刷新操作的线程最大数量。

类型:UInt64

默认值:16

background_common_pool_size

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

类型:UInt64

默认值:8

background_distributed_schedule_pool_size

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

类型:UInt64

默认值:16

background_fetches_pool_size

用于从另一个副本获取数据的线程最大数量*MergeTree 引擎表在后台。

类型:UInt64

默认值:16

background_merges_mutations_concurrency_ratio

设置线程数量与可以并发执行的后台合并和变异数量之间的比率。例如,如果比率等于 2 且 background_pool_size 设置为 16,则 ClickHouse 可以并发执行 32 个后台合并。这是可能的,因为后台操作可以暂停和推迟。这需要为小型合并提供更高的执行优先级。您只能在运行时增加此比率。要降低它,您必须重新启动服务器。与 background_pool_size 设置相同 background_merges_mutations_concurrency_ratio 可以从 default 配置文件应用以实现向后兼容性。

类型:浮点数

默认值:2

background_merges_mutations_scheduling_policy

关于如何为后台合并和变异执行调度的策略。可能的值为:round_robinshortest_task_first

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

可能的值

  • "round_robin" - 每个并发合并和变异都按循环顺序执行,以确保无饥饿操作。较小的合并完成速度比较大的合并快,因为它们具有较少的块需要合并。
  • "shortest_task_first" - 始终执行较小的合并或变异。合并和变异根据其结果大小分配优先级。大小较小的合并严格优先于较大的合并。此策略确保以最快的速度合并小部分,但会导致在插入操作严重过载的分区中大型合并无限期饥饿。

类型:字符串

默认值:round_robin

background_message_broker_schedule_pool_size

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

类型:UInt64

默认值:16

background_move_pool_size

用于将数据部分移动到另一个磁盘或卷的线程最大数量,用于 *MergeTree 引擎表在后台。

类型:UInt64

默认值:8

background_pool_size

设置执行使用 MergeTree 引擎的表的后台合并和变异的线程数量。您只能在运行时增加线程数。要降低线程数,您必须重新启动服务器。通过调整此设置,您可以管理 CPU 和磁盘负载。较小的池大小利用较少的 CPU 和磁盘资源,但后台进程的进度较慢,最终可能会影响查询性能。

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

类型:UInt64

默认值:16

background_schedule_pool_size

用于持续执行复制表、Kafka 流式传输和 DNS 缓存更新的一些轻量级定期操作的线程最大数量。

类型:UInt64

默认值:512

backup_threads

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

类型:UInt64

默认值:16

backups_io_thread_pool_queue_size

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

类型:UInt64

默认值:0

cache_size_to_ram_max_ratio

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

类型:双精度浮点数

默认值:0.5

concurrent_threads_soft_limit_num

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

零表示无限制。

类型:UInt64

默认值:0

concurrent_threads_soft_limit_ratio_to_cores

与 concurrent_threads_soft_limit_num 相同,但与核心数的比率。

类型:UInt64

默认值:0

default_database

默认数据库名称。

类型:字符串

默认值:default

disable_internal_dns_cache

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

类型:布尔值

默认值:0

dns_cache_max_entries

内部 DNS 缓存最大条目数。

类型:UInt64

默认值:10000

dns_cache_update_period

内部 DNS 缓存更新周期(单位:秒)。

类型:Int32

默认值:15

dns_max_consecutive_failures

在将主机从 ClickHouse DNS 缓存中移除之前,允许连续解析失败的最大次数。

类型:UInt32

默认值:10

index_mark_cache_policy

索引标记缓存策略名称。

类型:字符串

默认值:SLRU

index_mark_cache_size

索引标记缓存的大小。设置为零表示禁用。

注意

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

类型:UInt64

默认值:0

index_mark_cache_size_ratio

索引标记缓存中受保护队列相对于缓存总大小的比例。

类型:双精度浮点数

默认值:0.5

index_uncompressed_cache_policy

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

类型:字符串

默认值:SLRU

index_uncompressed_cache_size

MergeTree 索引未压缩块的缓存大小。设置为零表示禁用。

注意

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

类型:UInt64

默认值:0

index_uncompressed_cache_size_ratio

索引未压缩缓存中受保护队列相对于缓存总大小的比例。

类型:双精度浮点数

默认值:0.5

io_thread_pool_queue_size

IO 线程池的队列大小。设置为零表示无限制。

类型:UInt64

默认值:10000

mark_cache_policy

标记缓存策略名称。

类型:字符串

默认值:SLRU

mark_cache_size

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

注意

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

类型:UInt64

默认值:5368709120

mark_cache_size_ratio

标记缓存中受保护队列相对于缓存总大小的比例。

类型:双精度浮点数

默认值:0.5

max_backup_bandwidth_for_server

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

类型:UInt64

默认值:0

max_backups_io_thread_pool_free_size

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

类型:UInt64

默认值:0

max_backups_io_thread_pool_size

用于 BACKUP 查询的 IO 操作的最大线程数。

类型:UInt64

默认值:1000

max_concurrent_queries

并发执行查询总数的限制。设置为零表示无限制。请注意,还必须考虑插入和选择查询的限制,以及用户查询的最大数量限制。另请参阅 max_concurrent_insert_queries、max_concurrent_select_queries、max_concurrent_queries_for_all_users。设置为零表示无限制。

注意

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

类型:UInt64

默认值:0

max_concurrent_insert_queries

并发插入查询总数的限制。设置为零表示无限制。

注意

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

类型:UInt64

默认值:0

max_concurrent_select_queries

并发选择查询总数的限制。设置为零表示无限制。

注意

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

类型:UInt64

默认值:0

max_waiting_queries

并发等待查询总数的限制。当所需的表正在异步加载时(请参阅 async_load_databases),等待查询的执行将被阻塞。请注意,在检查 max_concurrent_queriesmax_concurrent_insert_queriesmax_concurrent_select_queriesmax_concurrent_queries_for_usermax_concurrent_queries_for_all_users 限制时,不会计算等待查询。此更正是为了避免在服务器启动后立即达到这些限制。设置为零表示无限制。

注意

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

类型:UInt64

默认值:0

max_connections

服务器最大连接数。

类型:Int32

默认值:1024

max_io_thread_pool_free_size

IO 线程池的最大空闲大小。

类型:UInt64

默认值:0

max_io_thread_pool_size

用于 IO 操作的最大线程数。

类型:UInt64

默认值:100

max_local_read_bandwidth_for_server

本地读取的最大速度(单位:字节/秒)。设置为零表示无限制。

类型:UInt64

默认值:0

max_local_write_bandwidth_for_server

本地写入的最大速度(单位:字节/秒)。设置为零表示无限制。

类型:UInt64

默认值:0

max_partition_size_to_drop

删除分区的限制。

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

注意

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

max_remote_read_network_bandwidth_for_server

读取数据时网络数据交换的最大速度(单位:字节/秒)。设置为零表示无限制。

类型:UInt64

默认值:0

max_remote_write_network_bandwidth_for_server

写入数据时网络数据交换的最大速度(单位:字节/秒)。设置为零表示无限制。

类型:UInt64

默认值:0

max_server_memory_usage

服务器总内存使用量的限制。设置为零表示无限制。

默认 max_server_memory_usage 值计算为 memory_amount * max_server_memory_usage_to_ram_ratio

类型:UInt64

默认值:0

max_server_memory_usage_to_ram_ratio

与 max_server_memory_usage 相同,但以物理内存的比例表示。允许在内存较小的系统上降低内存使用量。设置为零表示无限制。

在 RAM 和交换空间较少的主机上,您可能需要将 max_server_memory_usage_to_ram_ratio 设置为大于 1 的值。

类型:双精度浮点数

默认值:0.9

max_build_vector_similarity_index_thread_pool_size

构建向量索引时使用的最大线程数。设置为 0 表示使用所有核心。

类型:UInt64

默认值:16

cgroups_memory_usage_observer_wait_time

服务器最大允许内存消耗根据 cgroups 中相应的阈值调整的时间间隔(单位:秒)。(请参阅设置 cgroup_memory_watcher_hard_limit_ratiocgroup_memory_watcher_soft_limit_ratio)。

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

类型:UInt64

默认值:15

cgroup_memory_watcher_hard_limit_ratio

指定服务器进程根据 cgroups 的内存消耗的“硬”阈值,在此阈值之后,服务器的最大内存消耗将调整到阈值。

请参阅设置 cgroups_memory_usage_observer_wait_timecgroup_memory_watcher_soft_limit_ratio

类型:双精度浮点数

默认值:0.95

cgroup_memory_watcher_soft_limit_ratio

指定服务器进程根据 cgroups 的内存消耗的“软”阈值,在此阈值之后,jemalloc 中的 arena 将被清除。

请参阅设置 cgroups_memory_usage_observer_wait_timecgroup_memory_watcher_hard_limit_ratio

类型:双精度浮点数

默认值:0.9

max_table_size_to_drop

删除表的限制。

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

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

默认值为 50 GB。值为 0 表示可以无限制地删除所有表。**示例**

<max_table_size_to_drop>0</max_table_size_to_drop>

max_database_num_to_warn

如果附加的数据库数量超过指定值,ClickHouse 服务器将向 system.warnings 表添加警告消息。默认值为 1000。

示例

<max_database_num_to_warn>50</max_database_num_to_warn>

max_table_num_to_warn

如果附加的表数量超过指定值,ClickHouse 服务器将向 system.warnings 表添加警告消息。默认值为 5000。

示例

<max_table_num_to_warn>400</max_table_num_to_warn>

max_view_num_to_warn

如果附加的视图数量超过指定值,ClickHouse 服务器将向 system.warnings 表添加警告消息。默认值为 10000。

示例

<max_view_num_to_warn>400</max_view_num_to_warn>

max_dictionary_num_to_warn

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

示例

<max_dictionary_num_to_warn>400</max_dictionary_num_to_warn>

max_分区_num_to_警告

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

示例

<max_part_num_to_warn>400</max_part_num_to_warn>

max_table_num_to_抛出异常

如果表的数量大于此值,服务器将抛出异常。0 表示没有限制。视图、远程表、字典、系统表不计入。仅统计 Atomic/Ordinary/Replicated/Lazy 数据库引擎中的表。默认值:0

示例

<max_table_num_to_throw>400</max_table_num_to_throw>

max_database_num_to_抛出异常

如果数据库的数量大于此值,服务器将抛出异常。0 表示没有限制。默认值:0

示例

<max_database_num_to_throw>400</max_database_num_to_throw>

最大磁盘临时数据大小

外部聚合、联接或排序可以使用存储的最大量。超过此限制的查询将失败并抛出异常。零表示无限制。

另请参阅max_temporary_data_on_disk_size_for_usermax_temporary_data_on_disk_size_for_query

类型:UInt64

默认值:0

线程池空闲线程最大数量

如果全局线程池中**空闲**线程的数量大于max_thread_pool_free_size,则 ClickHouse 会释放某些线程占用的资源,并减少池的大小。如有必要,可以重新创建线程。

类型:UInt64

默认值:1000

线程池最大线程数

可以从操作系统分配并用于查询执行和后台操作的最大线程数。

类型:UInt64

默认值:10000

内存映射缓存大小

设置映射文件的缓存大小(以字节为单位)。此设置允许避免频繁的打开/关闭调用(由于后续的页面错误,这些调用非常昂贵),并重用来自多个线程和查询的映射。设置值是映射区域的数量(通常等于映射文件的数量)。映射文件中数据的数量可以在system.metricssystem.metric_log表中使用MMappedFilesMMappedFileBytes指标进行监控。此外,在system.asynchronous_metricssystem.asynchronous_metrics_log中使用MMapCacheCells指标,在system.eventssystem.processessystem.query_logsystem.query_thread_logsystem.query_views_log中使用CreatedReadBufferMMapCreatedReadBufferMMapFailedMMappedFileCacheHitsMMappedFileCacheMisses事件。

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

注意

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

类型:UInt64

默认值:1000

恢复线程数

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

类型:UInt64

默认值:16

在堆栈跟踪中显示地址

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

类型:布尔值

默认值:1

关闭时等待未完成的查询

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

类型:布尔值

默认值:0

将临时数据存储在缓存中

使用此选项,临时数据将存储在特定磁盘的缓存中。在本节中,应使用类型为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>

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

<temporary_data_in_cache>tiny_local_cache</temporary_data_in_cache>
</clickhouse>

类型:字符串

默认

线程池队列大小

可以安排在全局线程池上的作业的最大数量。增加队列大小会导致更大的内存使用量。建议将此值设置为等于max_thread_pool_size。零表示无限制。

类型:UInt64

默认值:10000

临时数据存储策略

用于存储临时数据的策略。另请参阅 MergeTree 表引擎文档。

注意
  • 只能使用一个选项来配置临时数据存储:tmp_pathtmp_policytemporary_data_in_cache
  • move_factorkeep_free_space_bytesmax_data_part_size_bytes将被忽略。
  • 策略应只有一个包含本地磁盘的卷。

示例

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

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

<policies>
<tmp_two_disks>
<volumes>
<main>
<disk>disk1</disk>
<disk>disk2</disk>
</main>
</volumes>
</tmp_two_disks>
</policies>
</storage_configuration>

<tmp_policy>tmp_two_disks</tmp_policy>
</clickhouse>

类型:字符串

默认

未压缩缓存策略

未压缩缓存策略名称。

类型:字符串

默认值:SLRU

未压缩缓存大小

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

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

在某些情况下,未压缩缓存对于非常短的查询很有优势。

注意

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

类型:UInt64

默认值:0

未压缩缓存大小比例

未压缩缓存中受保护队列相对于缓存总大小的比例。

类型:双精度浮点数

默认值:0.5

内置字典重载间隔

重新加载内置字典的间隔(以秒为单位)。

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

默认值:3600。

示例

<builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>

压缩

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

注意

如果您刚开始使用 ClickHouse,请不要使用它。

配置模板

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

<case>字段

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

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

满足条件时的操作

  • 如果数据分区匹配某个条件集,则 ClickHouse 使用指定的压缩方法。
  • 如果数据分区匹配多个条件集,则 ClickHouse 使用第一个匹配的条件集。

如果没有条件匹配数据分区,则 ClickHouse 使用lz4压缩。

示例

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

加密

配置用于获取密钥的命令,该密钥将由加密编解码器使用。密钥(或密钥)应写入环境变量或设置为配置文件中。

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

示例

从配置文件加载

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

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

从配置文件加载密钥(密钥为十六进制)

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

从环境变量加载密钥

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

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

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

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

这里current_key_id显示当前加密密钥。

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

<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 字节长)。

错误日志

默认情况下禁用。

启用

要手动打开错误历史记录收集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>

自定义设置前缀

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

示例

<custom_settings_prefixes>custom_</custom_settings_prefixes>

另请参阅

核心转储

配置核心转储文件大小的软限制。

可能的值

  • 正整数。

默认值:1073741824(1 GB)。

注意

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

示例

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

原子数据库删除表前的延迟时间(秒)

删除的表可以使用UNDROP语句恢复的延迟时间。如果DROP TABLESYNC修饰符运行,则忽略此设置。

默认值:480(8 分钟)。

数据库目录未使用目录隐藏超时时间(秒)

清理store/目录中垃圾的任务的参数。如果某个子目录未被 ClickHouse 服务器使用,并且在过去的database_catalog_unused_dir_hide_timeout_sec秒内未修改过此目录,则该任务将通过删除所有访问权限来“隐藏”此目录。它也适用于 ClickHouse 服务器不希望在store/内看到的目录。零表示“立即”。

默认值:3600(1 小时)。

数据库目录未使用目录删除超时时间(秒)

清理store/目录垃圾的任务参数。如果某个子目录未被ClickHouse服务器使用,并且之前已被“隐藏”(参见database_catalog_unused_dir_hide_timeout_sec),并且在过去的database_catalog_unused_dir_rm_timeout_sec秒内未被修改,则该任务将删除此目录。它也适用于ClickHouse服务器在store/目录中不希望看到的目录。零表示“永不”。

默认值:2592000(30天)。

database_catalog_unused_dir_cleanup_period_sec

清理store/目录垃圾的任务参数。设置任务的调度周期。零表示“永不”。

默认值:86400(1天)。

default_profile

默认设置配置文件。

设置配置文件位于参数user_config指定的文件中。

示例

<default_profile>default</default_profile>

default_replica_path

ZooKeeper中表的路径。

示例

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

default_replica_name

ZooKeeper中的副本名称。

示例

<default_replica_name>{replica}</default_replica_name>

dictionaries_config

字典配置文件的路径。

路径

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

另请参见“字典”。

示例

<dictionaries_config>*_dictionary.xml</dictionaries_config>

user_defined_executable_functions_config

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

路径

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

另请参见“可执行用户自定义函数”。

示例

<user_defined_executable_functions_config>*_function.xml</user_defined_executable_functions_config>

dictionaries_lazy_load

字典的延迟加载。

如果为true,则每个字典在第一次使用时加载。如果加载失败,则使用该字典的函数将抛出异常。

如果为false,则服务器在启动时加载所有字典。服务器将在启动时等待所有字典完成加载后再接收任何连接(例外情况:如果wait_dictionaries_load_at_startup设置为false - 请参见下文)。

默认为true

示例

<dictionaries_lazy_load>true</dictionaries_lazy_load>

format_schema_path

包含输入数据方案的目录的路径,例如CapnProto格式的方案。

示例

  <!-- Directory containing schema files for various input formats. -->
<format_schema_path>format_schemas/</format_schema_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>

http_port/https_port

通过 HTTP(s) 连接到服务器的端口。

如果指定了https_port,则必须配置openSSL

如果指定了http_port,则即使设置了 OpenSSL 配置也会被忽略。

示例

<https_port>9999</https_port>

http_server_default_response

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

示例

访问https://127.0.0.1: 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>

hsts_max_age

HSTS 过期时间(秒)。默认值为 0,表示 ClickHouse 禁用了 HSTS。如果设置一个正数,则 HSTS 将被启用,并且 max-age 为您设置的数字。

示例

<hsts_max_age>600000</hsts_max_age>

mlock_executable

在启动后执行 mlockall 以降低首次查询延迟并防止 ClickHouse 可执行文件在高 IO 负载下被换出。建议启用此选项,但会导致启动时间增加最多几秒钟。请记住,此参数在没有“CAP_IPC_LOCK”功能的情况下将不起作用。**示例**

<mlock_executable>false</mlock_executable>

include_from

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

有关更多信息,请参见“配置文件”部分。

示例

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

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>

interserver_http_port

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

示例

<interserver_http_port>9009</interserver_http_port>

interserver_http_host

其他服务器可用于访问此服务器的主机名。

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

有助于脱离特定的网络接口。

示例

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

interserver_https_port

通过HTTPS在 ClickHouse 服务器之间交换数据的端口。

示例

<interserver_https_port>9010</interserver_https_port>

interserver_https_host

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

示例

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

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>

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

keep_alive_timeout

ClickHouse 在关闭连接之前等待传入请求的秒数。默认为 10 秒。

示例

<keep_alive_timeout>10</keep_alive_timeout>

max_keep_alive_requests

通过单个保持活动连接的最大请求数,直到 ClickHouse 服务器关闭它为止。默认为 10000。

示例

<max_keep_alive_requests>10</max_keep_alive_requests>

listen_host

对请求可以来自的主机进行限制。如果希望服务器回复所有请求,请指定::

示例

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

listen_try

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

示例

<listen_try>0</listen_try>

listen_reuse_port

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

示例

<listen_reuse_port>0</listen_reuse_port>

listen_backlog

侦听套接字的回退(挂起连接的队列大小)。

默认值:4096(如 linux 5.4+ 中)。

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

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

所以即使您拥有非零的TcpExtListenOverflows(来自nstat),并且 ClickHouse 服务器的此计数器在增长,但这并不意味着需要增加此值,因为

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

示例

<listen_backlog>4096</listen_backlog>

日志记录

日志消息的位置和格式。

  • level – 日志级别。可接受的值:none(关闭日志记录)、fatalcriticalerrorwarningnoticeinformationdebugtracetest
  • log – 日志文件的路径。
  • errorlog – 错误日志文件的路径。
  • size – 轮换策略:日志文件的最大大小(以字节为单位)。一旦日志文件大小超过此阈值,它将被重命名并归档,并创建一个新的日志文件。
  • count – 轮换策略:ClickHouse 最多保留多少个历史日志文件。
  • stream_compress – 使用 LZ4 压缩日志消息。设置为 1true 以启用。
  • console – 不将日志消息写入日志文件,而是将其打印到控制台。设置为 1true 以启用。如果 ClickHouse 不以守护进程模式运行,则默认为 1,否则为 0
  • console_log_level – 控制台输出的日志级别。默认为 level
  • formatting – 控制台输出的日志格式。目前,仅支持 json
  • use_syslog - 也将日志输出转发到 syslog。
  • syslog_level - 记录到 syslog 的日志级别。

日志格式说明符

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

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

说明符描述示例
%%字面量 %%
%n换行符
%t水平制表符
%Y年份作为十进制数字,例如 20172023
%y年份的后两位数字(范围[00,99])23
%C年份的前两位数字(范围[00,99])20
%G四位数的 ISO 8601 基于周的年份,即包含指定周的年份。通常仅与 %V 结合使用才有用2023
%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])。一位数字前面有空格。  6
%a缩写星期名称,例如 Fri(取决于语言环境)Thu
%A完整星期名称,例如 Friday(取决于语言环境)Thursday
%w星期几作为整数,其中星期日为 0(范围[0-6])4
%u星期几作为十进制数字,其中星期一为 1(ISO 8601 格式)(范围[1-7])4
%H小时作为十进制数字,24 小时制(范围[00-23])18
%I小时作为十进制数字,12 小时制(范围[01,12])06
%M分钟作为十进制数字(范围[00,59])32
%S秒作为十进制数字(范围[00,60])07
%c标准日期和时间字符串,例如 Sun Oct 17 04:41:13 2010(取决于语言环境)Thu Jul 6 18:32:07 2023
%x本地化的日期表示(取决于语言环境)07/06/23
%X本地化的时间表示,例如 18:40:20 或 6:40:20 PM(取决于语言环境)18:32:07
%D短 MM/DD/YY 日期,等效于 %m/%d/%y07/06/23
%F短 YYYY-MM-DD 日期,等效于 %Y-%m-%d2023-07-06
%r本地化的 12 小时制时间(取决于语言环境)06:32:07 PM
%R等效于 "%H:%M"18:32
%T等效于 "%H:%M:%S"(ISO 8601 时间格式)18:32:07
%p本地化的上午或下午表示(取决于语言环境)PM
%zUTC 的偏移量,采用 ISO 8601 格式(例如 -0430),如果时区信息不可用,则不显示字符+0800
%Z取决于语言环境的时区名称或缩写,如果时区信息不可用,则不显示字符Z AWST

示例

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

仅在控制台中打印日志消息

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

按级别覆盖

可以覆盖各个日志名称的日志级别。例如,要静音所有日志记录器“Backup”和“RBAC”的消息。

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

syslog

将日志消息另外写入 syslog

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

<syslog> 的键

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

日志格式

您可以指定将在控制台日志中输出的日志格式。目前,仅支持 JSON。这是一个输出 JSON 日志的示例

{
"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>
<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> 标记。

send_crash_reports

通过 Sentry 向 ClickHouse 核心开发团队发送崩溃报告的可选设置。启用此功能,尤其是在预生产环境中,将不胜感激。

为了使此功能正常运行,服务器将需要通过 IPv4 访问公共互联网(在撰写本文时,IPv6 不受 Sentry 支持)。

  • enabled – 用于启用此功能的布尔标志,默认为 false。设置为 true 以允许发送崩溃报告。
  • send_logical_errorsLOGICAL_ERROR 类似于 assert,它是 ClickHouse 中的一个错误。此布尔标志启用将此异常发送到 sentry(默认值:false)。
  • endpoint – 您可以覆盖用于发送崩溃报告的 Sentry 端点 URL。它可以是单独的 Sentry 帐户或您自托管的 Sentry 实例。使用 Sentry DSN 语法。
  • anonymize - 避免将服务器主机名附加到崩溃报告中。
  • http_proxy - 配置用于发送崩溃报告的 HTTP 代理。
  • debug - 将 Sentry 客户端设置为调试模式。
  • tmp_path - 临时崩溃报告状态的文件系统路径。
  • environment - ClickHouse 服务器正在运行的环境的任意名称。它将在每个崩溃报告中提及。默认值为 testprod,具体取决于 ClickHouse 的版本。

推荐使用方法

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

复制表的参数替换。

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

有关更多信息,请参阅部分 创建复制表

示例

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

replica_group_name

数据库 Replicated 的副本组名称。

由 Replicated 数据库创建的集群将包含同一组中的副本。DDL 查询将仅等待同一组中的副本。

默认为空。

示例

<replica_group_name>backups</replica_group_name>

默认值:``。

max_open_files

打开文件的最大数量。

默认值:maximum

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

示例

<max_open_files>262144</max_open_files>

max_table_size_to_drop

删除表的限制。

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

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

默认值:50 GB。

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

示例

<max_table_size_to_drop>0</max_table_size_to_drop>

max_partition_size_to_drop

删除分区的限制。

如果 MergeTree 表的大小超过 max_partition_size_to_drop(以字节为单位),则您无法使用 DROP PARTITION 查询删除分区。

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

默认值:50 GB。

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

注意

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

示例

<max_partition_size_to_drop>0</max_partition_size_to_drop>

max_thread_pool_size

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

可能的值

  • 正整数。

默认值:10000

示例

<max_thread_pool_size>12000</max_thread_pool_size>

max_thread_pool_free_size

如果全局线程池中**空闲**线程的数量大于max_thread_pool_free_size,则 ClickHouse 会释放某些线程占用的资源,并减少池的大小。如有必要,可以重新创建线程。

可能的值

  • 正整数。

默认值:1000

示例

<max_thread_pool_free_size>1200</max_thread_pool_free_size>

thread_pool_queue_size

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

可能的值

  • 正整数。
  • 0 — 无限制。

默认值:10000

示例

<thread_pool_queue_size>12000</thread_pool_queue_size>

max_io_thread_pool_size

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

可能的值

  • 正整数。

默认值:100

max_io_thread_pool_free_size

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

可能的值

  • 正整数。

默认值:0

io_thread_pool_queue_size

可以调度到 IO 线程池中的作业的最大数量。

可能的值

  • 正整数。
  • 0 — 无限制。

默认值:10000

max_backups_io_thread_pool_size

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

可能的值

  • 正整数。

默认值:1000

max_backups_io_thread_pool_free_size

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

可能的值

  • 正整数。
  • 零。

默认值:0

backups_io_thread_pool_queue_size

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

可能的值

  • 正整数。
  • 0 — 无限制。

默认值:0

background_pool_size

设置执行使用 MergeTree 引擎的表的后台合并和修改操作的线程数。此设置也可以在服务器启动时从 default 配置文件中应用,以确保 ClickHouse 服务器启动时的向后兼容性。您只能在运行时增加线程数。要减少线程数,您必须重新启动服务器。通过调整此设置,您可以管理 CPU 和磁盘负载。较小的池大小利用较少的 CPU 和磁盘资源,但后台进程进展较慢,最终可能会影响查询性能。

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

可能的值

  • 任何正整数。

默认值:16。

示例

<background_pool_size>16</background_pool_size>

background_merges_mutations_concurrency_ratio

设置线程数量与可以并发执行的后台合并和变异数量之间的比率。例如,如果比率等于 2 且 background_pool_size 设置为 16,则 ClickHouse 可以并发执行 32 个后台合并。这是可能的,因为后台操作可以暂停和推迟。这需要为小型合并提供更高的执行优先级。您只能在运行时增加此比率。要降低它,您必须重新启动服务器。与 background_pool_size 设置相同 background_merges_mutations_concurrency_ratio 可以从 default 配置文件应用以实现向后兼容性。

可能的值

  • 任何正整数。

默认值:2。

示例

<background_merges_mutations_concurrency_ratio>3</background_merges_mutations_concurrency_ratio>

merges_mutations_memory_usage_soft_limit

设置执行合并和修改操作允许使用的 RAM 限制。零表示无限制。如果 ClickHouse 达到此限制,它将不会调度任何新的后台合并或修改操作,但会继续执行已计划的任务。

可能的值

  • 任何正整数。

示例

<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

默认值:0.5

另请参阅

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,则服务器启动时加载所有数据库。

默认为 false

示例

<async_load_databases>true</async_load_databases>

tables_loader_foreground_pool_size

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

可能的值

  • 任何正整数。
  • 零。使用所有可用的 CPU。

默认值:0。

tables_loader_background_pool_size

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

可能的值

  • 任何正整数。
  • 零。使用所有可用的 CPU。

默认值:0。

merge_tree

针对 MergeTree 中的表的微调。

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

示例

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

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>

replicated_merge_tree

针对 ReplicatedMergeTree 中的表的微调。

此设置具有更高的优先级。

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

示例

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

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

设置示例

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

part_log

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

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

使用以下参数配置日志记录

  • database – 数据库名称。
  • table – 系统表名称。
  • partition_by系统表的自定义分区键。如果定义了 engine,则不能使用。
  • order_by - 系统表的自定义排序键。如果定义了 engine,则不能使用。
  • engine - 系统表的 MergeTree 引擎定义。如果定义了 partition_byorder_by,则不能使用。
  • flush_interval_milliseconds – 将内存缓冲区中的数据刷新到表的间隔。
  • max_size_rows – 日志的最大行数。当未刷新的日志数量达到 max_size 时,日志将转储到磁盘。默认值:1048576。
  • reserved_size_rows – 日志预分配的内存大小(以行数计)。默认值:8192。
  • buffer_size_rows_flush_threshold – 行数阈值,达到此阈值将在后台启动将日志刷新到磁盘的操作。默认值:max_size_rows / 2

  • flush_on_crash - 指示在崩溃的情况下是否应将日志转储到磁盘。默认值:false。
  • storage_policy – 用于表的存储策略名称(可选)。
  • settings - 其他参数,用于控制 MergeTree 的行为(可选)。

示例

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

path

包含数据的目录的路径。

注意

尾部斜杠是必须的。

示例

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

query_log

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

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

使用以下参数配置日志记录

  • database – 数据库名称。
  • table – 将查询记录到的系统表名称。
  • partition_by系统表的自定义分区键。如果定义了 engine,则不能使用。
  • order_by - 系统表的自定义排序键。如果定义了 engine,则不能使用。
  • engine - 系统表的 MergeTree 引擎定义。如果定义了 partition_byorder_by,则不能使用。
  • flush_interval_milliseconds – 将内存缓冲区中的数据刷新到表的间隔。
  • max_size_rows – 日志的最大行数。当未刷新的日志数量达到 max_size 时,日志将转储到磁盘。默认值:1048576。
  • reserved_size_rows – 日志预分配的内存大小(以行数计)。默认值:8192。
  • buffer_size_rows_flush_threshold – 行数阈值,达到此阈值将在后台启动将日志刷新到磁盘的操作。默认值:max_size_rows / 2

  • flush_on_crash - 指示在崩溃的情况下是否应将日志转储到磁盘。默认值:false。
  • storage_policy – 用于表的存储策略名称(可选)。
  • settings - 其他参数,用于控制 MergeTree 的行为(可选)。

如果表不存在,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_cache

查询缓存 配置。

以下设置可用

  • max_size_in_bytes:缓存的最大大小(以字节为单位)。0 表示查询缓存已禁用。默认值:1073741824(1 GiB)。
  • max_entries:存储在缓存中的 SELECT 查询结果的最大数量。默认值:1024
  • max_entry_size_in_bytesSELECT 查询结果可以保存到缓存中的最大大小(以字节为单位)。默认值:1048576(1 MiB)。
  • max_entry_size_in_rowsSELECT 查询结果可以保存到缓存中的最大行数。默认值:30000000(3000万)。

更改后的设置立即生效。

注意

查询缓存的数据分配在 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_thread_log

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

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

使用以下参数配置日志记录

  • database – 数据库名称。
  • table – 将查询记录到的系统表名称。
  • partition_by系统表的自定义分区键。如果定义了 engine,则不能使用。
  • order_by - 系统表的自定义排序键。如果定义了 engine,则不能使用。
  • engine - 系统表的 MergeTree 引擎定义。如果定义了 partition_byorder_by,则不能使用。
  • flush_interval_milliseconds – 将内存缓冲区中的数据刷新到表的间隔。
  • max_size_rows – 日志的最大行数。当未刷新的日志数量达到 max_size_rows 时,日志将转储到磁盘。默认值:1048576。
  • reserved_size_rows – 日志预分配的内存大小(以行数计)。默认值:8192。
  • buffer_size_rows_flush_threshold – 行数阈值,达到此阈值将在后台启动将日志刷新到磁盘的操作。默认值:max_size_rows / 2

  • flush_on_crash - 指示在崩溃的情况下是否应将日志转储到磁盘。默认值:false。
  • storage_policy – 用于表的存储策略名称(可选)。
  • settings - 其他参数,用于控制 MergeTree 的行为(可选)。

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

示例

<query_thread_log>
<database>system</database>
<table>query_thread_log</table>
<partition_by>toMonday(event_date)</partition_by>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
<max_size_rows>1048576</max_size_rows>
<reserved_size_rows>8192</reserved_size_rows>
<buffer_size_rows_flush_threshold>524288</buffer_size_rows_flush_threshold>
<flush_on_crash>false</flush_on_crash>
</query_thread_log>

query_views_log

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

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

使用以下参数配置日志记录

  • database – 数据库名称。
  • table – 将查询记录到的系统表名称。
  • partition_by系统表的自定义分区键。如果定义了 engine,则不能使用。
  • order_by - 系统表的自定义排序键。如果定义了 engine,则不能使用。
  • engine - 系统表的 MergeTree 引擎定义。如果定义了 partition_byorder_by,则不能使用。
  • flush_interval_milliseconds – 将内存缓冲区中的数据刷新到表的间隔。
  • max_size_rows – 日志的最大行数。当未刷新的日志数量达到 max_size 时,日志将转储到磁盘。默认值:1048576。
  • reserved_size_rows – 日志预分配的内存大小(以行数计)。默认值:8192。
  • buffer_size_rows_flush_threshold – 行数阈值,达到此阈值将在后台启动将日志刷新到磁盘的操作。默认值:max_size_rows / 2

  • flush_on_crash - 指示在崩溃的情况下是否应将日志转储到磁盘。默认值:false。
  • storage_policy – 用于表的存储策略名称(可选)。
  • settings - 其他参数,用于控制 MergeTree 的行为(可选)。

如果表不存在,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>

text_log

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

参数

  • level — 将存储在表中的最大消息级别(默认情况下为 Trace)。
  • database — 数据库名称。
  • table — 表名称。
  • partition_by系统表的自定义分区键。如果定义了 engine,则不能使用。
  • order_by - 系统表的自定义排序键。如果定义了 engine,则不能使用。
  • engine - 系统表的 MergeTree 引擎定义。如果定义了 partition_byorder_by,则不能使用。
  • flush_interval_milliseconds — 将数据从内存缓冲区刷新到表的时间间隔。
  • max_size_rows – 日志的最大行数。当未刷新的日志数量达到 max_size 时,日志将转储到磁盘。默认值:1048576。
  • reserved_size_rows – 日志预分配的内存大小(以行数计)。默认值:8192。
  • buffer_size_rows_flush_threshold – 行数阈值,达到此阈值将在后台启动将日志刷新到磁盘的操作。默认值:max_size_rows / 2

  • flush_on_crash - 指示在崩溃的情况下是否应将日志转储到磁盘。默认值:false。
  • storage_policy – 用于表的存储策略名称(可选)。
  • settings - 其他参数,用于控制 MergeTree 的行为(可选)。

示例

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

trace_log

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

参数

  • database — 用于存储表的数据库。
  • table — 表名称。
  • partition_by系统表的自定义分区键。如果定义了 engine,则不能使用。
  • order_by - 系统表的自定义排序键。如果定义了 engine,则不能使用。
  • engine - MergeTree 引擎定义,用于系统表。如果定义了 partition_byorder_by,则不能使用。
  • flush_interval_milliseconds — 将数据从内存缓冲区刷新到表的时间间隔。
  • max_size_rows – 日志的最大行数。当未刷新的日志数量达到 max_size 时,日志将转储到磁盘。默认值:1048576。
  • reserved_size_rows – 日志预分配的内存大小(以行数计)。默认值:8192。
  • buffer_size_rows_flush_threshold – 行数阈值,达到此阈值将在后台启动将日志刷新到磁盘的操作。默认值:max_size_rows / 2

  • storage_policy – 用于表的存储策略名称(可选)。
  • settings - 其他参数,用于控制 MergeTree 的行为(可选)。

默认服务器配置文件 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>
</trace_log>

asynchronous_insert_log

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

参数

  • database — 数据库名称。
  • table — 表名称。
  • partition_by系统表的自定义分区键。如果定义了 engine,则不能使用。
  • engine - MergeTree 引擎定义,用于系统表。如果定义了 partition_by,则不能使用。
  • flush_interval_milliseconds — 将数据从内存缓冲区刷新到表的时间间隔。
  • max_size_rows – 日志的最大行数。当未刷新的日志数量达到 max_size 时,日志将转储到磁盘。默认值:1048576。
  • reserved_size_rows – 日志预分配的内存大小(以行数计)。默认值:8192。
  • buffer_size_rows_flush_threshold – 行数阈值,达到此阈值将在后台启动将日志刷新到磁盘的操作。默认值:max_size_rows / 2

  • flush_on_crash - 指示在崩溃的情况下是否应将日志转储到磁盘。默认值:false。
  • storage_policy – 用于表的存储策略名称(可选)。

示例

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

crash_log

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

参数

  • database — 用于存储表的数据库。
  • table — 表名称。
  • partition_by系统表的自定义分区键。如果定义了 engine,则不能使用。
  • order_by - 系统表的自定义排序键。如果定义了 engine,则不能使用。
  • engine - MergeTree 引擎定义,用于系统表。如果定义了 partition_byorder_by,则不能使用。
  • flush_interval_milliseconds — 将数据从内存缓冲区刷新到表的时间间隔。
  • max_size_rows – 日志的最大行数。当未刷新的日志数量达到 max_size 时,日志将转储到磁盘。默认值:1048576。
  • reserved_size_rows – 日志预分配的内存大小(以行数计)。默认值:8192。
  • buffer_size_rows_flush_threshold – 行数阈值,达到此阈值将在后台启动将日志刷新到磁盘的操作。默认值:max_size_rows / 2

  • flush_on_crash - 指示在崩溃的情况下是否应将日志转储到磁盘。默认值:false。
  • storage_policy – 用于表的存储策略名称(可选)。
  • settings - 其他参数,用于控制 MergeTree 的行为(可选)。

默认服务器配置文件 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>

backup_log

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

参数

  • database — 数据库名称。
  • table — 表名称。
  • partition_by自定义分区键,用于系统表。如果定义了 engine,则不能使用。
  • order_by - 自定义排序键,用于系统表。如果定义了 engine,则不能使用。
  • engine - MergeTree 引擎定义,用于系统表。如果定义了 partition_byorder_by,则不能使用。
  • flush_interval_milliseconds — 将数据从内存缓冲区刷新到表的时间间隔。
  • max_size_rows – 日志的最大行数。当未刷新的日志数量达到 max_size 时,日志将转储到磁盘。默认值:1048576。
  • reserved_size_rows – 日志预分配的内存大小(以行数计)。默认值:8192。
  • buffer_size_rows_flush_threshold – 行数阈值,达到此阈值将在后台启动将日志刷新到磁盘的操作。默认值:max_size_rows / 2

  • flush_on_crash - 指示在崩溃的情况下是否应将日志转储到磁盘。默认值:false。
  • storage_policy – 用于表的存储策略名称(可选)。
  • settings - 其他参数,用于控制 MergeTree 的行为(可选)。

示例

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

query_masking_rules

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

示例

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

配置字段

  • name - 规则的名称(可选)。
  • regexp - 兼容 RE2 的正则表达式(必填)。
  • replace - 敏感数据的替换字符串(可选,默认情况下为六个星号)。

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

system.events 表具有计数器 QueryMaskingRulesMatch,该计数器具有查询屏蔽规则匹配的总数。

对于分布式查询,每个服务器都必须单独配置,否则,传递到其他节点的子查询将存储而不会被屏蔽。

remote_servers

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

示例

<remote_servers incl="clickhouse_remote_servers" />

有关 incl 属性的值,请参阅“配置文件”部分。

另请参阅

timezone

服务器的时区。

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

当 DateTime 字段输出为文本格式(打印在屏幕上或文件中)以及从字符串获取 DateTime 时,时区对于 String 和 DateTime 格式之间的转换是必要的。此外,如果函数在输入参数中未收到时区,则在处理时间和日期的函数中使用时区。

示例

<timezone>Asia/Istanbul</timezone>

另请参阅

tcp_port

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

示例

<tcp_port>9000</tcp_port>

tcp_port_secure

用于与客户端进行安全通信的 TCP 端口。将其与 OpenSSL 设置一起使用。

可能的值

正整数。

默认值

<tcp_port_secure>9440</tcp_port_secure>

mysql_port

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

可能的值

正整数以指定要监听的端口号,或空值以禁用。

示例

<mysql_port>9004</mysql_port>

postgresql_port

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

可能的值

正整数以指定要监听的端口号,或空值以禁用。

示例

<postgresql_port>9005</postgresql_port>

tmp_path

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

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

示例

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

user_files_path

包含用户文件的目录。在表函数 file()fileCluster() 中使用。

示例

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

user_scripts_path

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

示例

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

user_defined_path

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

示例

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

users_config

包含以下内容的文件的路径:

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

示例

<users_config>users.xml</users_config>

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,则服务器将在启动时等待直到所有字典完成加载(成功或失败),然后再接收任何连接。

默认为true

示例

<wait_dictionaries_load_at_startup>true</wait_dictionaries_load_at_startup>

zookeeper

包含允许 ClickHouse 与 ZooKeeper 集群交互的设置。

当使用复制表时,ClickHouse 使用 ZooKeeper 存储副本的元数据。如果不使用复制表,则可以省略此参数部分。

此部分包含以下参数

  • node — ZooKeeper 端点。您可以设置多个端点。

    例如

    <node index="1">
<host>example_host</host>
<port>2181</port>
</node>
  The `index` attribute specifies the node order when trying to connect to the ZooKeeper cluster.
  • session_timeout_ms — 客户端会话的最大超时时间(以毫秒为单位)。
  • operation_timeout_ms — 单个操作的最大超时时间(以毫秒为单位)。
  • root — 用于 ClickHouse 服务器的 znode 的根节点。可选。znode
  • fallback_session_lifetime.min - 如果通过 zookeeper_load_balancing 策略解析的第一个 ZooKeeper 主机不可用,则将 ZooKeeper 会话的生命周期限制为备用节点。这样做是为了负载均衡,避免单个 ZooKeeper 主机负载过高。此设置指定备用会话的最小持续时间。以秒为单位设置。可选。默认为 3 小时。
  • fallback_session_lifetime.max - 如果通过 zookeeper_load_balancing 策略解析的第一个 ZooKeeper 主机不可用,则将 ZooKeeper 会话的生命周期限制为备用节点。这样做是为了负载均衡,避免单个 ZooKeeper 主机负载过高。此设置指定备用会话的最大持续时间。以秒为单位设置。可选。默认为 6 小时。
  • identity — ZooKeeper 可能要求的用户和密码,以访问请求的 znode。可选。
  • zookeeper_load_balancing - 指定 ZooKeeper 节点选择算法。
    • random - 随机选择一个 ZooKeeper 节点。
    • in_order - 选择第一个 ZooKeeper 节点,如果不可用则选择第二个,以此类推。
    • nearest_hostname - 选择主机名与服务器主机名最相似的 ZooKeeper 节点,主机名与名称前缀进行比较。
    • hostname_levenshtein_distance - 与 nearest_hostname 类似,但使用 Levenshtein 距离比较主机名。
    • first_or_random - 选择第一个 ZooKeeper 节点,如果不可用则随机选择剩余的 ZooKeeper 节点之一。
    • round_robin - 选择第一个 ZooKeeper 节点,如果重新连接则选择下一个。
  • use_compression — 如果设置为 true,则启用 Keeper 协议中的压缩。

配置示例

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

另请参阅

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 更安全。

使用此设置已存储的数据分片头信息无法恢复到之前的(非紧凑)表示形式。

默认值 0.

distributed_ddl

管理在集群上执行 分布式 DDL 查询(CREATE、DROP、ALTER、RENAME)。仅当启用 ZooKeeper 时才有效。

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

  • path: Keeper 中用于 DDL 查询 task_queue 的路径
  • profile: 用于执行 DDL 查询的配置文件
  • pool_size: 可以同时运行多少个 ON CLUSTER 查询
  • max_tasks_in_queue: 队列中最多可以有多少个任务。默认为 1000
  • task_max_lifetime: 如果节点的生存时间超过此值,则删除该节点。默认为 7 * 24 * 60 * 60(一周,以秒为单位)
  • cleanup_delay_period: 如果上次清理是在 cleanup_delay_period 秒前完成的,则在接收到新的节点事件后开始清理。默认为 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>

access_control_path

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

默认值:/var/lib/clickhouse/access/

另请参阅

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

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

示例

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

total_memory_profiler_step

设置每个峰值分配步骤的堆栈跟踪的内存大小(以字节为单位)。数据存储在 system.trace_log 系统表中,其中 query_id 等于空字符串。

可能的值

  • 正整数。

默认值:4194304

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 系统表中写入随机分配和释放。

默认值:0

compiled_expression_cache_size

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

可能的值

  • 正整数。

默认值:134217728

compiled_expression_cache_elements_size

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

可能的值

  • 正整数。

默认值:10000

display_secrets_in_show_and_select

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

希望查看机密信息的使用者还必须启用 format_display_secrets_in_show_and_select 格式设置 以及 displaySecretsInShowAndSelect 权限。

可能的值

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

默认值:0。

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>

<proxy> 字段

  • <http> - 一个或多个 HTTP 代理的列表
  • <https> - 一个或多个 HTTPS 代理的列表

<http><https> 字段

  • <uri> - 代理的 URI

远程代理解析器

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

配置模板

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

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

</proxy>

<proxy> 字段

  • <http> - 一个或多个解析器的列表*
  • <https> - 一个或多个解析器的列表*

<http><https> 字段

  • <resolver> - 解析器的端点和其他详细信息。您可以有多个 <resolver> 元素,但每个协议仅使用第一个 <resolver>。该协议的其他 <resolver> 元素将被忽略。这意味着(如果需要)负载均衡应由远程解析器实现。

<resolver> 字段

  • <endpoint> - 代理解析器的 URI
  • <proxy_scheme> - 最终代理 URI 的协议。可以是 httphttps
  • <proxy_port> - 代理解析器的端口号

  • <proxy_cache_time> - ClickHouse 从解析器缓存值的时间(以秒为单位)。将此值设置为 0 会导致 ClickHouse 针对每个 HTTP 或 HTTPS 请求都联系解析器。

优先级

代理设置按以下顺序确定

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

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

disable_tunneling_for_https_requests_over_http_proxy

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

no_proxy

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

示例

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

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

max_materialized_views_count_for_table

附加到表的物化视图数量限制。请注意,此处仅考虑直接依赖的视图,并且不考虑在一个视图之上创建另一个视图。

默认值:0

format_alter_operations_with_parentheses

如果设置为 true,则格式化查询中的更改操作将用括号括起来。这使得格式化更改查询的解析不太模糊。

类型:布尔值

默认值:0

ignore_empty_sql_security_in_create_view_query

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

注意

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

类型:布尔值

默认值:1

merge_workload

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

默认值:“default”

另请参阅

mutation_workload

用于规范突变和其他工作负载之间如何利用和共享资源。指定的值用作所有后台突变的 workload 设置值。可以通过合并树设置覆盖。

默认值:“default”

另请参阅

max_authentication_methods_per_user

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

类型:UInt64

默认值:100

零表示无限

use_legacy_mongodb_integration

使用旧版 MongoDB 集成实现。已弃用。

类型:布尔值

默认值:true