[AWS] DocumentDB: reindex를 통한 인덱스 GC

[원본 링크]

DocumentDB는 PostgreSQL처럼 MVCC 기반으로 데이터를 관리한다.
수정이나 삭제가 발생하더라도 값을 대체하지 않고 새로운 버전의 추가를 통해서만 처리한다는 것이다.

이는 단순히 값 영역에만 그치는 것이 아니라 인덱스에도 동일하다. 그래서 변경이 과도하게 누적된다면 인덱스에 dead 공간이 과도하게 쌓일 수 있다.
이 dead 영역은 추후의 재사용을 위해서 예약되기 때문에 일반적인 사용 패턴에서는 큰 문제가 없는데, 극단적인 수축이 발생하거나 해서 이게 너무 크다면 성능이 저하되고 스토리지 낭비가 심해진다.

이럴 때는 reindex 명령을 통해서 인덱스 GC를 돌려주는 것도 하나의 방법이다.

db.runCommand({
    reIndex: "컬렉션명", index: "인덱스명",
})

이 명령은 인덱스를 다시 만들어주는데, 그 과정에서 dead 영역들을 해당 컬렉션의 unused 영역으로 반환해준다. (스토리지를 완전히 반환하는 것까지는 아님)

그리고 컬렉션에 Lock을 걸거나 하지는 않는다. 운영중에 사용해도 무방하다.



https://docs.aws.amazon.com/ko_kr/documentdb/latest/developerguide/managing-indexes.html#reIndex