メインコンテンツへスキップ

概要

ユーザー空間ページキャッシュは、OS のページキャッシュに依存せず、プロセス内メモリにデータをキャッシュできる新しいキャッシュ機構です。
ClickHouse ではすでに、Amazon S3、Google Cloud ストレージ (GCS) 、Azure Blob Storage などのリモートオブジェクトストレージに対するキャッシュ手段として、ファイルシステムキャッシュ を提供しています。 ユーザー空間ページキャッシュは、通常の OS キャッシュでは十分な効果が得られない場合に、リモートデータへのアクセスを高速化することを目的として設計されています。 ファイルシステムキャッシュとの違いは次のとおりです。
Filesystem CacheUserspace page cache
データをローカルのファイルシステムに書き込むメモリ内にのみ存在する
ディスク容量を消費する (tmpfs に設定することも可能)ファイルシステムに依存しない
server の再起動後も保持されるserver の再起動後は保持されない
server の memory usage には現れないserver の memory usage に現れる
ディスク上とメモリ内 (OS ページキャッシュ) の両方に適するディスクレス server に適している

設定項目と使用方法

使用方法

ユーザー空間ページキャッシュを有効にするには、まずサーバー側で設定します。
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_cacheread_from_filesystem_cache_if_exists_otherwise_bypass_cache と同様に、パッシブモードでユーザー空間ページキャッシュを使用します。0
page_cache_inject_evictionユーザー空間ページキャッシュが、ときどき一部のページをランダムに無効化します。テスト用です。0
page_cache_block_sizeユーザー空間ページキャッシュに格納するファイル chunk のサイズ (バイト単位) です。キャッシュを経由するすべての読み取りは、このサイズの倍数に切り上げられます。1048576
page_cache_history_window_ms解放されたメモリをユーザー空間ページキャッシュで再利用できるようになるまでの遅延です。1000
page_cache_policyユーザー空間ページキャッシュのポリシー名です。SLRU
page_cache_size_ratioユーザー空間ページキャッシュにおける protected queue のサイズを、cache 全体のサイズに対する比率で指定します。0.5
page_cache_min_sizeユーザー空間ページキャッシュの最小サイズです。104857600
page_cache_max_sizeユーザー空間ページキャッシュの最大サイズです。cache を無効にするには 0 を設定します。page_cache_min_size より大きい場合、総メモリ使用量が制限 (max_server_memory_usage[_to_ram_ratio]) を下回るようにしつつ、使用可能なメモリの大部分を使うため、この範囲内で cache サイズが継続的に調整されます。0
page_cache_free_memory_ratioユーザー空間ページキャッシュで使用せずに確保しておく、メモリ制限に対する割合です。Linux の min_free_kbytes 設定に相当します。0.15
page_cache_lookahead_blocksユーザー空間ページキャッシュでミスした場合、それらも cache に存在しなければ、基盤ストレージから連続する最大この数の block を一度に読み取ります。各 block は page_cache_block_size バイトです。16
page_cache_shardsmutex の競合を減らすために、ユーザー空間ページキャッシュをこの数の分片にストライプ化します。Experimental であり、パフォーマンス改善につながる可能性は高くありません。4
最終更新日 2026年6月10日