La caché de páginas en espacio de usuario es un nuevo mecanismo de caché que permite almacenar en caché
datos en la memoria del proceso, en lugar de depender de la caché de páginas del SO.
ClickHouse ya ofrece la caché del sistema de archivos
como una forma de caché sobre almacenamiento remoto de objetos, como Amazon S3, Google
Cloud Storage (GCS) o Azure Blob Storage. La caché de páginas en espacio de usuario está diseñada
para acelerar el acceso a datos remotos cuando la caché normal del SO no resulta suficiente.
Se diferencia de la caché del sistema de archivos en los siguientes aspectos:
| Caché del sistema de archivos | Caché de páginas en espacio de usuario |
|---|
| Escribe datos en el sistema de archivos local | Solo está presente en memoria |
| Ocupa espacio en disco (también configurable en tmpfs) | Es independiente del sistema de archivos |
| Sobrevive a los reinicios del servidor | No sobrevive a los reinicios del servidor |
| No aparece en el uso de memoria del servidor | Aparece en el uso de memoria del servidor |
| Adecuada tanto para disco como para memoria (caché de páginas del SO) | Buena para servidores sin disco |
Opciones de configuración y uso
Para habilitar la caché de páginas en espacio de usuario, primero configúrala en el servidor:
cat config.d/page_cache.yaml
page_cache_max_size: 100G
La caché de páginas en espacio de usuario usará hasta la cantidad de memoria especificada, pero
esta cantidad de memoria no está reservada. La memoria se liberará cuando sea necesaria
para otras necesidades del servidor.
A continuación, habilite su uso a nivel de consulta:
SET use_page_cache_for_disks_without_file_cache=1;
| Ajuste | Descripción | Predeterminado |
|---|
use_page_cache_for_disks_without_file_cache | Usa la caché de páginas en espacio de usuario para discos remotos que no tienen habilitada la caché del sistema de archivos. | 0 |
use_page_cache_with_distributed_cache | Usa la caché de páginas en espacio de usuario cuando se utiliza Distributed Cache. | 0 |
read_from_page_cache_if_exists_otherwise_bypass_cache | Usa la caché de páginas en espacio de usuario en modo pasivo, de forma similar a read_from_filesystem_cache_if_exists_otherwise_bypass_cache. | 0 |
page_cache_inject_eviction | La caché de páginas en espacio de usuario invalidará algunas páginas aleatoriamente de vez en cuando. Pensado para pruebas. | 0 |
page_cache_block_size | Tamaño, en bytes, de los fragmentos de archivo que se almacenarán en la caché de páginas en espacio de usuario. Todas las lecturas que pasen por la caché se redondearán al alza a un múltiplo de este tamaño. | 1048576 |
page_cache_history_window_ms | Retraso antes de que la memoria liberada pueda volver a ser utilizada por la caché de páginas en espacio de usuario. | 1000 |
page_cache_policy | Nombre de la política de la caché de páginas en espacio de usuario. | SLRU |
page_cache_size_ratio | Tamaño de la cola protegida de la caché de páginas en espacio de usuario en relación con el tamaño total de la caché. | 0.5 |
page_cache_min_size | Tamaño mínimo de la caché de páginas en espacio de usuario. | 104857600 |
page_cache_max_size | Tamaño máximo de la caché de páginas en espacio de usuario. Establécelo en 0 para deshabilitar la caché. Si es mayor que page_cache_min_size, el tamaño de la caché se ajustará continuamente dentro de este rango para usar la mayor parte posible de la memoria disponible, manteniendo el uso total de memoria por debajo del límite (max_server_memory_usage[_to_ram_ratio]). | 0 |
page_cache_free_memory_ratio | Fracción del límite de memoria que debe mantenerse libre de la caché de páginas en espacio de usuario. Análogo al ajuste de Linux min_free_kbytes. | 0.15 |
page_cache_lookahead_blocks | Si se produce un fallo de caché en la caché de páginas en espacio de usuario, lee de una vez desde el almacenamiento subyacente hasta esta cantidad de bloques consecutivos, si tampoco están en la caché. Cada bloque tiene un tamaño de page_cache_block_size bytes. | 16 |
page_cache_shards | Distribuye la caché de páginas en espacio de usuario entre esta cantidad de segmentos para reducir la contención de mutex. Experimental; es poco probable que mejore el rendimiento. | 4 |