跳到主要内容
跳到主要内容

用户态页缓存

概览

用户态页缓存是一种新的缓存机制,它允许将数据缓存到进程内存中,而不是依赖操作系统的页缓存。

ClickHouse 已经提供了 Filesystem cache, 可用于在 Amazon S3、Google Cloud Storage (GCS) 或 Azure Blob Storage 等远程对象存储之上进行缓存。用户态页缓存旨在当常规操作系统缓存效果不佳时,加速对远程数据的访问。

它与文件系统缓存的不同之处在于:

Filesystem cache用户态页缓存
将数据写入本地文件系统仅存在于内存中
占用磁盘空间(也可在 tmpfs 上配置)独立于文件系统
在服务器重启后仍然存在在服务器重启后不会保留
不会体现在服务器的内存使用中会体现在服务器的内存使用中
适用于基于磁盘和基于内存(操作系统页缓存)的场景适用于无磁盘服务器

配置与使用

用法

要启用用户态页缓存,首先需要在服务器上完成相应配置:

cat config.d/page_cache.yaml
page_cache_max_size: 100G
注意

用户态页缓存最多会使用指定数量的内存,但 这部分内存并不会被预留。当服务器中其他组件需要内存时, 这些内存会被回收。

接下来,在查询级别启用它:

SET use_page_cache_for_disks_without_file_cache=1;

设置

SettingDescriptionDefault
use_page_cache_for_disks_without_file_cache对未启用文件系统缓存的远程磁盘使用用户态页缓存。0
use_page_cache_with_distributed_cache在使用分布式缓存时使用用户态页缓存。0
read_from_page_cache_if_exists_otherwise_bypass_cache以被动模式使用用户态页缓存,行为类似于 read_from_filesystem_cache_if_exists_otherwise_bypass_cache0
page_cache_inject_eviction用户态页缓存会随机使部分页失效。用于测试目的。0
page_cache_block_size在用户态页缓存中存储的文件块大小(字节)。所有经过缓存的读取都会向上取整为该大小的倍数。1048576
page_cache_history_window_ms释放的内存在可被用户态页缓存重新使用前的延迟时间。1000
page_cache_policy用户态页缓存策略名称。SLRU
page_cache_size_ratio用户态页缓存中受保护队列相对于缓存总大小的比例。0.5
page_cache_min_size用户态页缓存的最小大小。104857600
page_cache_max_size用户态页缓存的最大大小。设置为 0 时禁用缓存。如果该值大于 page_cache_min_size,则缓存大小会在此区间内持续调整,以在保持总内存使用低于限制(max_server_memory_usage[_to_ram_ratio])的前提下尽可能利用可用内存。0
page_cache_free_memory_ratio在用户态页缓存中需要保持空闲的内存限额比例。类似于 Linux 的 min_free_kbytes 设置。0.15
page_cache_lookahead_blocks当用户态页缓存未命中时,如果后续连续块也不在缓存中,则一次性从底层存储中预读最多这么多连续块。每个块的大小为 page_cache_block_size 字节。16
page_cache_shards将用户态页缓存划分为相应数量的分片(shard),以减少互斥锁竞争。为实验性功能,不太可能提升性能。4