max_threads
WHERE y preagregar para GROUP BY en paralelo usando al menos ‘max_threads’ hilos, entonces se usan ‘max_threads’.
Para las consultas que se completan rápidamente debido a un LIMIT, puede establecer un valor más bajo de ‘max_threads’.
Por ejemplo, si el número necesario de filas se encuentra en cada bloque y max_threads = 8, entonces se recuperan 8 bloques, aunque habría bastado con leer solo uno.
Cuanto menor sea el valor de max_threads, menos memoria se consume.
De forma predeterminada, la configuración max_threads coincide con el número de hilos de hardware (número de núcleos de CPU) disponibles para ClickHouse.
Como caso especial, en procesadores x86 con menos de 32 núcleos de CPU y SMT (p. ej., Intel HyperThreading), ClickHouse usa de forma predeterminada el número de núcleos lógicos (= 2 x número de núcleos físicos).
Sin SMT (p. ej., Intel HyperThreading), esto corresponde al número de núcleos de CPU.
Para los usuarios de ClickHouse Cloud, el valor predeterminado se mostrará como auto(N), donde N coincide con el tamaño de vCPU de su servicio; por ejemplo, 2vCPU/8GiB, 4vCPU/16GiB, etc.
Consulte la pestaña de configuración en la Cloud Console para ver una lista de todos los tamaños de servicio.
max_threads_for_indexes
max_threads_min_free_memory_per_thread
max_threads cuando el servidor está bajo presión de memoria, para evitar iniciar consultas con mucho paralelismo que probablemente alcancen el límite de memoria.
La memoria libre se calcula como el valor de max_server_memory_usage del servidor menos la memoria que registra actualmente el rastreador global de memoria. Si esa memoria libre es inferior a max_threads multiplicado por este valor, max_threads se reduce al mayor N tal que N * value <= free_memory, con un mínimo de 1.
Establezca 0 para desactivar este límite.
Por ejemplo, con el valor predeterminado de 1 GiB y 32 GiB de memoria libre, max_threads queda limitado a 32; con 1 GiB de memoria libre, se reduce a 1.
Esta configuración se aplica al paralelismo del lado de lectura (SELECT, UNION, INTERSECT/EXCEPT y el lado SELECT de INSERT ... SELECT). Para el lado de escritura, consulte max_insert_threads_min_free_memory_per_thread.