인덱스 문제 해결 - Amazon DocumentDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

인덱스 문제 해결

다음 주제에서는 인덱스 또는 배경 인덱스 빌드에 실패한 경우 취해야 할 조치를 설명합니다.

인덱스 빌드 실패

Amazon DocumentDB는 인덱스 생성 프로세스의 일부로써 인스턴스의 로컬 스토리지를 활용합니다. FreeLocalStorage CloudWatch 지표(CloudWatch -> Metrics -> DocDB -> Instance Metrics)를 사용하여 이 디스크 사용량을 모니터링할 수 있습니다. 인덱스 빌드에 로컬 디스크 전체가 사용되고 실패할 경우 오류가 표시됩니다. 데이터를 Amazon DocumentDB로 마이그레이션할 경우 먼저 인덱스를 생성한 다음 데이터를 삽입하는 것이 좋습니다. 마이그레이션 전략 및 인덱스 생성에 대한 자세한 내용은 Amazon DocumentDB 설명서의 Amazon DocumentDB로 마이그레이션 섹션과 오프라인 방법을 사용한 MongoDB에서 Amazon DocumentDB로의 마이그레이션 블로그를 참조하십시오.

기존 클러스터에서 인덱스를 생성할 때 인덱스 빌드에 예상보다 시간이 오래 걸리거나 실패하는 경우, 인스턴스 크기를 늘려(규모 조정) 인덱스를 생성한 다음 다시 축소하는 것이 좋습니다. Amazon DocumentDB를 사용하면 AWS Management Console 또는를 사용하여 인스턴스 크기를 몇 분 만에 빠르게 조정할 수 있습니다 AWS CLI. 자세한 내용은 인스턴스 클래스 관리 단원을 참조하십시오. 초당 요금이 청구되는 경우, 초 단위로 계산하여 사용한 리소스에 대해서만 지불하면 됩니다.

백그라운드 인덱스 빌드 지연 문제 및 실패

Amazon DocumentDB의 백그라운드 인덱스 빌드는 인덱스 빌드가 시작되기 전에 시작된 기본 인스턴스의 모든 쿼리가 실행될 때까지 시작되지 않습니다. 쿼리가 오래 실행되는 경우 쿼리가 완료될 때까지 백그라운드 인덱스 빌드가 차단되므로 완료하는 데 예상보다 시간이 오래 걸릴 수 있습니다. 컬렉션이 비어 있는 경우에도 마찬가지입니다.

포그라운드 인덱스 빌드는 동일한 차단 동작을 나타내지 않습니다. 대신 포그라운드 인덱스 빌드는 인덱스 빌드가 완료될 때까지 컬렉션을 독점적으로 잠급니다. 따라서 빈 컬렉션에 인덱스를 만들고 장기 실행 쿼리가 차단되지 않도록 하려면 포그라운드 인덱스 빌드를 사용하는 것이 좋습니다.

참고

Amazon DocumentDB는 특정 시간에 모음에서 발생하는 배경 인덱스 빌드를 하나만 허용합니다. 배경 인덱스 빌드 중에 동일한 컬렉션에 createIndex() 또는 dropIndex()와 같은 DDL(Data Definition Language) 연산이 발생하면 배경 인덱스 빌드가 실패합니다.

데이터베이스 인덱스 팽창

Amazon DocumentDB는 다중 버전 동시성 제어(MVCC)를 사용하여 동시 트랜잭션을 관리합니다. 문서가 삭제되거나 업데이트되면 이전 버전은 컬렉션 및 인덱스에 "사망" 버전으로 유지됩니다. 가비지 수집 프로세스는 향후 작업을 위해 이러한 데드 버전에서 공간을 자동으로 회수합니다.

인덱스 팽창은 지연되거나 더 이상 사용되지 않는 인덱스 항목이 누적되거나 페이지 내에 조각화되어 컬렉션의 인덱스가 커질 때 발생합니다. 보고된 백분율은 향후 인덱스 항목에서 사용할 수 있는 인덱스 공간의 양을 나타냅니다. 이 팽창은 버퍼 캐시와 스토리지 모두에서 공간을 소비합니다. 팽창을 제거하려면 인덱스를 다시 빌드해야 합니다.

예시

다음 명령을 실행하여 인덱스의 미사용 스토리지를 확인합니다.

db.coll.aggregate({$indexStats:{}});

결과는 다음과 비슷합니다.

{ "name" : "_id_", "key" : { "_id" : 1 }, "host" : "devbox-test.localhost.a2z.com:27317", "size" : NumberLong(827392), "accesses" : { "ops" : NumberLong(40000), "docsRead" : NumberLong(46049), "since" : ISODate("2025-04-03T21:44:51.251Z") }, "cacheStats" : { "blksRead" : NumberLong(264), "blksHit" : NumberLong(140190), "hitRatio" : 99.8121 }, "unusedStorageSize" : { "unusedSizeBytes" : 409600, "unusedSizePercent" : 49.51 } }

전체 컬렉션을 스캔해야 하는 reIndex 명령을 사용하여 가동 중지 없이 인덱스를 다시 빌드할 수 있습니다. 를 사용한 인덱스 유지 관리 reIndex을(를) 참조하세요.