用户空间页面缓存
概述
用户空间页面缓存是一种新的缓存机制,它允许在进程内内存中缓存数据,而不是依赖于操作系统页面缓存。
ClickHouse 已经提供了 文件系统缓存 作为在远程对象存储(如 Amazon S3、Google Cloud Storage (GCS) 或 Azure Blob Storage)之上进行缓存的一种方式。用户空间页面缓存旨在加速访问远程数据,当正常的操作系统缓存效果不佳时。
它与文件系统缓存的不同之处在于:
| 文件系统缓存 | 用户空间页面缓存 |
|---|---|
| 将数据写入本地文件系统 | 仅存在于内存中 |
| 占用磁盘空间(也可配置为 tmpfs) | 独立于文件系统 |
| 在服务器重启后仍然存在 | 在服务器重启后不会存在 |
| 不会显示在服务器的内存使用情况中 | 显示在服务器的内存使用情况中 |
| 适用于磁盘和内存(操作系统页面缓存) | 适合无盘服务器 |
配置设置和用法
用法
要启用用户空间页面缓存,首先在服务器上进行配置:
注意
用户空间页面缓存将使用指定的内存量,但此内存量不会被保留。当服务器需要时,内存将被回收。
接下来,在查询级别启用其使用:
设置
| 设置 | 描述 | 默认值 |
|---|---|---|
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_cache。 | 0 |
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 | 将用户空间页面缓存划分为这么多分片,以减少互斥锁争用。实验性,不太可能提高性能。 | 4 |