columns_cache_max_bytes_to_write_to_cache
Umbral flexible por consulta para los bytes que una sola consulta escribe en la caché de columnas. Se contabilizan los bytes escritos durante la consulta y, en cuanto el contador alcanza este valor, se omiten las demás escrituras en la caché durante el resto de la consulta. Se trata de un umbral orientativo, no de un límite estricto: un lector acumula las entradas de los gránulos que ha leído y las escribe en la caché en un único batch, y el batch que supera el umbral se almacena completo antes de sumarse al contador. Por lo tanto, la cantidad real escrita puede superar este valor, como máximo, en las entradas que un lector acumula entre dos escrituras (las columnas que lee, con una entrada por franja de unas 65536 filas cada una) y, si hay varios lectores ejecutándose a la vez, en esa cantidad por cada lector. El objetivo es evitar que un único escaneo de gran tamaño desplace datos útiles de la caché, no limitar con exactitud su uso. Un valor de0 indica que se usa la mitad del límite de tamaño actual de la caché de columnas: el valor configurado en columns_cache_size, o uno menor mientras la caché esté reducida por presión de memoria (consulte la métrica ColumnsCacheSizeLimit).
columns_cache_max_estimated_bytes_to_write_to_cache
Si el tamaño estimado de los datos que una consulta lee de las partesMergeTree supera este valor, se inhiben las escrituras en la caché de columnas durante toda la consulta. La estimación se expresa en bytes sin comprimir, que es lo que se contabiliza en la caché, y se calcula a partir del tamaño de las columnas que lee la consulta (incluidas las columnas de PREWHERE, de mutación y de partes de parche), escalado a los rangos de marcas seleccionados. Todo ese volumen se imputa a la consulta antes de que lea nada. Así se evita que un único escaneo grande desplace datos útiles de la caché y que copie en ella datos que no podrían permanecer allí.
Un valor de 0 indica que se usa la mitad del límite de tamaño que tiene actualmente la caché de columnas. Ese límite coincide con el columns_cache_size configurado mientras el servidor dispone de memoria de sobra, pero la caché se reduce bajo presión de memoria (véase la métrica ColumnsCacheSizeLimit) y el presupuesto predeterminado se reduce con ella. Con el valor predeterminado de columns_cache_size_ratio, la mitad del límite equivale al tamaño del segmento de prueba de la caché, de modo que los datos de una consulta que supera este control pueden almacenarse en caché por completo en una sola pasada.
Este control no se aplica a las lecturas que descartan rangos de marcas durante su ejecución, como ocurre cuando use_indexes_refiner_in_read_pools está habilitado: en ese caso, cuántas de las marcas seleccionadas llega a tocar realmente la lectura solo se decide al dividir cada tarea, por lo que la estimación anterior sería una cota superior que imputaría marcas que la consulta nunca lee. En esas lecturas, la cantidad escrita queda limitada, en cambio, por columns_cache_max_bytes_to_write_to_cache.