유저스페이스 페이지 캐시

유저스페이스 페이지 캐시 (Userspace page cache)

유저스페이스 페이지 캐시는 OS 페이지 캐시에 의존하는 대신 프로세스 내 메모리(in-process memory)에 데이터를 캐싱하는 새 캐싱 메커니즘입니다. 정상적인 OS 캐싱이 충분하지 않을 때 원격 데이터에 대한 접근을 빠르게 해 줍니다.

출처: 문서

본문

개요 (Overview)

유저스페이스 페이지 캐시는 OS 페이지 캐시에 의존하는 대신 프로세스 내 메모리에 데이터를 캐싱할 수 있게 하는 새 캐싱 메커니즘입니다.

ClickHouse는 이미 Amazon S3, Google Cloud Storage(GCS), Azure Blob Storage 같은 원격 객체 스토리지 위에 캐싱하는 방법으로 Filesystem cache를 제공합니다. 유저스페이스 페이지 캐시는 일반 OS 캐싱이 충분히 좋지 않을 때 원격 데이터에 대한 접근을 빠르게 하도록 설계되었습니다.

그것은 파일시스템 캐시와 다음 방식으로 다릅니다:

Filesystem Cache Userspace page cache
데이터를 로컬 파일시스템에 씀 메모리에만 존재
디스크 공간을 차지함(tmpfs에서도 구성 가능) 파일시스템과 무관
서버 재시작을 견딤 서버 재시작을 견디지 못함
서버의 메모리 사용에 나타나지 않음 서버의 메모리 사용에 나타남
온디스크와 인메모리(OS 페이지 캐시) 모두에 적합 디스크 없는 서버에 좋음

구성 설정과 사용법

사용법

유저스페이스 페이지 캐시를 활성화하려면 먼저 서버에서 구성하세요:

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

유저스페이스 페이지 캐시는 지정된 양의 메모리까지 사용하지만, 이 메모리 양은 예약되지 않습니다. 다른 서버 필요에 의해 필요해지면 메모리가 축출(evict)됩니다.

다음으로 쿼리 수준에서 사용을 활성화하세요:

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 분산 캐시가 사용될 때 유저스페이스 페이지 캐시 사용. 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 유저스페이스 페이지 캐시의 보호된(protected) 큐 크기의 캐시 총 크기에 대한 비율. 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

관련 콘텐츠

더 알아보기 (Learn more)