Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Настройки сеанса min_*

Эти настройки доступны в system.settings и автоматически генерируются на основе исходного кода.

min_chunk_bytes_for_parallel_parsing

Тип
NonZeroUInt64
По умолчанию
10485760
  • Тип: беззнаковое целое число
  • Значение по умолчанию: 1 MiB

Минимальный размер фрагмента в байтах, разбираемого каждым потоком параллельно.

min_compress_block_size

Тип
UInt64
По умолчанию
65536

Для таблиц 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

Тип
Float
По умолчанию
0.5
История версий
ВерсияЗначение по умолчаниюКомментарий
26.40.5Новая настройка минимальной доли марок, отфильтрованных для продолжения отложенной оптимизации FINAL

Минимальная доля марок, отфильтрованных при анализе индексов, необходимая для применения отложенной оптимизации FINAL. Если отфильтровано меньше этой доли марок, используется обычный FINAL. Значение 0 отключает эту проверку.

min_hit_rate_to_use_consecutive_keys_optimization

Тип
Float
По умолчанию
0.5

Минимальный коэффициент попаданий кэша, используемого для оптимизации последовательных ключей при агрегации, чтобы она оставалась включенной

min_os_cpu_wait_time_ratio_to_throw

Тип
Float
По умолчанию
0
История версий
ВерсияЗначение по умолчаниюКомментарий
25.50Значения настройки были изменены и бэкпортированы в 25.4
25.40Новая настройка

Минимальное отношение между временем ожидания CPU ОС (метрика OSCPUWaitMicroseconds) и временем занятости CPU (метрика OSCPUVirtualTimeMicroseconds), при котором может рассматриваться отклонение запросов. Для расчета вероятности используется линейная интерполяция между минимальным и максимальным отношением; в этой точке вероятность равна 0.

min_outstreams_per_resize_after_split

Тип
UInt64
По умолчанию
24
История версий
ВерсияЗначение по умолчаниюКомментарий
25.624Новая настройка.

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

Что такое узел Resize

Узел Resize — это процессор в конвейере выполнения запроса, который регулирует количество потоков данных, проходящих через конвейер. Он может как увеличивать, так и уменьшать число потоков, чтобы сбалансировать рабочую нагрузку между несколькими потоками выполнения или процессорами. Например, если для запроса требуется больший параллелизм, узел Resize может разделить один поток на несколько. И наоборот, он может объединить несколько потоков в меньшее число, чтобы объединить обработку данных.

Узел Resize обеспечивает равномерное распределение данных между потоками, сохраняя структуру блоков данных. Это помогает эффективнее использовать ресурсы и повышает производительность запросов.

Почему узел Resize нужно разделить

Во время выполнения конвейера за ExecutingGraph::Node::status_mutex в центральном узле Resize возникает сильное contention, особенно в средах с большим числом ядер, и это приводит к следующему:

  1. Увеличивается latency для ExecutingGraph::updateNode, что напрямую влияет на query performance.
  2. Избыточные циклы CPU впустую расходуются на contention в spin-lock (native_queued_spin_lock_slowpath), что снижает эффективность.
  3. Снижается utilization CPU, что ограничивает параллелизм и throughput.

Как разделяется узел Resize

  1. Проверяется число выходных потоков, чтобы убедиться, что разделение можно выполнить: число выходных потоков у каждого процессора после разделения достигает порога min_outstreams_per_resize_after_split или превышает его.
  2. Узел Resize делится на более мелкие узлы Resize с одинаковым количеством портов, каждый из которых обрабатывает подмножество входных и выходных потоков.
  3. Каждая группа обрабатывается независимо, что снижает конкуренцию за блокировки.

Разделение узла Resize с произвольным числом входов и выходов

В некоторых случаях, когда число входов/выходов не делится нацело на количество узлов Resize после разделения, часть входов подключается к NullSource, а часть выходов — к NullSink. Это позволяет выполнить разделение, не влияя на общий поток данных.

Назначение настройки

Настройка min_outstreams_per_resize_after_split гарантирует, что разделение узлов Resize оправдано и не приводит к созданию слишком малого числа потоков, что может снизить эффективность параллельной обработки. Задавая минимальное количество выходных потоков, эта настройка помогает поддерживать баланс между параллелизмом и накладными расходами, оптимизируя выполнение запроса в сценариях, связанных с разделением и слиянием потоков.

Отключение настройки

Чтобы отключить split узлов Resize, установите для этой настройки значение 0. Это предотвратит split узлов Resize при генерации конвейера, и они сохранят исходную структуру без разделения на более мелкие узлы.

min_rows_ratio_for_hash_join_row_store

Тип
Double
По умолчанию
5
История версий
ВерсияЗначение по умолчаниюКомментарий
26.95Новая настройка для задания минимального оценочного отношения числа строк результата JOIN к числу строк со стороны построения, при котором полезная нагрузка hash join преобразуется в построчный формат. 0 означает, что преобразование разрешено всегда.

Минимальное оценочное отношение числа строк результата JOIN к числу строк со стороны построения, при котором полезная нагрузка hash join преобразуется в построчный формат. 0 означает, что преобразование разрешено всегда.

min_table_rows_to_use_projection_index

Тип
UInt64
По умолчанию
1000000
История версий
ВерсияЗначение по умолчаниюКомментарий
25.111000000новая настройка

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

Navigation