

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 索引故障診斷
<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](docdb-migration.md)《Amazon DocumentDB 文件》中的 和部落格：[使用離線方法從 MongoDB 遷移至 Amazon DocumentDB](https://aws.amazon.com/blogs/database/migrate-from-mongodb-to-amazon-documentdb-using-the-offline-method/)。

在現有叢集上建立索引時，如果索引建置耗時超過預期或失敗，建議您擴展執行個體以建立索引，然後在建立索引之後縮減。Amazon DocumentDB 可讓您使用 AWS 管理主控台 或 ，在幾分鐘內快速擴展執行個體大小 AWS CLI。如需詳細資訊，請參閱[管理執行個體類別](db-instance-classes.md)。透過每秒執行個體定價，您只需支付使用的資源，以秒計費。

## 背景索引建置延遲問題和失敗
<a name="troubleshooting.background-index-build-fails"></a>

Amazon DocumentDB 中的背景索引建置不會啟動，除非在索引建置啟動之前啟動的主要執行個體上的所有查詢都已完成執行。如果有長時間執行的查詢，背景索引建置會封鎖，直到查詢完成，因此可能需要比預期更長的時間才能完成。即使集合是空的，也是如此。

前景索引建置不會顯示相同的封鎖行為。相反地，前景索引組建會對集合進行獨佔鎖定，直到索引組建完成為止。因此，為了在空集合上建立索引，並避免封鎖任何長時間執行的查詢，我們建議您使用前景索引組建。

**注意**  
Amazon DocumentDB 僅允許在任何指定時間在集合上建立一個背景索引組建。如果在背景索引建置期間 DDL (資料定義語言) 操作 (如 `createIndex()` 或 `dropIndex()`) 發生於同一個集合，則背景索引建置會失敗。

## 資料庫索引膨脹
<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)。