유저스페이스 페이지 캐시
유저스페이스 페이지 캐시 (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 |