

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

# 인덱스 문제 해결
<a name="troubleshooting.index-creation"></a>

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

**Topics**
+ [인덱스 빌드 실패](#troubleshooting.index-build-fails)
+ [백그라운드 인덱스 빌드 지연 문제 및 실패](#troubleshooting.background-index-build-fails)
+ [데이터베이스 인덱스 팽창](#troubleshooting-database-bloat)

## 인덱스 빌드 실패
<a name="troubleshooting.index-build-fails"></a>

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

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

## 백그라운드 인덱스 빌드 지연 문제 및 실패
<a name="troubleshooting.background-index-build-fails"></a>

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

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

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

## 데이터베이스 인덱스 팽창
<a name="troubleshooting-database-bloat"></a>

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

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

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

```
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`를 사용한 인덱스 유지 관리](managing-indexes.md#reIndex)을(를) 참조하세요.