Эти настройки доступны в system.settings и автоматически сгенерированы на основе исходного кода.
max_threads
Максимальное количество потоков обработки запроса, за исключением потоков, используемых для получения данных с удалённых серверов (см. параметр 'max_distributed_connections').
Этот параметр применяется к потокам, которые параллельно выполняют одни и те же стадии конвейера обработки запроса.
Например, при чтении из таблицы, если можно параллельно задействовать как минимум число потоков, равное 'max_threads', для вычисления выражений с функциями, фильтрации с помощью WHERE и предварительной агрегации для GROUP BY, то будут использованы 'max_threads'.
Для запросов, которые быстро завершаются из-за LIMIT, можно задать меньшее значение 'max_threads'.
Например, если нужное количество записей находится в каждом блоке и max_threads = 8, то будут считаны 8 блоков, хотя достаточно было бы прочитать только один.
Чем меньше значение max_threads, тем меньше потребляется памяти.
По умолчанию настройка max_threads соответствует числу аппаратных потоков (количеству ядер CPU), доступных ClickHouse.
В особом случае для процессоров x86 с менее чем 32 ядрами CPU и SMT (например, Intel HyperThreading) ClickHouse по умолчанию использует количество логических ядер (= 2 x число физических ядер).
При отсутствии SMT это соответствует количеству ядер CPU.
Для пользователей ClickHouse Cloud значение по умолчанию отображается как auto(N), где N соответствует размеру vCPU вашего сервиса, например 2vCPU/8GiB, 4vCPU/16GiB и т. д.
Список всех размеров сервиса см. на вкладке настроек в консоли Cloud.
max_threads_for_indexes
Максимальное количество потоков, обрабатывающих индексы.
max_threads_min_free_memory_per_thread
История версий
| Версия | Значение по умолчанию | Комментарий |
|---|---|---|
| 26.5 | 1073741824 | Новая настройка для ограничения числа потоков на основе объёма доступной свободной памяти |
Уменьшает max_threads, когда сервер испытывает нехватку памяти, чтобы не запускать сильно распараллеленные запросы, которые с высокой вероятностью достигнут лимита памяти.
Свободная память вычисляется как max_server_memory_usage сервера за вычетом объёма памяти, который в данный момент отслеживается глобальным трекером памяти. Если этой свободной памяти меньше, чем max_threads, умноженное на это значение, max_threads уменьшается до наибольшего N, такого что N * value <= free_memory, с минимумом 1.
Установите 0, чтобы отключить это ограничение.
Например, при значении по умолчанию 1 GiB и 32 GiB свободной памяти значение max_threads ограничивается 32; при 1 GiB свободной памяти оно снижается до 1.
Эта настройка применяется к параллелизму на стороне чтения (SELECT, UNION, INTERSECT/EXCEPT и часть SELECT в INSERT ... SELECT). Для стороны записи см. max_insert_threads_min_free_memory_per_thread.