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
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.