min_chunk_bytes_for_parallel_parsing
- Tipo: entero sin signo
- Valor predeterminado: 1 MiB
min_compress_block_size
min_compress_block_size. El valor predeterminado es 65.536.
El tamaño real del bloque, si los datos sin comprimir son menores que max_compress_block_size, no será inferior a este valor ni al volumen de datos de una marca.
Veamos un ejemplo. Supongamos que index_granularity se estableció en 8192 durante la creación de la tabla.
Estamos escribiendo una columna de tipo UInt32 (4 bytes por valor). Al escribir 8192 filas, el total será de 32 KB de datos. Como min_compress_block_size = 65.536, se formará un bloque comprimido por cada dos marcas.
Estamos escribiendo una columna URL de tipo String (con un tamaño medio de 60 bytes por valor). Al escribir 8192 filas, la media será de algo menos de 500 KB de datos. Como esto supera 65.536, se formará un bloque comprimido para cada marca. En este caso, al leer datos del disco en el rango de una sola marca, no se descomprimirán datos adicionales.
Esta es una configuración de nivel experto, y no deberías cambiarla si estás empezando con ClickHouse.
min_filtered_ratio_for_lazy_final
0 desactiva esta comprobación.
min_hit_rate_to_use_consecutive_keys_optimization
min_os_cpu_wait_time_ratio_to_throw
min_outstreams_per_resize_after_split
Resize o StrictResize tras realizar la división durante la generación del pipeline. Si el número de flujos resultante es inferior a este valor, la operación de división no se llevará a cabo.
Qué es un nodo Resize
Resize es un procesador del pipeline de consulta que ajusta la cantidad de flujos de datos que pasan por el pipeline. Puede aumentar o reducir el número de flujos para equilibrar la carga de trabajo entre varios hilos o procesadores. Por ejemplo, si una consulta requiere más paralelismo, el nodo Resize puede dividir un único flujo en varios flujos. A la inversa, puede combinar varios flujos en menos flujos para consolidar el procesamiento de datos.
El nodo Resize garantiza que los datos se distribuyan de forma uniforme entre los flujos, manteniendo la estructura de los bloques de datos. Esto ayuda a optimizar la utilización de recursos y a mejorar el rendimiento de las consultas.
Por qué es necesario dividir el nodo Resize
ExecutingGraph::Node::status_mutex del nodo Resize, que actúa como concentrador central, presenta una contención elevada, especialmente en entornos con un gran número de núcleos, y esta contención provoca:
- Un aumento de la latencia de
ExecutingGraph::updateNode, lo que afecta directamente al rendimiento de las consultas. - Se desperdician demasiados ciclos de CPU en la contención del spin-lock (
native_queued_spin_lock_slowpath), lo que reduce la eficiencia. - Una menor utilización de la CPU, lo que limita el paralelismo y el rendimiento.
Cómo se divide el nodo Resize
- Se comprueba el número de flujos de salida para garantizar que la división pueda realizarse: los flujos de salida de cada procesador dividido cumplen o superan el umbral
min_outstreams_per_resize_after_split. - El nodo
Resizese divide en nodosResizemás pequeños con el mismo número de puertos, y cada uno maneja un subconjunto de flujos de entrada y de salida. - Cada grupo se procesa de forma independiente, lo que reduce la contención por bloqueos.
División de un nodo Resize con entradas/salidas arbitrarias
Resize divididos, algunas entradas se conectan a NullSources y algunas salidas se conectan a NullSinks. Esto permite realizar la división sin afectar al flujo general de datos.
Propósito de la configuración
min_outstreams_per_resize_after_split garantiza que la división de los nodos Resize sea útil y evita crear muy pocos flujos, lo que podría dar lugar a un procesamiento en paralelo ineficiente. Al imponer un número mínimo de flujos de salida, esta configuración ayuda a mantener un equilibrio entre el paralelismo y la sobrecarga, optimizando la ejecución de consultas en escenarios que implican la división y fusión de flujos.
Desactivar esta configuración
Resize, establezca esta configuración en 0. Esto evita que los nodos Resize se dividan durante la generación del pipeline, lo que les permite conservar su estructura original sin subdividirse en nodos más pequeños.