clickhouse配置项system.settings详解

调研学习clickhouse,上一章介绍了clickhouse的配置项users.xml,这一章介绍另一大项config.xml

从clickhouse的官网看,clickhouse的配置参数主要分了两大方面,一个是config.xml中的服务器配置参数(Server Settings),另一个是常规配置参数(setttings)

这里介绍常规配置参数(settings)

翻译自:https://clickhouse.tech/docs/en/operations/settings/settings/

版本:v20.10

目录

distributed_product_mode

enable_optimize_predicate_expression

fallback_to_stale_replicas_for_distributed_queries

force_index_by_date

force_primary_key

force_data_skipping_indices

format_schema

fsync_metadata

enable_http_compression

http_zlib_compression_level

http_native_compression_disable_checksumming_on_decompress

send_progress_in_http_headers

max_http_get_redirects

input_format_allow_errors_num

input_format_allow_errors_ratio

input_format_values_interpret_expressions

input_format_values_deduce_templates_of_expressions

input_format_values_accurate_types_of_literals

input_format_defaults_for_omitted_fields

input_format_tsv_empty_as_default

input_format_tsv_enum_as_number

input_format_null_as_default

input_format_skip_unknown_fields

input_format_import_nested_json

input_format_with_names_use_header

date_time_input_format

date_time_output_format

join_default_strictness

join_any_take_last_row

join_use_nulls

partial_merge_join_optimizations

partial_merge_join_rows_in_right_blocks

join_on_disk_max_files_to_merge

any_join_distinct_right_table_keys

temporary_files_codec

max_block_size

preferred_block_size_bytes

merge_tree_min_rows_for_concurrent_read

merge_tree_min_bytes_for_concurrent_read

merge_tree_min_rows_for_seek

merge_tree_min_bytes_for_seek

merge_tree_coarse_index_granularity

merge_tree_max_rows_to_use_cache

merge_tree_max_bytes_to_use_cache

min_bytes_to_use_direct_io

network_compression_method

network_zstd_compression_level

log_queries

log_queries_min_query_duration_ms

log_queries_min_type

log_query_threads

max_insert_block_size

min_insert_block_size_rows

min_insert_block_size_bytes

max_replica_delay_for_distributed_queries

max_threads

max_insert_threads

max_compress_block_size

min_compress_block_size

max_query_size

max_parser_depth

Interactive_delay 

connect_timeout,receive_timeout,send_timeout 

cancel_http_readonly_queries_on_client_close 

poll_interval 

max_distributed_connections 

distribution_connections_pool_size 

connect_timeout_with_failover_ms 

connection_pool_max_wait_ms 

connections_with_failover_max_tries 

extremes

kafka_max_wait_ms

use_uncompressed_cache 

replace_running_query 

replace_running_query_max_wait_ms 

stream_flush_interval_ms 

load_balancing

Random (by Default)

Nearest Hostname

In Order

First or Random

Round Robin

prefer_localhost_replica

totals_mode 

totals_auto_threshold

max_parallel_replicas 

compile

min_count_to_compile 

output_format_json_quote_64bit_integers

output_format_json_quote_denormals 

format_csv_delimiter 

input_format_csv_unquoted_null_literal_as_null 

input_format_csv_enum_as_number 

output_format_csv_crlf_end_of_line 

output_format_tsv_crlf_end_of_line 

insert_quorum 

insert_quorum_timeout

select_sequential_consistency 

insert_deduplicate

deduplicate_blocks_in_dependent_materialized_views

max_network_bytes 

max_network_bandwidth 

max_network_bandwidth_for_user 

max_network_bandwidth_for_all_users 

count_distinct_implementation

skip_unavailable_shards 

distribution_group_by_no_merge 

optimize_skip_unused_shards 

allow_nondeterministic_optimize_skip_unused_shards 

optimize_skip_unused_shards_nesting

force_optimize_skip_unused_shards 

optimize_distributed_group_by_sharding_key

optimize_throw_if_noop 

distribution_replica_error_half_life 

distributed_replica_error_cap

distribution_replica_max_ignored_errors 

distribution_directory_monitor_sleep_time_ms 

distribution_directory_monitor_max_sleep_time_ms 

distribution_directory_monitor_batch_inserts 

os_thread_priority 

query_profiler_real_time_period_ns 

query_profiler_cpu_time_period_ns 

allow_introspection_functions 

input_format_parallel_parsing 

min_chunk_bytes_for_parallel_parsing 

output_format_avro_codec 

output_format_avro_sync_interval 

format_avro_schema_registry_url 

input_format_avro_allow_missing_fields 

background_pool_size 

parallel_distributed_insert_select 

insert_distributed_sync 

use_compact_format_in_distributed_pa​​rts_names 

background_buffer_flush_schedule_pool_size 

background_move_pool_size 

background_schedule_pool_size 

always_fetch_merged_pa​​rt 

background_distributed_schedule_pool_size 

validate_polygons 

transform_null_in 

low_cardinality_max_dictionary_size 

low_cardinality_use_single_dictionary_for_part 

low_cardinality_allow_in_native_format

allow_suspicious_low_cardinality_types 

min_insert_block_size_rows_for_materialized_views 

min_insert_block_size_bytes_for_materialized_views 

output_format_pretty_grid_charset 

optimize_read_in_order 

mutations_sync

ttl_only_drop_parts 

lock_acquire_timeout 

cast_keep_nullable

output_format_pretty_max_value_width 

output_format_pretty_row_numbers 

allow_experimental_bigint_types 

persistent

output_format_tsv_null_representation


distributed_product_mode

更改分布式子查询的行为。

当查询包含分布式表的乘积时,即当分布式表的查询包含分布式表的非GLOBAL子查询时,ClickHouse将应用此设置。

限制条件:

  • 仅适用于IN和JOIN子查询。
  • 仅当FROM部分使用包含多个分片的分布式表时。
  • 如果子查询涉及包含多个分片的分布式表。
  • 不用于表值远程功能。

可能的值:

  • deny- 默认值。禁止使用这些类型的子查询(返回“ Double-distributed in / JOIN子查询被拒绝”异常)。
  • local—将子查询中的数据库和表替换为目标服务器(碎片)的本地查询,而保留普通的IN/JOIN.
  • global—将IN/JOIN查询替换为GLOBAL IN/GLOBAL JOIN.
  • allow —允许使用这些类型的子查询。

enable_optimize_predicate_expression

打开SELECT查询中的谓词下推。

谓词下推可能会大大减少分布式查询的网络流量。

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:1。

用法

考虑以下查询:

  1. SELECT count() FROM test_table WHERE date = '2018-10-10'
  2. SELECT count() FROM (SELECT * FROM test_table) WHERE date = '2018-10-10'

如果为enable_optimize_predicate_expression = 1,则这些查询的执行时间是相等的,因为ClickHouse在处理子查询时WHERE会应用于子查询。

如果为enable_optimize_predicate_expression = 0,则第二个查询的执行时间会更长,因为该WHERE子句适用于子查询完成后的所有数据。

fallback_to_stale_replicas_for_distributed_queries

如果没有更新的数据,则强制查询到过期的副本。请参见复制

ClickHouse从表的过时副本中选择最相关的。

当在指向复制表的分布式表中执行SELECT时使用。

默认情况下,为1(启用)。

force_index_by_date

如果无法按日期使用索引,则禁用查询执行。

与MergeTree系列中的表一起使用。

如果force_index_by_date=1,则ClickHouse将检查查询是否具有可用于限制数据范围的日期键条件。如果没有合适的条件,它将引发异常。

但是不会检查该条件是否会减少读取的数据量,例如,即使Date != ' 2000-01-01 '条件与表中的所有数据匹配,也可以接受。更多信息,请参见MergeTree

force_primary_key

如果无法通过主键进行索引,则禁用查询执行。

与MergeTree系列中的表一起使用。

如果force_primary_key=1,则ClickHouse会检查查询是否具有可用于限制数据范围的主键条件。如果没有合适的条件,它将引发异常。

但是不会检查该条件是否会减少读取的数据量。更多信息,请参见MergeTree

force_data_skipping_indices

如果未使用传递的二级索引,则禁用查询执行。

考虑以下示例。

CREATE TABLE data
(
    key Int,
    d1 Int,
    d1_null Nullable(Int),
    INDEX d1_idx d1 TYPE minmax GRANULARITY 1,
    INDEX d1_null_idx assumeNotNull(d1_null) TYPE minmax GRANULARITY 1
)
Engine=MergeTree()
ORDER BY key;

SELECT * FROM data_01515;
SELECT * FROM data_01515 SETTINGS force_data_skipping_indices=''; -- 查询将产生CANNOT_PARSE_TEXT错误.
SELECT * FROM data_01515 SETTINGS force_data_skipping_indices='d1_idx'; -- 查询将产生 INDEX_NOT_USED 错误.
SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='d1_idx'; -- Ok.
SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`'; -- Ok (全功能解析器的示例).
SELECT * FROM data_01515 WHERE d1 = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- 查询将产生INDEX_NOT_USED错误,因为未使用d1_null_idx。
SELECT * FROM data_01515 WHERE d1 = 0 AND assumeNotNull(d1_null) = 0 SETTINGS force_data_skipping_indices='`d1_idx`, d1_null_idx'; -- Ok.

与MergeTree系列中的表一起使用。

format_schema

当您使用需要架构定义的格式(例如 Cap’n Proto or Protobuf. ),此参数很有用。该值取决于格式。

fsync_metadata

当写入.sql文件时启用或者禁用 fsync 。默认启用。

如果服务器具有数百万个不断创建和销毁的小表,则禁用它是有意义的。

enable_http_compression

在对HTTP请求的响应中启用或禁用数据压缩。

有关更多信息,请阅读HTTP接口描述

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0。

http_zlib_compression_level

如果enable_http_compression = 1,则设置对HTTP请求的响应中的数据压缩级别。

可能的值:1到9之间的数字。

默认值:3。

http_native_compression_disable_checksumming_on_decompress

从客户端解压缩HTTP POST数据时启用或禁用校验和验证。仅用于ClickHouse本机压缩格式(不适用于gzipdeflate)。

有关更多信息,请阅读HTTP接口描述

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0。

send_progress_in_http_headers

在clickhouse-server响应中启用或禁用X-ClickHouse-Progress HTTP响应标头。

有关更多信息,请阅读HTTP接口描述

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0。

max_http_get_redirects

限制URL引擎表的最大HTTP GET重定向hops数。
该设置适用于两种类型的表:由CREATE TABLE查询创建的表和url表函数创建的表。

可能的值:

  • 任何正整数,表示hops数量。
  • 0-不允许跳。

默认值:0。

input_format_allow_errors_num

设置从文本格式(CSV,TSV等)读取时可接受的最大错误数。

默认值为0。

始终将其与input_format_allow_errors_ratio配对。

如果在读取行时发生错误,但错误计数器仍小于input_format_allow_errors_num,则ClickHouse会忽略该行并继续进行下一行。

如果同时超过input_format_allow_errors_numinput_format_allow_errors_ratio,则ClickHouse会引发异常。

input_format_allow_errors_ratio

设置从文本格式(CSV,TSV等)读取时允许的最大错误百分比。
错误百分比设置为0到1之间的浮点数。

默认值为0。

始终将其与input_format_allow_errors_num配对。

如果在读取行时发生错误,但错误计数器仍小于input_format_allow_errors_ratio,则ClickHouse会忽略该行并继续进行下一行。

如果同时超过input_format_allow_errors_numinput_format_allow_errors_ratio,则ClickHouse会引发异常。

input_format_values_interpret_expressions

如果快速流解析器无法解析数据,则启用或禁用完整的SQL解析器。

此设置仅用于数据插入时的“Values”格式。有关语法解析的更多信息,请参见语法

可能的值:

  • 0-禁用。

    在这种情况下,您必须提供格式化的数据。请参阅格式部分。

  • 1-启用。

    在这种情况下,可以将SQL表达式用作值,但是这种方式的数据插入速度要慢得多。如果仅插入格式化的数据,设置为0比较好

默认值:1。

使用例

插入具有不同设置的DateTime类型值。

SET input_format_values_interpret_expressions = 0;
INSERT INTO datetime_t VALUES (now())

Exception on client:
Code: 27. DB::Exception: Cannot parse input: expected ) before: now()): (at row 1)

SET input_format_values_interpret_expressions = 1;
INSERT INTO datetime_t VALUES (now())

Ok.

最后一个查询等效于以下内容:

SET input_format_values_interpret_expressions = 0;
INSERT INTO datetime_t SELECT now()
Ok.

input_format_values_deduce_templates_of_expressions

为“Values”格式的SQL表达式启用或禁用模板推导。它允许解析和解释Values中的表达式

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:1。

对于以下查询:

INSERT INTO test VALUES (lower('Hello')), (lower('world')), (lower('INSERT')), (upper('Values')), ...
  • 如果input_format_values_interpret_expressions=1format_values_deduce_templates_of_expressions=0,则为每行分别解释表达式(这对于大量的行来说非常慢)。
  • 如果input_format_values_interpret_expressions=0format_values_deduce_templates_of_expressions=1在第一,第二和第三行表达式是使用模板解析的lower(String)和解释,第四行中的表达进行解析与另一模板(upper(String))。
  • 如果input_format_values_interpret_expressions=1format_values_deduce_templates_of_expressions=1,则与前面的情况相同,但如果无法推断出模板,则还允许回退到单独解释表达式。

input_format_values_accurate_types_of_literals

仅当input_format_values_deduce_templates_of_expressions = 1时才使用此设置。某些列的表达式可能具有相同的结构,但包含不同类型的数值,例如:

(..., abs(0), ...),             -- UInt64 literal
(..., abs(3.141592654), ...),   -- Float64 literal
(..., abs(-1), ...),            -- Int64 literal

可能的值:

  • 0-禁用。

    在这种情况下,ClickHouse可能对某些文字使用更通用的类型(例如, Float64Int64代替UInt64),但是它可能导致溢出和精度问题。

  • 1-启用。

    在这种情况下,ClickHouse检查文字的实际类型并使用相应类型的表达式模板。在某些情况下,它可能会大大减慢的表达评估速度Values

默认值:1。

input_format_defaults_for_omitted_fields

执行INSERT查询时,将省略的输入列值替换为各个列的默认值。此选项仅适用于JSONEachRowCSVTabSeparated格式。

注意:启用此选项后,扩展表元数据将从服务器发送到客户端。它消耗了服务器上的其他计算资源,并可能降低性能。

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:1。

input_format_tsv_empty_as_default

启用后,将TSV中的空白输入字段替换为默认值。 对于复杂的默认表达式,也必须启用input_format_defaults_for_omitted_fields。

默认禁用。

input_format_tsv_enum_as_number

对于TSV输入格式,启用或禁用将枚举值解析枚举ID。

可能的值:

0 —枚举值被解析为值。
1-枚举值被解析为枚举ID
默认值:0。

举例:

CREATE TABLE table_with_enum_column_for_tsv_insert (Id Int32,Value Enum('first' = 1, 'second' = 2)) ENGINE=Memory();
--当input_format_tsv_enum_as_number启用时
SET input_format_tsv_enum_as_number = 1;
INSERT INTO table_with_enum_column_for_tsv_insert FORMAT TSV 102    2;
INSERT INTO table_with_enum_column_for_tsv_insert FORMAT TSV 103    1;
SELECT * FROM table_with_enum_column_for_tsv_insert;
--结果
┌──Id─┬─Value──┐
│ 102 │ second │
└─────┴────────┘
┌──Id─┬─Value──┐
│ 103 │ first  │
└─────┴────────┘

--当input_format_tsv_enum_as_number禁用时
SET input_format_tsv_enum_as_number = 0;
INSERT INTO table_with_enum_column_for_tsv_insert FORMAT TSV 102    2;
--结果
引发异常

(20.8的时候还没有)

input_format_null_as_default

如果输入数据包含NULL,但对应列的数据类型不是Nullable(T)(对于文本输入格式),则启用或禁用默认值。

input_format_skip_unknown_fields

启用或禁用跳过多余数据的插入。

写入数据时,如果输入数据包含目标表中不存在的列,则ClickHouse会引发异常。如果启用了跳过,则ClickHouse不会插入额外的数据,也不会引发异常。

支持的格式:

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0。

input_format_import_nested_json

启用或禁用带有嵌套对象的JSON数据插入。

支持的格式:

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0。

也可以看看:

嵌套结构

input_format_with_names_use_header

启用或禁用在插入数据时检查列顺序。

为了提高插入性能,如果您确定输入数据的列顺序与目标表中的顺序相同,建议禁用此检查。

支持的格式:

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:1。

date_time_input_format

允许选择日期和时间的文本表示的解析器。

该设置不适用于日期和时间功能

可能的值:

  • 'best_effort' —启用扩展解析。

    ClickHouse可以解析基本YYYY-MM-DD HH:MM:SS格式以及所有ISO 8601日期和时间格式。例如,'2018-06-08T01:02:03.000Z'

  • 'basic' —使用基本解析器。

    ClickHouse只能解析基本格式YYYY-MM-DD HH:MM:SSYYYY-MM-DD格式。例如,'2019-08-20 10:18:56'2019-08-20

默认值:'basic'

也可以看看:

date_time_output_format

允许选择日期和时间的文本表示形式的不同输出格式。

可能值:

  • 'simple' -简单的输出格式。

    Clickhouse输出日期和时间YYYY-MM-DD hh:mm:ss格式。例如,'2019-08-20 10:18:56'。根据数据类型的时区(如果存在)或服务器时区执行计算。

  • 'iso' -ISO输出格式。

    Clickhouse以ISO 8601 YYYY-MM-DDThh:mm:ssZ格式输出日期和时间。例如,'2019-08-20T10:18:56Z'。请注意,输出以UTC表示(Z表示UTC)。

  • 'unix_timestamp' -Unix时间戳输出格式。

    Clickhouse以Unix时间戳格式输出日期和时间。例如'1566285536'

默认值:'simple'

也可以看看:

join_default_strictness

设置JOIN子句的默认严格性。

可能的值:

  • ALL—如果右表具有多个匹配的行,则ClickHouse从匹配的行创建笛卡尔乘积。这是JOIN标准SQL的正常行为。
  • ANY—如果右表具有多个匹配的行,则仅连接找到的第一个行。如果右表只有一个匹配行,则ANY和的结果ALL相同。
  • ASOF —用于加入不确定匹配的序列。
  • Empty string-如果ALL还是ANY未在查询中指定的,ClickHouse抛出异常。

默认值:ALL

join_any_take_last_row

更改“ ANY”的联接操作行为。

可能的值:

  • 0-如果右表具有多个匹配行,则仅连接找到的第一个。
  • 1-如果右表具有多个匹配行,则仅连接找到的最后一个。

默认值:0。

也可以看看:

join_use_nulls

设置JOIN行为的类型。合并表格时,可能会出现空单元格。ClickHouse根据此设置以不同的方式填充它们。

可能的值:

  • 0-空单元格用相应字段类型的默认值填充。
  • 1-JOIN行为与标准SQL相同。相应字段的类型将转换为Nullable,并且空单元格将填充NULL

默认值:0。

partial_merge_join_optimizations

禁用JOIN查询的部分合并联接算法中的优化。

默认情况下,此设置启用可能导致错误结果的改进。如果您在查询中看到可疑的结果,请通过此设置禁用优化。在不同版本的ClickHouse服务器中,优化可能会有所不同。

可能的值:

  • 0-禁用优化。
  • 1-启用优化。

默认值:1。

partial_merge_join_rows_in_right_blocks

JOIN查询的部分合并联接算法中限制右侧联接数据块的大小。

ClickHouse server:

  1. 将右侧联接数据分割为最多为指定行数的块。
  2. 用最小和最大值索引每个块。
  3. 如果可能,将准备好的块卸载到磁盘。

可能的值:

  • 任何正整数。推荐的值范围:[1000,100000]。

默认值:65536

 

join_on_disk_max_files_to_merge

限制在磁盘上执行MergeJoin操作时允许并行排序的文件数。

设置的值越大,使用的RAM越多,所需的磁盘I / O越少。

可能的值:

  • 从2开始的任何正整数。

默认值:64。

any_join_distinct_right_table_keys

ANY INNER|LEFT JOIN操作中启用旧版ClickHouse服务器行为。

启用旧版行为时:

  • t1 ANY LEFT JOIN t2 and t2 ANY RIGHT JOIN t1 操作的结果是不相等的,因为ClickHouse使用具有多对一的从左到右的表键映射的逻辑。
  • 像SEMI LEFT JOIN操作一样,ANY INNER JOIN操作的结果包含左表中的所有行。

禁用旧版行为时:

  • t1 ANY LEFT JOIN t2t2 ANY RIGHT JOIN t1操作的结果相等,因为ClickHouse使用在操作中提供一对多键映射的逻辑ANY RIGHT JOIN
  • ANY INNER JOIN运算结果在左右表中每个键包含一行。

可能的值:

  • 0-传统行为被禁用。
  • 1-启用传统行为。

默认值:0。

也可以看看:

temporary_files_codec

为磁盘上的排序和联接操作中使用的临时文件设置压缩编解码器。

可能的值:

  • LZ4 —应用LZ4压缩。
  • 无-不应用压缩。

默认值:LZ4。

max_block_size

在ClickHouse中,数据由块(列部分的集合)处理。单个块的内部处理周期足够有效,但是每个块都有明显的开销。单个块的内部处理周期性能足够好,但是每个块都有明显的开销。

对于要从表中加载的块大小(以行计数),建议使用max_block_size设置。

块的大小不能太小,也不能太大,避免在多个线程中提取大量列时占用过多内存,并至少保留一些缓存。

默认值:65,536

并非总是从表中加载max_block_size大小的块。 如果很明显需要检索较少的数据,则处理较小的块。

preferred_block_size_bytes

和使用max_block_size的目的相同,但是是设置快的大小(bytes),自动确定行数。当然块大小不能超过max_block_size行。

默认值:1,000,000。仅当从MergeTree引擎读取时才有效。

merge_tree_min_rows_for_concurrent_read

如果从一个mergeTree表中读取的行数超过了merge_tree_min_rows_for_concurrent_read,那么clickhouse尝试使用多线程进行并发读取。

可能的值:

  • 任何正整数。

默认值:163840

merge_tree_min_bytes_for_concurrent_read

如果从一个mergeTree表中读取的字节数超过了merge_tree_min_bytes_for_concurrent_read,那么clickhouse尝试使用多线程进行并发读取。

可能的值:

  • 任何正整数。

默认值:251658240

merge_tree_min_rows_for_seek

如果要在一个文件中读取的两个数据块之间的距离小于merge_tree_min_rows_for_seek行,则ClickHouse不会搜索文件,而是顺序读取数据。

可能的值:

  • 任何正整数。

默认值:0。

merge_tree_min_bytes_for_seek

如果要在一个文件中读取的两个数据块之间的距离小于merge_tree_min_bytes_for_seek的字节时,则ClickHouse不会搜索文件,而是顺序读取数据。

可能的值:

  • 任何正整数。

默认值:0。

merge_tree_coarse_index_granularity

搜索数据时,ClickHouse检查索引文件中的数据标记。如果ClickHouse发现所需键在某个范围内,则会将该范围划分为多个merge_tree_coarse_index_granularity子范围,然后在该范围内递归搜索所需键。

可能的值:

  • 任何正偶数整数。

默认值:8。

merge_tree_max_rows_to_use_cache

如果ClickHouse在一个查询中读取的行数超过了merge_tree_max_rows_to_use_cache行,则它不使用未压缩块的缓存。

ClickHouse使用此缓存来加快对重复的小型查询的响应。此设置可保护高速缓存免受读取大量数据的查询的破坏。

uncompressed_cache_size定义未压缩块的高速缓存的大小。

可能的值:

  • 任何正整数。

默认值:128×8192。

merge_tree_max_bytes_to_use_cache

如果ClickHouse在一个查询中读取的字节数超过了merge_tree_max_bytes_to_use_cache行,则它不使用未压缩块的缓存。

ClickHouse使用此缓存来加快对重复的小型查询的响应。此设置可保护高速缓存免受读取大量数据的查询的破坏。

uncompressed_cache_size定义未压缩块的高速缓存的大小。

可能的值:

  • 任何正整数。

默认值:2013265920

min_bytes_to_use_direct_io

使用直接I / O访问存储磁盘所需的最小数据量。

从表格读取数据时,ClickHouse使用此设置。如果要读取的所有数据的总存储量超过min_bytes_to_use_direct_io字节,则ClickHouse会使用该选项从存储磁盘读取数据。

可能的值:

  • 0-直接I / O被禁用。
  • 正整数。

默认值:0。

network_compression_method

设置用于服务器之间以及服务器与clickhouse-client之间的通信的数据压缩方法。

可能的值:

  • LZ4 —设置LZ4压缩方法。
  • ZSTD —设置ZSTD压缩方法。

默认值:LZ4

也可以看看

network_zstd_compression_level

调整ZSTD压缩级别。仅在network_compression_method设置为ZSTD时使用

可能的值:

  • 从1到15的正整数。

默认值:1

log_queries

设置查询日志记录。

使用此设置发送到ClickHouse的查询将根据服务器配置参数中的query_log规则记录。

log_queries=1

log_queries_min_query_duration_ms

查询运行到下表所需的最短时间:

  • system.query_log
  • system.query_thread_log

只有具有以下类型的查询才会进入日志:

  • QUERY_FINISH
  • EXCEPTION_WHILE_PROCESSING

  • 类型:毫秒

  • 默认值:0(任何查询)

log_queries_min_type

query_log 最小类型的日志。

可能的值:
QUERY_START=1
QUERY_FINISH=2
EXCEPTION_BEFORE_START=3
EXCEPTION_WHILE_PROCESSING=4

默认值:QUERY_START

用来限制进入query_log的条目,如果只对错误信息感兴趣,可以使用EXCEPTION_WHILE_PROCESSING

log_query_threads

设置查询线程日志记录。

使用此设置,运行查询的线程将根据服务器配置参数中的query_thread_log规则记录。

log_query_threads=1

max_insert_block_size

要插入表中的块的大小(以行数计)。

此设置仅在服务器构成块的情况下适用。

例如,对于通过HTTP接口的IN​​SERT,服务器解析数据格式并形成指定大小的块。

但是,当使用clickhouse-client时,客户端会解析数据本身,并且服务器上的“ max_insert_block_size”设置不会影响插入的块的大小。使用INSERT SELECT时,该设置也没有作用,因为数据是使用SELECT之后形成的相同块插入的。

默认值:1,048,576

默认值略大于max_block_size。这样做的原因是因为某些表引擎(* MergeTree)在磁盘上为每个插入的块形成了一个数据部分,这是一个相当大的实体。类似地,* MergeTree表在插入期间对数据进行排序,并且足够大的块大小允许对RAM中的更多数据进行排序。

min_insert_block_size_rows

块中可以通过INSERT查询插入到表中的最小行数。较小的块将被压缩为较大的块。

可能的值:

  • 正整数。
  • 0-禁止挤压。

默认值:1048576

min_insert_block_size_bytes

块中可以通过INSERT查询插入到表中的最小字节数。较小的块将被压缩为较大的块。

可能的值:

  • 正整数。
  • 0-禁止挤压。

默认值:268435456

max_replica_delay_for_distributed_queries

为分布式查询禁用滞后副本。请参见复制

以秒为单位设置时间。如果副本滞后于设置值,则不使用该副本。

默认值:300。

SELECT从指向复制表的分布式表执行时使用。

max_threads

查询处理线程的最大数量,不包括用于从远程服务器检索数据的线程(请参见“ max_distributed_connections”参数)。

这个参数适用于,处于查询处理管道的同一阶段的并行执行的线程。

例如,当从表中读取数据时,如果可以使用函数求值,使用WHERE进行过滤并使用至少“ max_threads”个线程并行地为GROUP BY进行预聚合,则可以使用“ max_threads”。

默认值:物理CPU内核数。

如果通常一次在服务器上运行少于一个SELECT查询,则将此参数设置为稍小于处理器核心实际数量的值。

对于由于LIMIT而快速完成的查询,可以设置较低的“ max_threads”。例如,如果每个块中都有必要的条目数,并且max_threads = 8,则将检索8个块,尽管仅读取一个块就足够了。

max_threads值越小,消耗的内存越少。

max_insert_threads

执行INSERT SELECT查询的最大线程数。

可能的值:

  • 0(或1)—INSERT SELECT无并行执行。
  • 正整数。大于1。

默认值:0。

并行INSERT SELECT仅在SELECT部分并行执行时才有效,max_threads的设置。

较高的值将导致较高的内存使用率。

max_compress_block_size

在压缩以写入表之前,未压缩数据块的最大大小。默认情况下为1,048,576(1 MiB)。

如果减小大小,则由于高速缓存局部性,压缩率将显着降低,压缩和解压缩速度会略有增加,并且内存消耗也会减少。

通常没有任何理由更改此设置。

不要将压缩块(由字节组成的内存块)与查询处理块(表中的一组行)混淆。

min_compress_block_size

对于MergeTree表。为了减少处理查询时的延迟,如果块的大小大于等于'min_compress_block_size',则在写入下一个标记时将压缩该块。默认值为65,536。

如果未压缩的数据小于“ max_compress_block_size”,则块的实际大小不小于此值且不小于一个标记的数据量。

让我们来看一个例子。假设在创建表期间将“ index_granularity”设置为8192。

我们正在编写一个UInt32类型的列(每个值4个字节)。当写入8192行时,总计将为32 KB数据。由于min_compress_block_size = 65,536,因此每两个标记将形成一个压缩块。

我们正在编写一个String类型的URL列(每个值的平均大小为60个字节)。当写入8192行时,平均值将略小于500 KB数据。由于大于65,536,将为每个标记形成一个压缩块。在这种情况下,从磁盘读取单个标记范围内的数据时,不会解压缩多余的数据。

通常没有任何理由更改此设置。

max_query_size

可以带入RAM以使用SQL解析器进行解析的查询的最大部分。

INSERT查询还包含由单独的流解析器(消耗O(1)RAM)处理的INSERT数据,该数据不包括在此限制中。

默认值:256kb

max_parser_depth

限制递归下降解析器中的最大递归深度。允许控制堆栈大小。

可能的值:

  • 正整数。
  • 0-递归深度是无限的。

预设值:1000。

Interactive_delay 

检查请求执行是否已取消,并发送进度的时间间隔(以微秒为单位)。

默认值:100,000(检查取消并每秒发送10次进度)。

connect_timeout,receive_timeout,send_timeout 

用于与客户端通信的套接字上的超时(以秒为单位)。

预设值:10、300、300。

cancel_http_readonly_queries_on_client_close 

当客户端关闭连接而不等待响应时,取消HTTP只读查询(例如SELECT)。

默认值:0

poll_interval 

将等待循环锁定指定的秒数。

默认值:10

max_distributed_connections 

与远程服务器的并发连接的最大数量,用于将单个查询分布式处理到单个Distributed表。我们建议设置一个不小于群集中服务器数量的值。

默认值:1024

以下参数仅在创建分布式表(和启动服务器时)时使用,因此没有理由在运行时更改它们。

distributed_connections_pool_size

与远程服务器的并发连接的最大数量,用于分布式处理所有查询到一个Distributed表。我们建议设置一个不小于群集中服务器数量的值。

默认值:1024

connect_timeout_with_failover_ms 

如果在群集定义中使用了“ shard”和“ replica”部分,则连接到分布式表引擎的远程服务器的超时(以毫秒为单位)。
如果不成功,则尝试进行几次尝试以连接到各种副本。

默认值:50。

connection_pool_max_wait_ms

连接池已满时,连接的等待时间(以毫秒为单位)。

可能的值:

  • 正整数。
  • 0-无限超时。

默认值:0。

connections_with_failover_max_tries 

分布式表引擎与每个副本的最大连接尝试次数。

默认值:3。

extremes

是否计算极值(查询结果列中的最小值和最大值)。

接受0或1。默认情况下,0(禁用)。

有关更多信息,请参见“极限值”部分。

kafka_max_wait_ms

重试之前从Kafka读取消息的等待时间(以毫秒为单位)。

可能的值:

  • 正整数。
  • 0-无限超时。

预设值:5000。

也可以看看:

use_uncompressed_cache 

是否使用未压缩块的缓存。接受0或1。默认情况下,0(禁用)。
当使用大量短查询时,使用未压缩的缓存(仅适用于MergeTree系列中的表)可以显着减少延迟并提高吞吐量。为频繁发送简短请求的用户启用此设置。还请注意uncompressed_cache_size配置参数(仅在配置文件中设置)–未压缩的缓存块的大小。默认情况下为8 GiB。未压缩的缓存将根据需要填充,并且使用最少的数据将被自动删除。

对于读取至少一些数据量(一百万行或更多)的查询,未压缩的缓存将自动禁用,以节省真正小的查询的空间。这意味着您可以将“ use_uncompressed_cache”设置始终设置为1。

replace_running_query 

使用HTTP接口时,可以传递'query_id'参数。这是用作查询标识符的任何字符串。

如果此时已经存在来自具有相同“ query_id”的相同用户的查询,则行为取决于“ replace_running_query”参数。

0 (默认)–引发异常(如果已经在运行具有相同“ query_id”的查询,则不允许查询运行)。

1 –取消旧查询,然后开始运行新查询。

Yandex.Metrica使用将此参数设置为1来实施针对细分条件的建议。输入下一个字符后,如果旧查询尚未完成,则应将其取消。

replace_running_query_max_wait_ms 

query_idreplace_running_query设置处于活动状态时,用于运行查询的等待时间结束。

可能的值:

  • 正整数。
  • 0 —抛出异常,如果服务器已经执行了相同的查询,则该异常不允许运行新查询query_id

预设值:5000。

stream_flush_interval_ms 

流刷新间隔,在超时或线程生成max_insert_block_size行时工作,适用于具有流式传输的表。

默认值为7500。

值越小,数据刷新到表的频率越高。将该值设置得太低会导致性能下降。

load_balancing

指定用于分布式查询处理的副本选择算法。

ClickHouse支持以下选择副本的算法:

也可以看看:

Random (by Default)

load_balancing = random
计算每个副本的错误数量。查询将以最少的错误发送到副本,如果存在多个错误,则发送给任何一个。
缺点:不考虑服务器的邻近性;如果副本具有不同的数据,则您还将获得不同的数据。

Nearest Hostname

load_balancing = nearest_hostname

计算每个副本的错误数量。每隔5分钟,错误数量将被2整除。因此,最近一次使用指数平滑计算了错误数量。如果一个副本的错误数量最少(即,最近在其他副本上发生的错误),则将查询发送给它。

如果多个副本具有相同的最小错误数,该查询将以与配置文件中服务器的主机名最相似的主机名发送到副本(相同位置的不同字符数,最多两个主机名的最小长度)。

例如,example01-01-1和example01-01-2在一个位置上是不同的,而example01-01-1和example01-02-2在两个位置上是不同的。
这种方法看似原始,但不需要使用对IPv6地址而言很复杂的外部网络拓扑数据,也不需要比较IP地址。

因此,如果存在等效的副本,则首选名称最接近的副本。
我们还可以假设在将查询发送到同一服务器时,在没有故障的情况下,分布式查询也将到达相同的服务器。因此,即使将不同的数据放在副本上,查询也将返回几乎相同的结果。

In Order

load_balancing = in_order

具有相同数量错误的副本将以与配置中指定的顺序相同的顺序进行访问。

当您确切知道哪个副本更可取时,此方法适用。

First or Random

load_balancing = first_or_random

此算法选择集合中的第一个副本,如果第一个副本不可用,则选择一个随机副本。

在cross-replication设置中有效,但在其他配置中无效。

first_or_random算法解决了in_order算法的问题。

使用in_order,如果一个副本出现故障,则下一个副本将加倍负载,而其余副本则处理通常的流量。使用first_or_random算法时,负载在仍然可用的副本之间平均分配。

通过使用设置load_balancing_first_offset可以明确定义第一个副本是什么。 这样可以更好地控制副本之间的查询工作负载。

Round Robin

load_balancing = round_robin

该算法对具有相同错误数的副本使用循环策略(仅考虑具有round_robin策略的查询)。

prefer_localhost_replica

处理分布式查询时。使用localhost副本启用/禁用首选

可能的值:

  • 1-ClickHouse始终向本地副本发送查询(如果存在)。
  • 0-ClickHouse使用load_balancing设置指定的平衡策略。

默认值:1。

如果使用max_parallel_replicas,请禁用此设置。

totals_mode 

存在HAVING时以及存在max_rows_to_group_by和group_by_overflow_mode ='any'时如何计算TOTALS。

请参见“WITH TOTALS modifier”部分。

totals_auto_threshold

totals_mode = 'auto'.的阈值

请参见“WITH TOTALS modifier”部分。

max_parallel_replicas 

执行查询时,每个分片的最大副本数。
为了保持一致性(以获取同一数据拆分的不同部分),此选项仅在设置采样键时才有效。
复制延迟不受控制。

compile

启用查询编译。默认情况下,0(禁用)。

编译仅用于查询处理管道的一部分:用于聚合的第一阶段(GROUP BY)。
如果管道的这一部分已编译,由于部署周期短和内联聚合函数调用,查询运行速度可能更快。对于具有多个简单聚合函数的查询,可以看到最大的性能改进(在极少数情况下,速度提高了四倍)。通常,性能提升微不足道。在极少数情况下,它可能会减慢查询的执行速度。

min_count_to_compile 

运行编译之前可能使用已编译代码块的次数。默认情况下为3。
对于测试,该值可以设置为0:编译同步运行,并且查询在继续执行之前等待编译过程的结束。对于所有其他情况,请使用以1开头的值。编译通常需要大约5-10秒。
如果该值为1或更大,编译将在单独的线程中异步进行。结果准备就绪后将立即使用,包括当前正在运行的查询。

查询中使用的聚合函数和GROUP BY子句中的键类型的每种不同组合都需要编译后的代码。
编译结果以.so文件的形式保存在生成​​目录中。对编译结果的数量没有限制,因为它们不占用太多空间。重新启动服务器后,将使用旧结果,除非升级服务器-在这种情况下,将删除旧结果。

output_format_json_quote_64bit_integers

如果该值为true,则在使用JSON * Int64和UInt64格式时(以与大多数JavaScript实现兼容),引号中会出现整数。否则,将输出不带引号的整数。

output_format_json_quote_denormals 

启用+nan-nan+inf-inf输出在JSON输出格式。

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0。

考虑下表account_orders

┌─id─┬─name───┬─duration─┬─period─┬─area─┐
│  1 │ Andrew │       20 │      0 │  400 │
│  2 │ John   │       40 │      0 │    0 │
│  3 │ Bob    │       15 │      0 │ -100 │
└────┴────────┴──────────┴────────┴──────┘

如果为output_format_json_quote_denormals = 0,查询将null在输出中返回值:

SELECT area/period FROM account_orders FORMAT JSON;

{
        "meta":
        [
                {
                        "name": "divide(area, period)",
                        "type": "Float64"
                }
        ],

        "data":
        [
                {
                        "divide(area, period)": null
                },
                {
                        "divide(area, period)": null
                },
                {
                        "divide(area, period)": null
                }
        ],

        "rows": 3,

        "statistics":
        {
                "elapsed": 0.003648093,
                "rows_read": 3,
                "bytes_read": 24
        }
}

当output_format_json_quote_denormals = 1,查询返回:

{
        "meta":
        [
                {
                        "name": "divide(area, period)",
                        "type": "Float64"
                }
        ],

        "data":
        [
                {
                        "divide(area, period)": "inf"
                },
                {
                        "divide(area, period)": "-nan"
                },
                {
                        "divide(area, period)": "-inf"
                }
        ],

        "rows": 3,

        "statistics":
        {
                "elapsed": 0.000070241,
                "rows_read": 3,
                "bytes_read": 24
        }
}

format_csv_delimiter 

该字符在CSV数据中被解释为定界符。默认情况下,定界符为,

input_format_csv_unquoted_null_literal_as_null 

对于CSV输入格式,启用或禁用解析未引用的NULL文字(的同义词\N)。

input_format_csv_enum_as_number 

启用或禁用将枚举值解析为CSV输入格式的枚举ID。

可能的值:

  • 0 —枚举值被解析为值。
  • 1-枚举值被解析为枚举ID。

默认值:0。

例子

考虑表:

CREATE TABLE table_with_enum_column_for_csv_insert (Id Int32,Value Enum('first' = 1, 'second' = 2)) ENGINE=Memory();

input_format_csv_enum_as_number启用设置:

SET input_format_csv_enum_as_number = 1;
INSERT INTO table_with_enum_column_for_csv_insert FORMAT CSV 102,2;
SELECT * FROM table_with_enum_column_for_csv_insert;

结果:

┌──Id─┬─Value─────┐
│ 102 │ second    │
└─────┴───────────┘

input_format_csv_enum_as_number设置为禁用时,INSERT查询:

SET input_format_csv_enum_as_number = 0;
INSERT INTO table_with_enum_column_for_csv_insert FORMAT CSV 102,2;

引发异常。

output_format_csv_crlf_end_of_line 

在CSV中使用DOS / Windows风格的行分隔符(CRLF),而不是Unix风格(LF)。

output_format_tsv_crlf_end_of_line 

在TSV中使用DOC / Windows样式的行分隔符(CRLF),而不是Unix样式(LF)。

insert_quorum 

启用仲裁写入。

  • 如果为insert_quorum < 2,则仲裁写入被禁用。
  • 如果为insert_quorum >= 2,则启用仲裁写入。

默认值:0。

法定写人数

仅当ClickHouse设法在insert_quorum_timeout期间将数据正确写入副本的insert_quorum时,INSERT才能成功。

如果由于任何原因而成功写入的副本数量未达到insert_quorum,则认为写入失败,并且ClickHouse将从所有已写入数据的副本中删除插入的块。

仲裁中的所有副本都是一致的,即它们包含来自所有先前INSERT查询的数据。 INSERT序列被线性化。

读取从insert_quorum写入的数据时,可以使用select_sequential_consistency选项。

ClickHouse生成异常

  • 如果查询时的可用副本数小于insert_quorum
  • 当尚未将前一个块插入insert_quorum副本的时尝试写入数据。如果用户尝试INSERT在完成前一个操作之前执行一个操作,则可能会发生这种情况insert_quorum

也可以看看:

insert_quorum_timeout

写入仲裁超时(以毫秒为单位)。

如果已经超时并且尚未发生写入,ClickHouse将生成一个异常。

客户必须重复查询来将相同的块写入相同或任何其他副本。

默认值:600000毫秒(十分钟)。

也可以看看:

select_sequential_consistency 

启用或禁用SELECT查询的顺序一致性:

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0。

用法

启用顺序一致性后,ClickHouse允许客户端仅对那些,包含所有用insert_quorum执行的INSERT查询中的数据的副本,执行SELECT查询。

如果客户端引用部分副本,则ClickHouse将生成一个异常。 SELECT查询将不包括尚未写入副本仲裁的数据。

也可以看看:

insert_deduplicate

启用或禁用INSERT的块重复数据删除(对于Replicated *表)。

可能的值:

0-禁用。
1-启用。
默认值:1。

默认情况下,通过INSERT语句插入复制表中的块将进行重复数据删除(请参见数据复制)。

deduplicate_blocks_in_dependent_materialized_views

为从Replicated *表接收数据的实例化视图启用或禁用重复数据删除检查。

0-禁用。
1-启用。
默认值:0

默认情况下,不对实例化视图执行重复数据删除,而是在源表的上游进行重复数据删除。

如果由于源表中的重复数据删除而跳过了INSERTed块,不会在附加的实例化视图中插入任何内容。

存在此行为是对于实例化视图聚合后插入的块相同但从不同的INSERT派生到源表中的情况,为了能够将高度聚合的数据插入到物化视图中。

同时,此行为“破坏”了INSERT幂等性。

如果对主表的INSERT操作成功而对物化视图的INSERT操作失败(例如,由于与Zookeeper的通信失败),则客户端将收到错误消息并可以重试该操作。 

但是,实例化视图将不会收到第二个插入,因为它会通过在主(源)表中进行重复数据删除而被丢弃。

设置deduplicate_blocks_in_dependent_materialized_views允许更改此行为。重试后,实例化视图将收到重复插入,并自行执行重复数据删除检查,忽略源表的检查结果,并将插入由于第一次失败而丢失的行。

max_network_bytes 

限制执行查询时通过网络接收或传输的数据量(以字节为单位)。此设置适用于每个单独的查询。

可能的值:

  • 正整数。
  • 0-禁用。

默认值:0。

max_network_bandwidth 

限制通过每秒字节数在网络上进行数据交换的速度。此设置适用于每个查询。

可能的值:

  • 正整数。
  • 0-禁用带宽控制。

默认值:0。

max_network_bandwidth_for_user 

限制通过每秒字节数在网络上进行数据交换的速度。此设置适用于单个用户执行的所有同时运行的查询。

可能的值:

  • 正整数。
  • 0-禁用数据速度控制。

默认值:0。

max_network_bandwidth_for_all_users 

以每秒字节数为单位限制通过网络交换数据的速度。此设置适用于服务器上所有同时运行的查询。

可能的值:

  • 正整数。
  • 0-禁用数据速度控制。

默认值:0。

count_distinct_implementation

指定应使用哪个uniq *函数来执行 COUNT(DISTINCT …) 构造。

可能的值:

默认值:uniqExact

skip_unavailable_shards 

启用或禁用跳过不可用的分片。

如果碎片的所有副本都不可用,则认为碎片不可用。

在以下情况下,副本不可用:

  • ClickHouse出于一些原因都无法连接到副本。连接到副本时,ClickHouse会进行几次尝试。如果所有这些尝试均失败,则认为副本不可用。
  • 副本无法通过DNS解析。

    如果副本的主机名无法通过DNS解析,则可能表示以下情况:

    • 副本的主机没有DNS记录。它可以发生在具有动态DNS的系统中,例如Kubernetes,在停机期间节点可能无法解析,这不是错误。

    • 配置错误。ClickHouse配置文件包含错误的主机名。

可能的值:

  • 1-启用跳过。

    如果分片不可用,ClickHouse将根据部分数据返回结果,并且不会报告节点可用性问题。

  • 0-禁用跳过。

    如果分片不可用,则ClickHouse会引发异常。

默认值:0。

distribution_group_by_no_merge 

不合并来自不同服务器的聚合状态以进行分布式查询处理,如果可以确定在不同的分片上有不同的键,则可以使用此方法。

可能的值:

  • 0-禁用(最终查询处理在启动器节点上完成)。
  • 1-请勿合并来自不同服务器的聚合状态以进行分布式查询处理(在分片上完全处理的查询,发起者仅代理数据)。
  • 2 -与1相同,但应用ORDER BYLIMIT在引发剂(可用于查询与ORDER BY和/或LIMIT)。

举例:

SELECT *
FROM remote('127.0.0.{2,3}', system.one)
GROUP BY dummy
LIMIT 1
SETTINGS distributed_group_by_no_merge = 1
FORMAT PrettyCompactMonoBlock

┌─dummy─┐
│     0 │
│     0 │
└───────┘


SELECT *
FROM remote('127.0.0.{2,3}', system.one)
GROUP BY dummy
LIMIT 1
SETTINGS distributed_group_by_no_merge = 2
FORMAT PrettyCompactMonoBlock

┌─dummy─┐
│     0 │
└───────┘

默认值:0

optimize_skip_unused_shards 

为具有分片键条件的SELECT查询启用或禁用跳过未使用的分片WHERE/PREWHERE(假设数据是通过分片键分发的,否则不执行任何操作)。

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0

allow_nondeterministic_optimize_skip_unused_shards 

在分片密钥中允许使用不确定性函数(如randdictGet,因为以后会有一些警告)。

可能的值:

  • 0-不允许。
  • 1-允许。

默认值:0

optimize_skip_unused_shards_nesting

控件optimize_skip_unused_shards(因此仍然需要optimize_skip_unused_shards)取决于分布式查询的嵌套级别(当您拥有分布式表并查看另一个分布式表时的情况)。

可能的值:

  • 0-禁用,optimize_skip_unused_shards始终工作。
  • 1-optimize_skip_unused_shards仅对第一级启用。
  • 2-启用optimize_skip_unused_shards第二级。

默认值:0

force_optimize_skip_unused_shards 

如果启用了optimize_skip_unused_shards,并且无法跳过未使用的分片,则启用或禁用查询执行。如果无法跳过并且启用了设置,则将引发异常。

可能的值:

  • 0-禁用。ClickHouse不会引发异常。
  • 1-启用。仅当表具有分片键时,查询执行才会被禁用。
  • 2-启用。无论是否为表定义了分片键,都将禁用查询执行。

默认值:0

optimize_distributed_group_by_sharding_key

通过避免在启动器服务器上进行昂贵的聚合(这将减少启动器服务器上的查询的内存使用),来优化GROUP BY sharding_key查询。

支持以下类型的查询(及其所有组合):

  • SELECT DISTINCT [..., ]sharding_key[, ...] FROM dist
  • SELECT ... FROM dist GROUP BY sharding_key[, ...]
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] ORDER BY x
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1
  • SELECT ... FROM dist GROUP BY sharding_key[, ...] LIMIT 1 BY x

不支持以下类型的查询(稍后可能会添加对其中一些查询的支持):

  • SELECT ... GROUP BY sharding_key[, ...] WITH TOTALS
  • SELECT ... GROUP BY sharding_key[, ...] WITH ROLLUP
  • SELECT ... GROUP BY sharding_key[, ...] WITH CUBE
  • SELECT ... GROUP BY sharding_key[, ...] SETTINGS extremes=1

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0

也可以看看:

optimize_throw_if_noop 

如果OPTIMIZE查询未执行合并,则启用或禁用引发异常。

默认情况下,即使未执行任何操作,OPTIMIZE也会成功返回。 通过此设置,您可以区分这些情况并在异常消息中获取原因。

可能的值:

  • 1-启用引发异常。
  • 0-禁用引发异常。

默认值:0。

distributed_replica_error_half_life

  • 类型:秒
  • 默认值:60秒

控制将分布式表中的错误快速归零的方式。 如果某个副本在一段时间内不可用,累积了5个错误,并且distributed_replica_error_half_life设置为1秒,则该副本在上次错误之后3秒钟被视为正常。

也可以看:

distributed_replica_error_cap

  • 类型:unsigned int
  • 默认值:1000

每个副本的错误计数均以该值为上限,以防止单个副本累积太多错误。

也可以看看:

distributed_replica_max_ignored_errors

  • 类型:unsigned int
  • 默认值:0

选择副本时将忽略的错误数(根据load_balancing算法)。

也可以看看:

distributed_directory_monitor_sleep_time_ms

分布式表引擎发送数据的基本间隔。发生错误时,实际间隔将呈指数增长。

可能的值:

  • 正整数(毫秒)。

默认值:100毫秒。

distributed_directory_monitor_max_sleep_time_ms

分布式表引擎发送数据的最大间隔。限制在distributed_directory_monitor_sleep_time_ms设置中设置的间隔的指数增长。

可能的值:

  • 正整数(毫秒)。

默认值:30000毫秒(30秒)。

distributed_directory_monitor_batch_inserts

启用/禁用插入的数据批量发送。

启用批量发送后,分布式表引擎将尝试通过一项操作发送多个插入数据文件,而不是分别发送。批量发送通过更好地利用服务器和网络资源来提高群集性能。

可能的值:

  • 1-启用。
  • 0-禁用。

默认值:0。

os_thread_priority 

为执行查询的线程设置优先级(nice)。选择一个线程,在每个可用的CPU内核上运行时,OS调度器考虑这个优先级。

要使用此设置,您需要设置CAP_SYS_NICE功能。 clickhouse-server软件包会在安装过程中对其进行设置。 某些虚拟环境不允许您设置CAP_SYS_NICE功能。 在这种情况下,clickhouse-server会在开始时显示有关此消息。

可能的值:

  • 您可以在范围内设置值[-20, 19]

较低的值表示较高的优先级。具有低nice优先级值的线程比具有高优先级值的线程执行得更频繁。高值对于长时间运行的非交互式查询是更可取的,因为它允许它们在到达时迅速放弃资源,而转向短交互式查询。

默认值:0。

query_profiler_real_time_period_ns 

设置查询事件探查器的实际时钟计时器的周期。实时时钟计时器计算挂钟时间。

可能的值:

  • 正整数,以纳秒为单位。

    推荐值:

        - 10000000 (100 times a second) nanoseconds and less for single queries.
        - 1000000000 (once a second) for cluster-wide profiling.
    

    0用于关闭计时器。

    类型:UInt64

    默认值:1000000000纳秒(每秒)。

    也可以看看:

  • 系统表trace_log

query_profiler_cpu_time_period_ns 

设置查询事件探查器的CPU时钟计时器的周期。此计时器仅计算CPU时间。

可能的值:

  • 正整数纳秒。

    推荐值:

    - 10000000 (100 times a second) nanoseconds and more for single queries.
    - 1000000000 (once a second) for cluster-wide profiling.
  • 0用于关闭计时器。

类型:UInt64

默认值:1000000000纳秒。

也可以看看:

allow_introspection_functions 

启用或禁用用于检查性能分析的自省功能

可能的值:

  • 1-自省功能已启用。
  • 0-内省功能已禁用。

默认值:0。

也可以看看:

input_format_parallel_parsing 

  • 类型:布尔
  • 默认值:True

启用数据格式的保留顺序并行解析。仅支持TSV,TKSV,CSV和JSONEachRow格式。

min_chunk_bytes_for_parallel_parsing 

  • 类型:unsigned int
  • 默认值:1 MiB

每个线程将并行解析的最小块大小(以字节为单位)。

output_format_avro_codec 

设置用于输出Avro文件的压缩编解码器。

类型:字符串

可能的值:

  • null —无压缩
  • deflate —使用Deflate压缩(zlib)
  • snappy—用Snappy压缩

默认值:(snappy如果可用)或deflate

output_format_avro_sync_interval 

设置输出Avro文件的同步标记之间的最小数据大小(以字节为单位)。

类型:unsigned int

可能的值:32(32字节)-1073741824(1 GiB)

默认值:32768(32 KiB)

format_avro_schema_registry_url 

设置Confluent Schema注册表URL以与AvroConfluent格式一起使用。

默认值:Empty

input_format_avro_allow_missing_fields 

启用使用未在AvroAvroConfluent格式架构中指定的字段的功能。当在架构中找不到字段时,ClickHouse将使用默认值而不是引发异常。

可能的值:

  • 0-禁用。
  • 1-启用。

默认值:0。

background_pool_size 

设置在表引擎中执行后台操作的线程数(例如,在MergeTree引擎表中的合并)。

此设置是从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

parallel_distributed_insert_select 

启用并行分布式INSERT ... SELECT查询。

如果我们执行INSERT INTO distributed_table_a SELECT ... FROM distributed_table_b查询,并且两个表都使用相同的集群,并且两个表都是复制的或非复制的,那么此查询将在每个分片上本地处理。

可能的值:

  • 0-禁用。
  • 1-SELECT将在分布式引擎的基础表中的每个分片上执行。
  • 2-SELECT和INSERT将在分布式引擎的基础表中的每个分片上执行。

默认值:0。

insert_distributed_sync 

启用或禁用将同步数据插入分布式表中。

默认情况下,在将数据插入Distributed表中时,ClickHouse服务器以异步模式将数据发送到群集节点。当insert_distributed_sync = 1时,将同步处理数据,并且仅在将所有数据保存在所有分片上之后(如果internal_replication为true,每个分片至少有一个副本),INSERT操作才会成功。

可能的值:

  • 0-以异步模式插入数据。
  • 1-以同步模式插入数据。

默认值:0

use_compact_format_in_distributed_pa​​rts_names 

使用紧凑格式将异步(insert_distributed_sync)INSERT的块存储到带有Distributed引擎的表中。

可能的值:

  • 0-使用user[:password]@host:port#default_database目录格式。
  • 1-使用[shard{shard_index}[_replica{replica_index}]]目录格式。

默认值:1

注意:

  • use_compact_format_in_distributed_parts_names = 0时,集群定义的更改将不会应用于异步INSERT。
  • 使用use_compact_format_in_distributed_parts_names = 1更改群集定义中节点的顺序时,将更改shard_index / replica_index,因此请注意。

background_buffer_flush_schedule_pool_size 

设置在Buffer -engine表中执行后台刷新的线程数。此设置在ClickHouse服务器启动时应用,无法在用户会话中更改。

可能的值:

  • 任何正整数。

默认值:16

background_move_pool_size 

设置执行MergeTree引擎表的数据部分后台移动的线程数。此设置在ClickHouse服务器启动时应用,无法在用户会话中更改。

可能的值:

  • 任何正整数。

默认值:8。

background_schedule_pool_size 

设置为复制表,Kafka流,DNS缓存更新执行后台任务的线程数。此设置在ClickHouse服务器启动时应用,无法在用户会话中更改。

可能的值:

  • 任何正整数。

默认值:16

always_fetch_merged_pa​​rt 

禁止在Replicated * MergeTree -engine表中合并数据部分。

当禁止合并时,副本绝不合并部件,并且始终从其他副本下载合并的部件。如果尚无必需的数据,则副本将等待它。副本服务器上的CPU和磁盘负载减少,但是群集上的网络负载增加。此设置在CPU相对较弱或磁盘速度较慢的服务器(例如用于备份存储的服务器)上很有用。

可能的值:

  • 0-Replicated*MergeTree引擎表合并副本中的数据部分。
  • 1-- Replicated*MergeTreeengine表不合并副本中的数据部分。这些表从其他副本下载合并的数据部分。

默认值:0。

也可以看:

background_distributed_schedule_pool_size 

设置为分布式发送执行后台任务的线程数。此设置在ClickHouse服务器启动时应用,无法在用户会话中更改。

可能的值:

  • 任何正整数。

默认值:16

validate_polygons 

如果多边形是自相交或自相切的,则启用或禁用在pointInPolygon函数中引发异常。

可能的值:

  • 0-禁用引发异常。pointInPolygon接受无效的多边形,并为其返回可能不正确的结果。
  • 1-启用引发异常。

默认值:1。

transform_null_in 

IN运算符启用NULL值的相等性。

默认情况下,无法比较NULL值,因为NULL表示未定义的值。 因此,比较expr = NULL必须始终返回false。 使用此设置NULL = NULL对于IN运算符返回true。

可能值:

0-IN运算符中NULL值的比较返回false。
1-IN运算符中NULL值的比较返回true。

默认:0

举例:

考虑null_in表:

┌──idx─┬─────i─┐
│    1 │     1 │
│    2 │  NULL │
│    3 │     3 │
└──────┴───────┘

查询:
SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 0;

结果:

┌──idx─┬────i─┐
│    1 │    1 │
└──────┴──────┘

查询:

SELECT idx, i FROM null_in WHERE i IN (1, NULL) SETTINGS transform_null_in = 1;

结果:

┌──idx─┬─────i─┐
│    1 │     1 │
│    2 │  NULL │
└──────┴───────┘

low_cardinality_max_dictionary_size 

在可写入存储文件系统的LowCardinality数据类型的共享全局字典的行中设置最大大小。在无限制的字典增长的情况下,此设置可以防止RAM出现问题。由于最大字典大小的限制,所有无法编码的数据都是ClickHouse用普通方法写入的。

可能的值:

  • 任何正整数。

默认值:8192

low_cardinality_use_single_dictionary_for_part 

使用单个字典打开或关闭数据部分。

默认情况下,ClickHouse服务器监视词典的大小,如果词典溢出,则服务器将开始编写下一个词典。 要禁止创建多个词典,请设置low_cardinality_use_single_dictionary_for_part = 1。

可能的值:

  • 1-禁止为数据部分创建多个词典。
  • 0-禁止为数据部分创建多个词典。

默认值:0。

low_cardinality_allow_in_native_format

允许或限制将LowCardinality数据类型与本机格式一起使用。

如果限制使用LowCardinality,则ClickHouse服务器将SELECT查询的LowCardinality列转换为普通列,而对于INSERT查询,将普通的列转换为LowCardinality列。

主要对于不支持LowCardinality数据类型的第三方客户端,此设置是必需的。

可能的值:

  • 1-LowCardinality的使用不受限制。
  • 0-LowCardinality的使用受到限制。

默认值:1。

allow_suspicious_low_cardinality_types 

允许或限制将LowCardinality用于固定大小为8字节或更小的数据类型:数字数据类型和FixedString(8_bytes_or_less)

对于小的固定值,LowCardinality通常使用of效率低下,因为ClickHouse为每行存储一个数字索引。结果是:

  • 磁盘空间使用量可能会增加。
  • RAM消耗可能更高,具体取决于字典大小。
  • 由于额外的编码/编码操作,某些功能的运行速度可能较慢。

由于上述所有原因,MergeTree -engine表中的合并时间可能会增加。

可能的值:

  • 1-LowCardinality的使用不受限制。
  • 0-LowCardinality的使用受到限制。

默认值:0。

min_insert_block_size_rows_for_materialized_views 

设置INSERT查询中可插入表中的最小行数。较小的块将被压缩为较大的块。

此设置仅适用于插入实例化视图中的块。 通过调整此设置,您可以控制推送到实例化视图时的压缩,并避免过多的内存使用。

可能的值:

  • 任何正整数。
  • 0-禁止挤压。

默认值:1048576

也可以看看

min_insert_block_size_bytes_for_materialized_views 

设置INSERT查询中可插入表中的块中的最小字节数。较小的块将被压缩为较大的块。

此设置仅适用于插入实例化视图中的块。 通过调整此设置,您可以控制推送到实例化视图时的压缩,并避免过多的内存使用。

可能的值:

  • 任何正整数。
  • 0-禁止挤压。

默认值:268435456

也可以看看

output_format_pretty_grid_charset 

允许更改用于打印网格边框的字符集。可用的字符集为UTF-8,ASCII。

SET output_format_pretty_grid_charset = 'UTF-8';
SELECT * FROM a;
┌─a─┐
│ 1 │
└───┘

SET output_format_pretty_grid_charset = 'ASCII';
SELECT * FROM a;
+-a-+
| 1 |
+---+

optimize_read_in_order 

SELECT查询中启用ORDER BY优化,以从MergeTree表中读取数据。

可能的值:

  • 0-ORDER BY禁用优化。
  • 1-ORDER BY启用优化。

默认值:1

也可以看看

mutations_sync

允许同步执行ALTER TABLE ... UPDATE|DELETE查询(变种)。

可能的值:

  • 0-变异异步执行。
  • 1-查询等待所有变异在当前服务器上完成。
  • 2-查询等待所有副本上的所有变异完成(如果存在)。

默认值:0

也可以看看

ttl_only_drop_parts 

启用或禁用MergeTree表中所有行均已过期的数据部分的完全删除。

ttl_only_drop_parts被禁用(默认设置),将ClickHouse服务器只根据自己的TTL删除过期行。

ttl_only_drop_parts启用时,当ClickHouse服务器中的所有行都到期时,它将丢弃整个部分。

丢弃整个部件,而不是部分清洁TTL-d行,可以缩短merge_with_ttl_timeout时间,并减少对系统性能的影响。

可能的值:

  • 0-禁止完全删除数据部分。
  • 1-允许完全删除数据部分。

默认值:0

也可以看看

lock_acquire_timeout 

定义锁定请求失败之前要等待的秒数。

锁定超时用于防止对表执行读/写操作时的死锁。当超时到期且锁定请求失败时,ClickHouse服务器将引发异常"Locking attempt timed out! Possible deadlock avoided. Client should retry."

错误代码DEADLOCK_AVOIDED

可能的值:

  • 正整数(以秒为单位)。
  • 0-无锁定超时。

默认值:120秒。

cast_keep_nullable

启用或禁用在CAST操作中保留Nullable数据类型。

当启用该设置并且CAST函数的参数为Nullable时,结果也将转换为Nullable类型。 禁用设置后,结果始终具有完全相同的目标类型。

可能的值:

  • 0 — CAST结果完全指定了目标类型。
  • 1 —如果参数类型为Nullable,则CAST结果将转换为Nullable(DestinationDataType)。

默认值:0。

例子

以下查询将精确地得出目标数据类型:

SET cast_keep_nullable = 0;
SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x);

结果:

┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐
│ 0 │ Int32                                             │
└───┴───────────────────────────────────────────────────┘

以下查询导致Nullable对目标数据类型进行修改:

SET cast_keep_nullable = 1;
SELECT CAST(toNullable(toInt32(0)) AS Int32) as x, toTypeName(x);

结果:

┌─x─┬─toTypeName(CAST(toNullable(toInt32(0)), 'Int32'))─┐
│ 0 │ Nullable(Int32)                                   │
└───┴───────────────────────────────────────────────────┘

也可以看看

output_format_pretty_max_value_width 

限制以Pretty格式显示的值的宽度。如果值的宽度超出限制,则将剪切该值。

可能的值:

  • 正整数。
  • 0-值被完全削减。

默认值:10000字符

查询:

SET output_format_pretty_max_value_width = 10;
SELECT range(number) FROM system.numbers LIMIT 10 FORMAT PrettyCompactNoEscapes;

结果:

┌─range(number)─┐
│ []            │
│ [0]           │
│ [0,1]         │
│ [0,1,2]       │
│ [0,1,2,3]     │
│ [0,1,2,3,4⋯   │
│ [0,1,2,3,4⋯   │
│ [0,1,2,3,4⋯   │
│ [0,1,2,3,4⋯   │
│ [0,1,2,3,4⋯   │
└───────────────┘

查询宽度为零:

SET output_format_pretty_max_value_width = 0;
SELECT range(number) FROM system.numbers LIMIT 5 FORMAT PrettyCompactNoEscapes;

结果:

┌─range(number)─┐
│ ⋯             │
│ ⋯             │
│ ⋯             │
│ ⋯             │
│ ⋯             │
└───────────────┘

output_format_pretty_row_numbers 

添加行号以“ Pretty”格式输出。

可能的值:

  • 0-没有行号的输出。
  • 1-输出行号。

默认值:0

查询:

SET output_format_pretty_row_numbers = 1;
SELECT TOP 3 name, value FROM system.settings;

结果:

   ┌─name────────────────────┬─value───┐
1. │ min_compress_block_size │ 65536   │
2. │ max_compress_block_size │ 1048576 │
3. │ max_block_size          │ 65505   │
   └─────────────────────────┴─────────┘

allow_experimental_bigint_types 

启用或禁用超出int数据类型支持的范围的整数值。

可能的值:

  • 1-启用了bigint数据类型。
  • 0-禁用bigint数据类型。

默认值:0

persistent

禁用“ Set”和" Join "表引擎的持久性。

减少I / O开销。适用于追求性能且不需要持久性的场景。

可能的值:

  • 1-启用。
  • 0-禁用。

默认值:1

output_format_tsv_null_representation

允许TSV输出格式的可配置NULL表示。 该设置仅控制输出格式,\ N是TSV输入格式唯一受支持的NULL表示形式。

默认值:\N

 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值