Кэш страниц в пространстве пользователя
Обзор
Кэш страниц в пространстве пользователя — это новый механизм кэширования, который позволяет хранить данные в памяти процесса, а не полагаться на страничный кэш ОС.
ClickHouse уже предлагает Filesystem cache для кэширования поверх удалённого объектного хранилища, такого как Amazon S3, Google Cloud Storage (GCS) или Azure Blob Storage. Кэш страниц в пространстве пользователя предназначен для ускорения доступа к удалённым данным, когда обычное кэширование ОС работает недостаточно эффективно.
Он отличается от кэша файловой системы следующим:
| Filesystem Cache | Кэш страниц в пространстве пользователя |
|---|---|
| Записывает данные на локальную файловую систему | Находится только в памяти |
| Занимает место на диске (может быть настроен на tmpfs) | Независим от файловой системы |
| Сохраняется при перезапусках сервера | Не сохраняется при перезапусках сервера |
| Не отражается в показателях использования памяти сервера | Отражается в показателях использования памяти сервера |
| Подходит как для хранения на диске, так и в памяти (страничный кэш ОС) | Подходит для бездисковых серверов |
Настройка и использование
Использование
Чтобы включить кэш страниц в пользовательском пространстве, сначала настройте его на сервере:
Кэш страниц в пространстве пользователя будет использовать до указанного объёма памяти, но этот объём памяти не резервируется. Память будет вытесняться, когда она потребуется для других потребностей сервера.
Затем включите использование кэша на уровне запроса:
Настройки
| Setting | Description | Default |
|---|---|---|
use_page_cache_for_disks_without_file_cache | Использовать userspace page cache для удалённых дисков, у которых не включён файловый кэш. | 0 |
use_page_cache_with_distributed_cache | Использовать userspace page cache при использовании distributed cache. | 0 |
read_from_page_cache_if_exists_otherwise_bypass_cache | Использовать userspace page cache в пассивном режиме, аналогично read_from_filesystem_cache_if_exists_otherwise_bypass_cache. | 0 |
page_cache_inject_eviction | Userspace page cache будет иногда случайным образом сбрасывать некоторые страницы. Предназначено для тестирования. | 0 |
page_cache_block_size | Размер файловых блоков для хранения в userspace page cache, в байтах. Все чтения, проходящие через кэш, будут округляться до кратного этому размеру. | 1048576 |
page_cache_history_window_ms | Задержка перед тем, как освобождённая память может быть использована userspace page cache. | 1000 |
page_cache_policy | Имя политики userspace page cache. | SLRU |
page_cache_size_ratio | Размер защищённой очереди в userspace page cache по отношению к общему размеру кэша. | 0.5 |
page_cache_min_size | Минимальный размер userspace page cache. | 104857600 |
page_cache_max_size | Максимальный размер userspace page cache. Установите 0, чтобы отключить кэш. Если значение больше page_cache_min_size, размер кэша будет постоянно подстраиваться в этих пределах, чтобы использовать большую часть доступной памяти, удерживая общее использование памяти ниже лимита (max_server_memory_usage[_to_ram_ratio]). | 0 |
page_cache_free_memory_ratio | Доля лимита памяти, которую следует держать свободной от userspace page cache. Аналогично параметру Linux min_free_kbytes. | 0.15 |
page_cache_lookahead_blocks | При промахе в userspace page cache читать за один раз до указанного количества последовательных блоков из нижележащего хранилища, если их также нет в кэше. Размер каждого блока — page_cache_block_size байт. | 16 |
page_cache_shards | Разбивать userspace page cache на указанное количество шардов для снижения конкуренции за мьютексы. Экспериментальная настройка, маловероятно, что улучшит производительность. | 4 |