OpenSearch의 근간인 Apache Lucene은 불변의 Segment 단위로 데이터를 저장한다.
refresh_interval 주기 (기본 1초)가 되면, 버퍼에 있던 내용이 새로운 Segment라는 단위로 만들어져 운영체제의 파일시스템 캐시로 넘어간다.fsync된 상태는 아니다. (성능을 위해 메모리 캐시에만 존재)fsync)되고, Translog가 비워진다.요약 : Refresh는 메모리 버퍼 -> 파일시스템 캐시(Segment 생성) 과정이며, 이 주기가 바로
refresh_interval이다.
왜 들어오자마자 바로 Segment로 만들지 않느냐? 라고 물을 수 있다.
그래서 "기본 1초"라는 버퍼링 시간을 두어, 어느 정도 모아서 Segment를 만들게끔 설계된 것이다.
이를 Near Real Time(NRT)라고 부른다.
개발자로서 이 값을 언제, 어떻게 조절해야 할지 아는 것이 중요하다.
refresh_interval: -1초기 데이터를 마이그레이션하거나 수백만 건을 한 번에 넣을 떄는 Refresh를 끄는 것이 정석이다.
# 색인 전: Refresh 끄기
PUT /my-index/_settings
{ "index": { "refresh_interval": "-1" } }
# ... 대량 Bulk Insert 수행 ...
# 색인 후: Refresh 켜기 (복구)
PUT /my-index/_settings
{ "index": { "refresh_interval": "1s" } }
실시간성이 크게 중요하지 않은 로그 데이터나 상품 정보라면 주기를 늘리자.
refresh_interval을 변경해도 괜찮은가?"아주 권장되는 표준 운영 패턴이다"
OpenSearch의 모든 인덱스 설정(_settings)은 동적으로 변경 가능하도록 설계되었다.
클러스터 재시작은 커녕 인덱스를 닫을 필요조차 없다.
Rejection 에러가 발생한다면?참고