Кэш страниц в пространстве пользователя — это новый механизм кэширования, который позволяет хранить
данные в памяти процесса, не полагаясь на кэш страниц ОС.
ClickHouse уже предлагает Файловый кэш
как способ кэширования поверх удалённого объектного хранилища, такого как Amazon S3, Google
Cloud Storage (GCS) или Azure Blob Storage. Кэш страниц в пространстве пользователя предназначен
для ускорения доступа к удалённым данным в случаях, когда обычное кэширование ОС работает
недостаточно эффективно.
Он отличается от файлового кэша следующим образом:
| Файловый кэш | Кэш страниц в пространстве пользователя |
|---|
| Записывает данные в локальную файловую систему | Существует только в памяти |
| Занимает место на диске (также может быть настроен на tmpfs) | Не зависит от файловой системы |
| Сохраняется после перезапуска сервера | Не сохраняется после перезапуска сервера |
| Не учитывается в использовании памяти сервера | Учитывается в использовании памяти сервера |
| Подходит как для хранения на диске, так и в памяти (кэш страниц ОС) | Хорошо подходит для серверов без дисков |
Параметры конфигурации и использование
Чтобы включить кэш страниц в пространстве пользователя, сначала настройте его на сервере:
cat config.d/page_cache.yaml
page_cache_max_size: 100G
Кэш страниц в пространстве пользователя может использовать до указанного объёма памяти, однако
этот объём не резервируется. При необходимости эта память будет освобождаться
для других нужд сервера.
Далее включите его использование на уровне запроса:
SET use_page_cache_for_disks_without_file_cache=1;
| Параметр | Описание | По умолчанию |
|---|
use_page_cache_for_disks_without_file_cache | Использовать кэш страниц в пространстве пользователя для удалённых дисков, у которых не включен файловый кэш. | 0 |
use_page_cache_with_distributed_cache | Использовать кэш страниц в пространстве пользователя при использовании 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 | Разбить кэш страниц в пространстве пользователя на такое количество сегментов, чтобы уменьшить конкуренцию за mutex. Экспериментальный параметр, вряд ли улучшит производительность. | 4 |
Последнее изменение 10 июня 2026 г.