Shard Request Cache, Node Query Cache

jade·2026년 1월 28일
post-thumbnail

회사에서 진행하는 온보딩중에 elastic search 교육과정이 있다. 앞으로 공부하며 궁금했던 점들을 직접 찾아보며 익히고, 블로그에 기록해두려고 한다~ 많관부👋🏼

cache

Q. 샤드레벨의 캐시와 노드 레벨의 캐시의 차이

공식 문서

shard request cache

검색 요청이 인덱스/다중 인덱스에서 실행될때, 각 샤드들은 검색을 로컬에서 실행하고 난뒤 결과를 coordinating node로 반환한다. coordinating 노드는 결과를 수집하여 global 결과 집합으로 만들어낸다.

이 과정 속에서 샤드레벨의 요청에 대한 로컬 응답값은 각 샤드의 local cache로 저장된다.
이 local cache는 샤드내 문서의 변화가 생기는 순간(refresh) 무효화 된다. -> 즉, shard reqest cache는 변화가 거의 없는 정적인 데이터의 캐시 환경에서 사용하는 것이 좋다.

특징

  • 샤드 단위로 전체 결과를 캐싱한다.
  • size:0일때 캐시된다.
    • => aggs, suggest를 사용할때
    • 즉, size=0을 사용하면 es에서는 이를 통계 데이터 요청으로 간주하고 복잡한 계산을 하지 않기 위해 그 결과값을 샤드 요청 캐시에 넣어두는 것.
  • hits 결과는 캐싱하지 않지만, hits.total은 캐싱한다.
    • 무거운 실제 문서(hits)는 저장하지 않고, 조건에 맞는 문서가 몇개인지 “숫자 결과(hits.total)”만 저장
  • Date Range 또는 Histogram 질의 시 now를 사용하게 되면 캐싱하지 않는다.
    • 캐시의 핵심은 “동일 질문, 동일 결과”인데, now를 사용하면 이 원칙이 깨지므로..

활성화 및 설정 방법

  • index 단위 캐시 활성화
⠀PUT index_01/_settings 
{
	"index.requests.cache.enable": "true"
}
  • query 단위 캐시 활성화
⠀PUT index_01/_search?request_cache=true 
{
	"size": 0, 
    	"aggs": {
    		"animal": {
        		"terms": {
            		"field": "species"
            	}
        }
    }
}
  • 캐시 사이즈 설정은 elasticsearch.yml에서 설정할 수 있다.
    • indices.requests.cache.size: JVM Heap의 몇 %를 캐시 공간으로 사용할지 설정 (default: 1%)

node query cache

es에서는 빈번하게 요청되는 filter query의 응답속도를 개선하기 위해서 cache를 사용하고, 이때 사용되는 캐시가 node query cache이다.
이는 문서 자체를 캐싱하는 것이 아니라 응답값(true/false)형태만 bitset 형태로 캐싱한다.
때문에 score 계산이 필요한 query, aggsnode query cache가 적용되지 않는다.

  • 현재 쿼리 뿐 아니라 다른 쿼리에서도 재사용되므로 응답 속도를 개선할 수 있다.
  • LRU 정책(가장 오래 참조되지 않은 페이지를 교체)으로 동작
  • filter qeury만 캐싱된다

활성화 및 설정방법

활성화 및 캐시 사이즈 설정은 Elasticsearch Cluster내의 모든 데이터 노드에 적용해야 하며 elasticsearch.yml에서 설정할 수 있다.

  • index.queries.cache.enabled: 활성화 유무 (default: true)
  • indices.queries.cache.size: JVM Heap의 몇 %를 캐시 공간으로 사용할지 설정 (default: 10%)
profile
keep on pushing

0개의 댓글