Amazon OpenSearch Service 클러스터에서 삭제된 문서 지표가 높은 이유가 무엇입니까?

3분 분량
0

Amazon OpenSearch Service 클러스터에서 문서를 삭제했지만 디스크 공간이 회수되지 않습니다.

간략한 설명

OpenSearch Service에서 DeletedDocuments 지표는 삭제 표시된 문서 수를 나타내는 카운터입니다. DeletedDocuments 지표는 삭제 요청이 처리된 후 증가하고 인덱스 세그먼트가 클러스터에 병합된 후 감소합니다.

OpenSearch Service는 병합 정책 설정을 사용하여 merge API 작업을 자동으로 실행합니다. 병합하는 동안 더 작은 세그먼트는 인덱스 크기를 유지하기 위해 더 큰 세그먼트로 병합됩니다. 삭제 표시된 문서도 완전 삭제되어 추가 디스크 공간을 확보합니다.

개별 문서를 삭제하는 대신 인덱스를 삭제하여 디스크 공간을 즉시 회수할 수 있습니다. 또는 only_expunge_delete 파라미터와 함께 강제 병합 API를 사용하여 인덱스 내에서 삭제된 문서를 지울 수도 있습니다.

인덱스 메타데이터를 유지하면서 클러스터에서 디스크 공간을 회수하려면 다음과 같은 방법을 고려하세요.

해결 방법

삭제된 문서 수 확인

OpenSearch Service 클러스터에서 삭제된 문서 수를 확인하려면 클러스터 통계 API를 실행합니다. cluster stats API 호출로 얻은 값은 클러스터의 DeletedDocuments 지표에 나타납니다. 클러스터에 있는 모든 인덱스의 삭제된 문서 합계가 결과로 반환됩니다. 이 카운트가 응답 출력의 ‘docs.delete’ 필드를 사용하는지 확인할 수 있습니다.

예를 들어 클러스터에 인덱스 3개(index1, index2, index3)가 있으면 index stats API 호출을 실행합니다.

GET index1/_stats
...
"docs": {
     "count": 100,
     "deleted": 1
}
... 
GET index2/_stats
...
"docs": {
     "count": 100,
     "deleted": 5
}
...
GET index3/_stats
...
"docs": {
     "count": 100,
     "deleted": 8
}
...

그런 다음, cluster stats API 호출로 클러스터에 있는 모든 인덱스의 ‘docs.deleted’ 필드를 추가합니다.

...
"docs": {
     "count": 1227677521,
     "deleted": 14
}
...

index2를 삭제하면 cluster stats API 호출에서 index1과 index3에 대한 값만 계산합니다.

GET _cluster/stats
...
"docs": {
     "count": 1227677521,
     "deleted": 9
}

이제 세그먼트가 병합되고 index2의 인덱스 메타데이터가 삭제됩니다. 그 결과, DeletedDocuments 지표 값이 9로 감소합니다.

문서 용량 확인

문서 용량과 인덱스 개수를 확인하려면 cat indices API를 사용하세요. 새 문서의 용량이 OpenSearch Service 클러스터의 기존 문서와 동일한지 확인하세요. 문서 용량이 동일해야 삭제된 문서가 추가로 디스크 공간을 차지하지 않습니다.

삭제된 문서 완전 삭제

디스크 공간을 수동으로 회수하려면 only_expunge_deletes 파라미터를 ‘true’로 설정해 강제 병합 API를 실행합니다.

POST /<index-name>/_forcemerge?only_expunge_deletes=true

참고: 이 작업은 삭제 표시된 문서가 포함된 세그먼트만 영구 삭제합니다.

강제 병합 이후에는 사용 중인 디스크 공간이 감소하게 됩니다. 새 세그먼트가 생성되면 이전 세그먼트가 제거되고 새 세그먼트에는 더 이상 삭제 표시된 문서가 포함되지 않습니다. 삭제된 문서에 대한 자세한 내용은 Elasticsearch 웹사이트에서 Lucene의 삭제된 문서 처리를 참조하세요.

그러나 강제 병합 작업을 수행할 때는 다음 사항에 주의해야 합니다.

  • 여유 스토리지 공간이 충분할 경우에만 클러스터에 강제 병합을 실행하세요. 이 작업은 리소스를 많이 사용합니다.
  • 강제 병합 작업은 I/O를 많이 사용하는 프로세스를 트리거하며, 병합이 완료될 때까지 클러스터에 대한 모든 새로운 요청을 차단합니다.
  • 강제 병합 작업은 추가적인 데이터를 인덱스에 기록하지 않을 때 읽기 전용 인덱스에 대해서만 호출하세요. 강제 병합을 읽기/쓰기 인덱스에 대해 호출하면 매우 큰 세그먼트가 생성될 수 있습니다(세그먼트 1개당 5GB 이상). 이 경우 자동 병합 정책은 해당 세그먼트가 대부분 삭제된 문서로 구성될 때까지 이후 병합에서 이러한 매우 큰 세그먼트를 고려하지 않습니다. 따라서 디스크 사용량은 증가하고 검색 성능이 저하됩니다.

또한 delete by query API 또는 delete API를 사용하여 클러스터의 문서를 수동으로 삭제할 수 있습니다.

디스크 공간 즉시 회수

디스크 공간을 즉시 회수하려면 인덱스 삭제 API를 사용하세요. 인덱스를 삭제해도 삭제 마커가 생성되지 않습니다. 대신 인덱스 삭제 API는 인덱스 메타데이터를 지우고 디스크 공간을 즉시 회수합니다. 회수된 디스크 공간은 DeletedDocuments 지표에 반영됩니다.

참고: 사용하지 않는 오래된 인덱스는 삭제하는 것이 좋습니다. 활성 인덱스를 삭제하는 경우 인덱스 자동 생성을 차단하세요. 자세한 내용은 Elasticsearch 웹 사이트에서 데이터 스트림 및 인덱스 자동 생성을 참조하세요.


관련 정보

Amazon OpenSearch Service 도메인의 스토리지 공간 부족 문제를 해결하려면 어떻게 해야 합니까?

Amazon CloudWatch를 사용하여 OpenSearch 클러스터 지표 모니터링

AWS 공식
AWS 공식업데이트됨 일 년 전