Эти настройки доступны в system.settings и автоматически генерируются на основе исходного кода.
min_chunk_bytes_for_parallel_parsing
- Тип: беззнаковое целое число
- Значение по умолчанию: 1 MiB
Минимальный размер фрагмента в байтах, разбираемого каждым потоком параллельно.
min_compress_block_size
Для таблиц MergeTree. Чтобы уменьшить задержку при обработке запросов, блок сжимается при записи следующей метки, если его размер не меньше min_compress_block_size. По умолчанию — 65 536.
Если объем несжатых данных меньше max_compress_block_size, фактический размер блока будет не меньше этого значения и не меньше объема данных для одной метки.
Рассмотрим пример. Предположим, что при создании таблицы для index_granularity было задано значение 8192.
Записывается столбец типа UInt32 (4 байта на значение). При записи 8192 строк общий объем составит 32 КБ данных. Поскольку min_compress_block_size = 65,536, сжатый блок будет формироваться на каждые две метки.
Записывается столбец URL типа String (средний размер — 60 байт на значение). При записи 8192 строк средний объем будет чуть меньше 500 КБ данных. Поскольку это больше 65,536, сжатый блок будет формироваться для каждой метки. В этом случае при чтении с диска данных в диапазоне одной метки лишние данные распаковываться не будут.
min_filtered_ratio_for_lazy_final
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 26.4 | 0.5 | Новая настройка минимальной доли марок, отфильтрованных для продолжения отложенной оптимизации FINAL |
Минимальная доля марок, отфильтрованных при анализе индексов, необходимая для применения отложенной оптимизации FINAL. Если отфильтровано меньше этой доли марок, используется обычный FINAL. Значение 0 отключает эту проверку.
min_hit_rate_to_use_consecutive_keys_optimization
Минимальный коэффициент попаданий кэша, используемого для оптимизации последовательных ключей при агрегации, чтобы она оставалась включенной
min_os_cpu_wait_time_ratio_to_throw
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 25.5 | 0 | Значения настройки были изменены и бэкпортированы в 25.4 |
| 25.4 | 0 | Новая настройка |
Минимальное отношение между временем ожидания CPU ОС (метрика OSCPUWaitMicroseconds) и временем занятости CPU (метрика OSCPUVirtualTimeMicroseconds), при котором может рассматриваться отклонение запросов. Для расчета вероятности используется линейная интерполяция между минимальным и максимальным отношением; в этой точке вероятность равна 0.
min_outstreams_per_resize_after_split
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 25.6 | 24 | Новая настройка. |
Задаёт минимальное количество выходных потоков у процессора Resize или StrictResize после разделения, выполняемого при генерации конвейера. Если итоговое количество потоков меньше этого значения, операция разделения не выполняется.
Что такое узел Resize
Узел Resize — это процессор в конвейере выполнения запроса, который регулирует количество потоков данных, проходящих через конвейер. Он может как увеличивать, так и уменьшать число потоков, чтобы сбалансировать рабочую нагрузку между несколькими потоками выполнения или процессорами. Например, если для запроса требуется больший параллелизм, узел Resize может разделить один поток на несколько. И наоборот, он может объединить несколько потоков в меньшее число, чтобы объединить обработку данных.
Узел Resize обеспечивает равномерное распределение данных между потоками, сохраняя структуру блоков данных. Это помогает эффективнее использовать ресурсы и повышает производительность запросов.
Почему узел Resize нужно разделить
Во время выполнения конвейера за ExecutingGraph::Node::status_mutex в центральном узле Resize возникает сильное contention, особенно в средах с большим числом ядер, и это приводит к следующему:
- Увеличивается latency для ExecutingGraph::updateNode, что напрямую влияет на query performance.
- Избыточные циклы CPU впустую расходуются на contention в spin-lock (
native_queued_spin_lock_slowpath), что снижает эффективность. - Снижается utilization CPU, что ограничивает параллелизм и throughput.
Как разделяется узел Resize
- Проверяется число выходных потоков, чтобы убедиться, что разделение можно выполнить: число выходных потоков у каждого процессора после разделения достигает порога
min_outstreams_per_resize_after_splitили превышает его. - Узел
Resizeделится на более мелкие узлыResizeс одинаковым количеством портов, каждый из которых обрабатывает подмножество входных и выходных потоков. - Каждая группа обрабатывается независимо, что снижает конкуренцию за блокировки.
Разделение узла Resize с произвольным числом входов и выходов
В некоторых случаях, когда число входов/выходов не делится нацело на количество узлов Resize после разделения, часть входов подключается к NullSource, а часть выходов — к NullSink. Это позволяет выполнить разделение, не влияя на общий поток данных.
Назначение настройки
Настройка min_outstreams_per_resize_after_split гарантирует, что разделение узлов Resize оправдано и не приводит к созданию слишком малого числа потоков, что может снизить эффективность параллельной обработки. Задавая минимальное количество выходных потоков, эта настройка помогает поддерживать баланс между параллелизмом и накладными расходами, оптимизируя выполнение запроса в сценариях, связанных с разделением и слиянием потоков.
Отключение настройки
Чтобы отключить split узлов Resize, установите для этой настройки значение 0. Это предотвратит split узлов Resize при генерации конвейера, и они сохранят исходную структуру без разделения на более мелкие узлы.
min_rows_ratio_for_hash_join_row_store
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 26.9 | 5 | Новая настройка для задания минимального оценочного отношения числа строк результата JOIN к числу строк со стороны построения, при котором полезная нагрузка hash join преобразуется в построчный формат. 0 означает, что преобразование разрешено всегда. |
Минимальное оценочное отношение числа строк результата JOIN к числу строк со стороны построения, при котором полезная нагрузка hash join преобразуется в построчный формат. 0 означает, что преобразование разрешено всегда.
min_table_rows_to_use_projection_index
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 25.11 | 1000000 | новая настройка |
Если оценочное количество строк, которые нужно прочитать из таблицы, больше или равно этому порогу, ClickHouse попытается использовать индекс проекции при выполнении запроса.