settings.md 35.8 KB
Newer Older
1 2
# Настройки

3

4
## distributed_product_mode
5

I
Ivan Blinkov 已提交
6
Изменяет поведение [распределенных подзапросов](../../query_language/select.md).
7

8
ClickHouse применяет настройку в тех случаях, когда запрос содержит произведение распределённых таблиц, т.е. когда запрос к распределенной таблице содержит не-GLOBAL подзапрос к также распределенной таблице.
9

10 11
Условия применения:

12
-   Только подзапросы для IN, JOIN.
13
-   Только если в секции FROM используется распределённая таблица, содержащая более одного шарда.
14
-   Если подзапрос касается распределенной таблицы, содержащей более одного шарда,
I
Ivan Blinkov 已提交
15
-   Не используется в случае табличной функции [remote](../../query_language/table_functions/remote.md).
16

17 18
Возможные значения:

19
- `deny`   - (по умолчанию) запрещает использование таких подзапросов (При попытке использование вернет исключение "Double-distributed IN/JOIN subqueries is denied");
20 21
- `local`  - заменит базу данных и таблицу в подзапросе на локальные для конечного сервера (шарда), оставив обычный `IN` / `JOIN`;
- `global` - заменит запрос `IN` / `JOIN` на `GLOBAL IN` / `GLOBAL JOIN`;
22
- `allow`  - разрешает использование таких подзапросов.
23

24

25
## fallback_to_stale_replicas_for_distributed_queries
26

I
Ivan Blinkov 已提交
27
Форсирует запрос в устаревшую реплику в случае, если актуальные данные недоступны. Смотрите "[Репликация](../../operations/table_engines/replication.md)".
28 29 30

Из устаревших реплик таблицы ClickHouse выбирает наиболее актуальную.

31
Используется при выполнении `SELECT` из распределенной таблицы, которая указывает на реплицированные таблицы.
32 33 34

По умолчанию - 1 (включена).

35
## force_index_by_date {#settings-force_index_by_date}
36 37 38 39 40

Запрещает выполнение запросов, если использовать индекс по дате невозможно.

Работает с таблицами семейства MergeTree.

I
Ivan Blinkov 已提交
41
При `force_index_by_date=1` ClickHouse проверяет, есть ли в запросе условие на ключ даты, которое может использоваться для отсечения диапазонов данных. Если подходящего условия нет - кидается исключение. При этом не проверяется, действительно ли условие уменьшает объём данных для чтения. Например, условие `Date != '2000-01-01'` подходит даже в том случае, когда соответствует всем данным в таблице (т.е. для выполнения запроса требуется full scan). Подробнее про диапазоны данных в таблицах MergeTree читайте в разделе "[MergeTree](../../operations/table_engines/mergetree.md)".
42 43


44
## force_primary_key
45 46 47 48 49

Запрещает выполнение запросов, если использовать индекс по первичному ключу невозможно.

Работает с таблицами семейства MergeTree.

I
Ivan Blinkov 已提交
50
При `force_primary_key=1` ClickHouse проверяет, есть ли в запросе условие на первичный ключ, которое может использоваться для отсечения диапазонов данных. Если подходящего условия нет - кидается исключение. При этом не проверяется, действительно ли условие уменьшает объём данных для чтения. Подробнее про диапазоны данных в таблицах MergeTree читайте в разделе "[MergeTree](../../operations/table_engines/mergetree.md)".
51

52

53
## fsync_metadata
54

B
BayoNet 已提交
55
Включить или отключить fsync при записи .sql файлов. По умолчанию включено.
56 57 58

Имеет смысл выключать, если на сервере миллионы мелких таблиц-чанков, которые постоянно создаются и уничтожаются.

59
## input_format_allow_errors_num
60

61 62 63 64
Устанавливает максимальное количество допустимых ошибок при чтении из текстовых форматов (CSV, TSV и т.п.).

Значение по умолчанию - 0.

65
Используйте обязательно в паре с `input_format_allow_errors_ratio`. Для пропуска ошибок, значения обеих настроек должны быть больше 0.
66

67
Если при чтении строки возникла ошибка, но при этом счетчик ошибок меньше `input_format_allow_errors_num`, то ClickHouse игнорирует строку и переходит к следующей.
68

69
В случае превышения `input_format_allow_errors_num` ClickHouse генерирует исключение.
70

71
## input_format_allow_errors_ratio
72

A
alexey-milovidov 已提交
73 74
Устанавливает максимальную долю допустимых ошибок при чтении из текстовых форматов (CSV, TSV и т.п.).
Доля ошибок задаётся в виде числа с плавающей запятой от 0 до 1.
75 76 77

Значение по умолчанию - 0.

78
Используйте обязательно в паре с `input_format_allow_errors_num`. Для пропуска ошибок, значения обеих настроек должны быть больше 0.
79

80
Если при чтении строки возникла ошибка, но при этом текущая доля ошибок меньше `input_format_allow_errors_ratio`, то ClickHouse игнорирует строку и переходит к следующей.
81

82
В случае превышения `input_format_allow_errors_ratio` ClickHouse генерирует исключение.
83

84
## max_block_size
85 86

Данные в ClickHouse обрабатываются по блокам (наборам кусочков столбцов). Внутренние циклы обработки одного блока достаточно эффективны, но при этом существуют заметные издержки на каждый блок. `max_block_size` - это рекомендация, какого размера блоки (в количестве строк) загружать из таблицы. Размер блока должен быть не слишком маленьким, чтобы издержки на каждый блок оставались незаметными, и не слишком большим, чтобы запрос с LIMIT-ом, который завершается уже после первого блока, выполнялся быстро; чтобы не использовалось слишком много оперативки при вынимании большого количества столбцов в несколько потоков; чтобы оставалась хоть какая-нибудь кэш-локальность.
87 88 89

По умолчанию - 65 536.

90
Из таблицы не всегда загружаются блоки размера `max_block_size`. Если ясно, что нужно прочитать меньше данных, то будет считан блок меньшего размера.
91

92
## preferred_block_size_bytes
93 94 95

Служит для тех же целей что и `max_block_size`, но задает реккомедуемый размер блоков в байтах, выбирая адаптивное количество строк в блоке.
При этом размер блока не может быть более `max_block_size` строк.
96
Значение по умолчанию: 1,000,000. Работает только при чтении из MergeTree-движков.
97

98

99
## log_queries
100 101 102

Установка логгирования запроса.

I
Ivan Blinkov 已提交
103
Запросы, переданные в ClickHouse с этой установкой, логгируются согласно правилам конфигурационного параметра сервера [query_log](../server_settings/settings.md).
104 105

**Пример** :
106

107
    log_queries=1
108

109
## max_insert_block_size {#settings-max_insert_block_size}
110

111 112 113 114 115 116
Формировать блоки указанного размера, при вставке в таблицу.
Эта настройка действует только в тех случаях, когда сервер сам формирует такие блоки.
Например, при INSERT-е через HTTP интерфейс, сервер парсит формат данных, и формирует блоки указанного размера.
А при использовании clickhouse-client, клиент сам парсит данные, и настройка max_insert_block_size на сервере не влияет на размер вставляемых блоков.
При использовании INSERT SELECT, настройка так же не имеет смысла, так как данные будут вставляться теми блоками, которые вышли после SELECT-а.

117
По умолчанию - 1 048 576.
118

119
Это намного больше, чем `max_block_size`. Это сделано, потому что некоторые движки таблиц (`*MergeTree`) будут на каждый вставляемый блок формировать кусок данных на диске, что является довольно большой сущностью. Также, в таблицах типа `*MergeTree`, данные сортируются при вставке, и достаточно большой размер блока позволяет отсортировать больше данных в оперативке.
120

B
BayoNet 已提交
121
## max_replica_delay_for_distributed_queries {#settings-max_replica_delay_for_distributed_queries}
122

I
Ivan Blinkov 已提交
123
Отключает отстающие реплики при распределенных запросах. Смотрите "[Репликация](../../operations/table_engines/replication.md)".
124 125 126

Устанавливает время в секундах. Если оставание реплики больше установленного значения, то реплика не используется.

127
Значение по умолчанию: 300.
128

129
Используется при выполнении `SELECT` из распределенной таблицы, которая указывает на реплицированные таблицы.
130

131
## max_threads {#settings-max_threads}
132

133 134 135 136 137 138
Максимальное количество потоков обработки запроса
- без учёта потоков для чтения данных с удалённых серверов (смотрите параметр max_distributed_connections).

Этот параметр относится к потокам, которые выполняют параллельно одни стадии конвейера выполнения запроса.
Например, если чтение из таблицы, вычисление выражений с функциями, фильтрацию с помощью WHERE и предварительную агрегацию для GROUP BY можно делать параллельно с использованием как минимум max_threads потоков, то будет использовано max_threads потоков.

139
По умолчанию - 2.
140 141 142 143 144

Если на сервере обычно исполняется менее одного запроса SELECT одновременно, то выставите этот параметр в значение чуть меньше количества реальных процессорных ядер.

Для запросов, которые быстро завершаются из-за LIMIT-а, имеет смысл выставить max_threads поменьше. Например, если нужное количество записей находится в каждом блоке, то при max_threads = 8 будет считано 8 блоков, хотя достаточно было прочитать один.

145
Чем меньше `max_threads`, тем меньше будет использоваться оперативки.
146

147
## max_compress_block_size
148

149 150 151 152
Максимальный размер блоков не сжатых данных перед сжатием при записи в таблицу. По умолчанию - 1 048 576 (1 MiB). При уменьшении размера, незначительно уменьшается коэффициент сжатия, незначительно возрастает скорость сжатия и разжатия за счёт кэш-локальности, и уменьшается потребление оперативки. Как правило, не имеет смысла менять эту настройку.

Не путайте блоки для сжатия (кусок памяти, состоящий из байт) и блоки для обработки запроса (пачка строк из таблицы).

153
## min_compress_block_size
154

I
Ivan Blinkov 已提交
155
Для таблиц типа "[MergeTree](../../operations/table_engines/mergetree.md
156 157 158 159 160 161 162 163 164 165
Реальный размер блока, если несжатых данных меньше max_compress_block_size, будет не меньше этого значения и не меньше объёма данных на одну засечку.

Рассмотрим пример. Пусть index_granularity, указанная при создании таблицы - 8192.

Пусть мы записываем столбец типа UInt32 (4 байта на значение). При записи 8192 строк, будет всего 32 КБ данных. Так как min_compress_block_size = 65 536, сжатый блок будет сформирован на каждые две засечки.

Пусть мы записываем столбец URL типа String (средний размер - 60 байт на значение). При записи 8192 строк, будет, в среднем, чуть меньше 500 КБ данных. Так как это больше 65 536 строк, то сжатый блок будет сформирован на каждую засечку. В этом случае, при чтении с диска данных из диапазона в одну засечку, не будет разжато лишних данных.

Как правило, не имеет смысла менять эту настройку.

166
## max_query_size
167

168 169 170
Максимальный кусок запроса, который будет считан в оперативку для разбора парсером языка SQL.
Запрос INSERT также содержит данные для INSERT-а, которые обрабатываются отдельным, потоковым парсером (расходующим O(1) оперативки), и не учитываются в этом ограничении.

171
По умолчанию - 256 KiB.
172

173
## interactive_delay
174

175
Интервал в микросекундах для проверки, не запрошена ли остановка выполнения запроса, и отправки прогресса.
176

177 178
По умолчанию - 100 000 (проверять остановку запроса и отправлять прогресс десять раз в секунду).

179
## connect_timeout, receive_timeout, send_timeout
180

181
Таймауты в секундах на сокет, по которому идёт общение с клиентом.
182 183

По умолчанию - 10, 300, 300.
184

185
## poll_interval
186

187
Блокироваться в цикле ожидания запроса в сервере на указанное количество секунд.
188 189

По умолчанию - 10.
190

191
## max_distributed_connections
192

193 194
Максимальное количество одновременных соединений с удалёнными серверами при распределённой обработке одного запроса к одной таблице типа Distributed. Рекомендуется выставлять не меньше, чем количество серверов в кластере.

195
По умолчанию - 1024.
196 197 198

Следующие параметры имеют значение только на момент создания таблицы типа Distributed (и при запуске сервера), поэтому их не имеет смысла менять в рантайме.

199
## distributed_connections_pool_size
200

201 202
Максимальное количество одновременных соединений с удалёнными серверами при распределённой обработке всех запросов к одной таблице типа Distributed. Рекомендуется выставлять не меньше, чем количество серверов в кластере.

203
По умолчанию - 1024.
204

205
## connect_timeout_with_failover_ms
206

207 208
Таймаут в миллисекундах на соединение с удалённым сервером, для движка таблиц Distributed, если используются секции shard и replica в описании кластера.
В случае неуспеха, делается несколько попыток соединений с разными репликами.
209 210

По умолчанию - 50.
211

212
## connections_with_failover_max_tries
213

214
Максимальное количество попыток соединения с каждой репликой, для движка таблиц Distributed.
215 216

По умолчанию - 3.
217

218
## extremes
219

220 221 222
Считать ли экстремальные значения (минимумы и максимумы по столбцам результата запроса). Принимает 0 или 1. По умолчанию - 0 (выключено).
Подробнее смотрите раздел "Экстремальные значения".

223

224
## use_uncompressed_cache
225

226
Использовать ли кэш разжатых блоков. Принимает 0 или 1. По умолчанию - 1 (включено).
227 228 229 230
Кэш разжатых блоков (только для таблиц семейства MergeTree) позволяет существенно уменьшить задержки и увеличить пропускную способность при обработке большого количества коротких запросов. Включите эту настройку для пользователей, от которых идут частые короткие запросы. Также обратите внимание на конфигурационный параметр uncompressed_cache_size (настраивается только в конфигурационном файле) - размер кэша разжатых блоков. По умолчанию - 8 GiB. Кэш разжатых блоков заполняется по мере надобности; наиболее невостребованные данные автоматически удаляются.

Для запросов, читающих хоть немного приличный объём данных (миллион строк и больше), кэш разжатых блоков автоматически выключается, чтобы оставить место для действительно мелких запросов. Поэтому, можно держать настройку use_uncompressed_cache всегда выставленной в 1.

231
## replace_running_query
232

233 234 235
При использовании HTTP-интерфейса, может быть передан параметр query_id - произвольная строка, являющаяся идентификатором запроса.
Если в этот момент, уже существует запрос от того же пользователя с тем же query_id, то поведение определяется параметром replace_running_query.

236
`0` - (по умолчанию) кинуть исключение (не давать выполнить запрос, если запрос с таким же query_id уже выполняется);
237

238
`1` - отменить старый запрос и начать выполнять новый.
239 240 241

Эта настройка, выставленная в 1, используется в Яндекс.Метрике для реализации suggest-а значений для условий сегментации. После ввода очередного символа, если старый запрос ещё не выполнился, его следует отменить.

242
## schema
243 244 245 246

Параметр применяется в том случае, когда используются форматы, требующие определения схемы, например [Cap'n Proto](https://capnproto.org/). Значение параметра зависит от формата.


247
## stream_flush_interval_ms
248

249
Работает для таблиц со стриммингом в случае тайм-аута, или когда поток генерирует [max_insert_block_size](#settings-max_insert_block_size) строк.
250 251 252 253 254 255

Значение по умолчанию - 7500.

Чем меньше значение, тем чаще данные сбрасываются в таблицу. Установка слишком низкого значения приводит к снижению производительности.


256
## load_balancing
257

258 259
На какие реплики (среди живых реплик) предпочитать отправлять запрос (при первой попытке) при распределённой обработке запроса.

260
### random (по умолчанию)
261 262 263
Для каждой реплики считается количество ошибок. Запрос отправляется на реплику с минимальным числом ошибок, а если таких несколько, то на случайную из них.
Недостатки: не учитывается близость серверов; если на репликах оказались разные данные, то вы будете получать так же разные данные.

264
### nearest_hostname
265 266 267 268 269 270 271 272
Для каждой реплики считается количество ошибок. Каждые 5 минут, число ошибок целочисленно делится на 2 - таким образом, обеспечивается расчёт числа ошибок за недавнее время с экспоненциальным сглаживанием. Если есть одна реплика с минимальным числом ошибок (то есть, на других репликах недавно были ошибки) - запрос отправляется на неё. Если есть несколько реплик с одинаковым минимальным числом ошибок, то запрос отправляется на реплику, имя хоста которой в конфигурационном файле минимально отличается от имени хоста сервера (по количеству отличающихся символов на одинаковых позициях, до минимальной длины обеих имён хостов).

Для примера, example01-01-1 и example01-01-2.yandex.ru отличаются в одной позиции, а example01-01-1 и example01-02-2 - в двух.
Этот способ может показаться несколько дурацким, но он не использует внешние данные о топологии сети, и не сравнивает IP-адреса, что было бы сложным для наших IPv6-адресов.

Таким образом, если есть равнозначные реплики, предпочитается ближайшая по имени.
Также можно сделать предположение, что при отправке запроса на один и тот же сервер, в случае отсутствия сбоев, распределённый запрос будет идти тоже на одни и те же серверы. То есть, даже если на репликах расположены разные данные, запрос будет возвращать в основном одинаковые результаты.

273
### in_order
274 275 276
Реплики перебираются в таком порядке, в каком они указаны. Количество ошибок не имеет значения.
Этот способ подходит для тех случаев, когда вы точно знаете, какая реплика предпочтительнее.

277
## totals_mode
278

279 280 281
Каким образом вычислять TOTALS при наличии HAVING, а также при наличии max_rows_to_group_by и group_by_overflow_mode = 'any'.
Смотрите раздел "Модификатор WITH TOTALS".

282
## totals_auto_threshold
283 284

Порог для `totals_mode = 'auto'`.
285 286
Смотрите раздел "Модификатор WITH TOTALS".

287
## max_parallel_replicas
288

289 290 291 292
Максимальное количество используемых реплик каждого шарда при выполнении запроса.
Для консистентности (чтобы получить разные части одного и того же разбиения), эта опция работает только при заданном ключе сэмплирования.
Отставание реплик не контролируется.

293
## compile
294

295 296 297 298 299
Включить компиляцию запросов. По умолчанию - 0 (выключено).

Компиляция предусмотрена только для части конвейера обработки запроса - для первой стадии агрегации (GROUP BY).
В случае, если эта часть конвейера была скомпилирована, запрос может работать быстрее, за счёт разворачивания коротких циклов и инлайнинга вызовов агрегатных функций. Максимальный прирост производительности (до четырёх раз в редких случаях) достигается на запросах с несколькими простыми агрегатными функциями. Как правило, прирост производительности незначителен. В очень редких случаях возможно замедление выполнения запроса.

300
## min_count_to_compile
301

302 303 304 305 306 307 308
После скольких раз, когда скомпилированный кусок кода мог пригодиться, выполнить его компиляцию. По умолчанию - 3.
В случае, если значение равно нулю, то компиляция выполняется синхронно, и запрос будет ждать окончания процесса компиляции перед продолжением выполнения. Это можно использовать для тестирования, иначе используйте значения, начиная с 1. Как правило, компиляция занимает по времени около 5-10 секунд.
В случае, если значение равно 1 или больше, компиляция выполняется асинхронно, в отдельном потоке. При готовности результата, он сразу же будет использован, в том числе, уже выполняющимися в данный момент запросами.

Скомпилированный код требуется для каждого разного сочетания используемых в запросе агрегатных функций и вида ключей в GROUP BY.
Результаты компиляции сохраняются в директории build в виде .so файлов. Количество результатов компиляции не ограничено, так как они не занимают много места. При перезапуске сервера, старые результаты будут использованы, за исключением случая обновления сервера - тогда старые результаты удаляются.

309
## input_format_skip_unknown_fields
310

311 312 313
Если значение истинно, то при выполнении INSERT из входных данных пропускаются (не рассматриваются) колонки с неизвестными именами, иначе в данной ситуации будет сгенерировано исключение.
Работает для форматов JSONEachRow и TSKV.

314 315 316 317
## insert_sample_with_metadata

Для запросов INSERT. Указывает, что серверу необходимо отправлять клиенту метаданные о значениях столбцов по умолчанию, которые будут использоваться для вычисления выражений по умолчанию. По умолчанию отключено.

318
## output_format_json_quote_64bit_integers
319 320

Если значение истинно, то при использовании JSON\* форматов UInt64 и Int64 числа выводятся в кавычках (из соображений совместимости с большинством реализаций JavaScript), иначе - без кавычек.
I
Ivan Zhukov 已提交
321

322
## format_csv_delimiter {#settings-format_csv_delimiter}
I
Ivan Zhukov 已提交
323 324

Символ, интерпретируемый как разделитель в данных формата CSV. По умолчанию — `,`.
B
BayoNet 已提交
325 326


B
BayoNet 已提交
327
## join_use_nulls
B
BayoNet 已提交
328

I
Ivan Blinkov 已提交
329
Влияет на поведение [JOIN](../../query_language/select.md).
B
BayoNet 已提交
330

I
Ivan Blinkov 已提交
331
При `join_use_nulls=1` `JOIN` ведёт себя как в стандартном SQL, т.е. если при слиянии возникают пустые ячейки, то тип соответствующего поля преобразуется к [Nullable](../../data_types/nullable.md#data_type-nullable), а пустые ячейки заполняются значениями [NULL](../../query_language/syntax.md).
B
BayoNet 已提交
332 333


334
## insert_quorum {#settings-insert_quorum}
B
BayoNet 已提交
335 336 337 338 339 340 341 342 343 344

Включает кворумную запись.

  - Если `insert_quorum < 2`, то кворумная запись выключена.
  - Если `insert_quorum >= 2`, то кворумная запись включена.

Значение по умолчанию — 0.

**Кворумная запись**

345 346 347 348
`INSERT` завершается успешно только в том случае, когда ClickHouse смог без ошибки записать данные в `insert_quorum` реплик за время `insert_quorum_timeout`. Если по любой причине количество реплик с успешной записью не достигнет `insert_quorum`, то запись считается не состоявшейся и ClickHouse удалит вставленный блок из всех реплик, куда уже успел записать данные.

Все реплики в кворуме консистентны, т.е. содержат данные всех более ранних запросов `INSERT`. Последовательность `INSERT` линеаризуется.

349
При чтении данных, записанных с `insert_quorum` можно использовать настройку [select_sequential_consistency](#settings-select_sequential_consistency).
B
BayoNet 已提交
350 351 352 353

**ClickHouse генерирует исключение**

- Если количество доступных реплик на момент запроса меньше `insert_quorum`.
354
- При попытке записать данные в момент, когда предыдущий блок ещё не вставлен в `insert_quorum` реплик. Эта ситуация может возникнуть, если пользователь вызвал `INSERT` прежде, чем завершился предыдущий с `insert_quorum`.
B
BayoNet 已提交
355 356 357

**См. также параметры**

358 359
- [insert_quorum_timeout](#settings-insert_quorum_timeout)
- [select_sequential_consistency](#settings-select_sequential_consistency)
B
BayoNet 已提交
360 361


362
## insert_quorum_timeout {#settings-insert_quorum_timeout}
B
BayoNet 已提交
363

B
BayoNet 已提交
364
Время ожидания кворумной записи в секундах. Если время прошло, а запись так не состоялась, то ClickHouse сгенерирует исключение и клиент должен повторить запрос на запись того же блока на эту же или любую другую реплику.
B
BayoNet 已提交
365 366 367 368 369

По умолчанию 60 секунд.

**См. также параметры**

370 371
- [insert_quorum](#settings-insert_quorum)
- [select_sequential_consistency](#settings-select_sequential_consistency)
B
BayoNet 已提交
372 373


374
## select_sequential_consistency {#settings-select_sequential_consistency}
B
BayoNet 已提交
375

376
Включение/выключение последовательной консистентности для запросов `SELECT`:
B
BayoNet 已提交
377 378 379 380

- 0 — выключена. Значение по умолчанию.
- 1 — включена.

A
alexey-milovidov 已提交
381
Когда последовательная консистентность включена, то ClickHouse позволит клиенту выполнить запрос `SELECT` только к тем репликам, которые содержат данные всех предыдущих запросов `INSERT`, выполненных с `insert_quorum`. Если клиент обратится к неполной реплике, то ClickHouse сгенерирует исключение. В запросе SELECT не будут участвовать данные, которые ещё не были записаны на кворум реплик.
B
BayoNet 已提交
382 383 384

См. также параметры:

385 386
- [insert_quorum](#settings-insert_quorum)
- [insert_quorum_timeout](#settings-insert_quorum_timeout)
I
Ivan Blinkov 已提交
387 388

[Оригинальная статья](https://clickhouse.yandex/docs/ru/operations/settings/settings/) <!--hide-->