퇴거
카우치베이스 서버에서 글로벌 보조 인덱스가 사용하는 플라즈마 스토리지 서브시스템은 메모리 할당량으로 사용할 특정 값으로 초기화됩니다. 스토리지 서브시스템은 메모리 사용량을 지속적으로 추적하고 필수 메모리가 아닌 할당된 메모리를 해제하여 메모리 할당량을 준수합니다. 메모리를 확보하는 것을 종종 퇴거라고 합니다. 이 문서에서는 사용되는 퇴거 알고리즘과 퇴거 프로세스를 효과적으로 제어하기 위해 조정할 수 있는 구성 매개변수에 대해 설명합니다.
스토리지 하위 시스템은 관리하는 데이터를 메모리의 가변 크기 페이지로 구성합니다. 메모리 사용량을 추적하여 메모리 사용량이 할당된 메모리 할당량을 초과하면 페이지를 디스크로 내보내기 시작합니다. 충분한 수의 페이지를 퇴거한 후 사용 메모리가 할당량 이하로 떨어지면 퇴거가 중지됩니다. 사용된 메모리가 메모리 할당량을 초과할 때 퇴거를 트리거하는 이 프로세스를 "버스트 퇴거". 버스트 퇴거는 사용된 메모리가 할당량 이하가 될 때까지 돌연변이 및 스캔을 중지합니다. 이는 시스템의 CPU 사용량, 지연 시간 및 처리량에 부정적인 영향을 미칩니다.
또 다른 퇴거 유형인 버스트 퇴거로 인한 지연 시간 및 처리량에 대한 부정적인 영향을 완화하기 위해 "정기 퇴거'도 함께 실행됩니다. 주기적인 퇴거는 스윕 간격이라고 하는 일정한 간격으로 트리거되어 메모리에서 페이지를 스캔하고 활발하게 사용되는 페이지를 추적합니다. 현재와 이전 스윕 간격 사이의 변경 또는 스캔에서 활발하게 사용된 페이지의 하위 집합을 작업 집합이라고 합니다. 작업 세트에 없는 페이지를 제거하면 메모리 사용량이 급증하는 경우에 대비해 여유 공간이 생기고 필요한 페이지도 메모리에 유지됩니다. 사용된 메모리가 할당량을 초과하거나 미리 설정된 최소 임계값을 초과하면 작업 세트에 없는 페이지는 스왑퍼 스레드에 의해 퇴출됩니다. 또한 스왑퍼 스레드는 훨씬 더 짧은 간격으로 정기적으로 실행됩니다.
노드의 모든 플라즈마 인스턴스에 적용되는 메모리 할당량은 GSI를 통해 설정됩니다. 플라즈마는 필수적이지 않은 할당을 해제하려고 시도하여 모든 인스턴스가 이 메모리 할당량을 준수하도록 합니다. 사용 메모리가 할당량을 초과하면 작업 세트에 없는 페이지가 발견되고 스왑 스레드가 사용 메모리를 줄이기 위해 퇴거합니다. 이 버스트 퇴거는 사용된 메모리가 할당량 미만이 되면 중지됩니다. 버스트 퇴거가 다시 실행되면 퇴거할 대상을 다시 찾아야 합니다. 효율적인 퇴거를 위해 스왑 스레드는 시계 알고리즘을 사용하여 퇴거할 페이지를 표시하고 스윕합니다. 이 알고리즘은 주기적으로 실행되어 퇴거할 피해자 페이지를 표시하므로 버스트 퇴거가 퇴거할 피해자 페이지를 쉽게 찾을 수 있습니다.
구성 매개변수
다음 구성 매개변수는 메모리 사용량을 할당된 할당량 이하로 유지하기 위해 퇴거 프로세스의 효율성을 제어하는 데 사용됩니다.
evictSweepInterval: 작업 집합을 구축하기 위해 인덱스 페이지를 주기적으로 스윕하는 시간 간격(초)입니다. 기본적으로 스윕은 600초마다 실행됩니다. 더 많은 메모리를 사용하려는 경우 고객이 이 간격을 늘릴 수 있습니다. 아래 명령은 이 간격을 1200초로 늘리는 예제입니다.
1 2 |
$ curl -u <사용자 이름>:<비밀번호> <주소>:9102/설정 -d '{"indexer.plasma.mainIndex.evictSweepInterval":1200}' $ curl -u <사용자 이름>:<비밀번호> <주소>:9102/설정 -d '{"indexer.plasma.backIndex.evictSweepInterval":1200}' |
통계
다음 스토리지 통계는 스토리지 메모리 사용의 효율성을 분석하는 데 유용합니다. 이러한 통계를 기반으로 위의 퇴거 구성 매개변수를 조정하여 효과적인 메모리 사용량 설정을 얻을 수 있습니다.
캐시_히트_비율: 지난 5초 동안의 활동을 기준으로 페이지를 읽으려는 총 시도 횟수 대비 캐시 히트의 비율입니다. 캐시 적중률이 높을수록 디스크에 저장하는 데 비용이 많이 들기 때문에 좋습니다.
캐시_히트_비율: 통계 캐시_히트_비율과 유사하지만 스캔에만 해당합니다.
거주자 비율: 이 통계는 이미 메모리에 있는 페이지 레코드의 비율입니다. 이는 인덱스의 작업 세트에 따라 달라집니다. 이 값이 작고 캐시 히트 비율이 높으면 작업 세트가 작다는 뜻입니다.
안녕하세요 Srinath님, 플라즈마 기반 GSI를 이해하는 데 매우 좋은 기사입니다. 질문이 하나 있습니다. 스윕 간격이 600초인가요 아니면 300초인가요? config.go에서 300초로 설정되어 있는 것을 볼 수 있습니다.
"indexer.plasma.mainIndex.evictSweepInterval": ConfigValue{
300,
"인덱스의 모든 페이지를 스윕하는 시간 간격(초)",
300,
거짓, // 변경 가능
false, // 대소문자 구분 안 함
},