View a markdown version of this page

低用量和備援索引 - Amazon DocumentDB

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

低用量和備援索引

概觀

索引可改善工作負載的整體查詢效能,但會帶來成本。每個索引都會耗用儲存體和 I/O 資源,而寫入操作需要更新集合上的所有索引。如果您的資料庫包含未使用、未充分利用或備援的索引,會導致叢集額外負荷,進而降低效能。多個不必要的索引會建立反模式,造成效能問題、增加儲存成本和更高的操作開銷。

次佳索引案例

  • 未使用的索引:為一次性查詢建立的索引,或在目前查詢模式不再存取的先前產品反覆運算中建立的索引。若要識別集合上未使用的索引,您可以使用 indexStats。如需詳細資訊,請參閱如何分析索引用量並識別未使用的索引?

  • 備援索引:涵蓋重疊索引鍵模式或相同查詢模式的多個索引。範例:當複合索引同時涵蓋屬性 A 和 B 時,屬性 A 上的單一索引鍵會變成備援,因為複合索引可以單獨處理屬性 A 上的查詢。

  • 過度索引:建立索引「以防發生」而不分析實際的查詢模式或效能需求。

  • 低基數索引:在具有幾個不同值 (例如,布林值欄位、狀態旗標) 的欄位上索引,可提供最小的查詢最佳化優勢。

對叢集效能的影響

  • 儲存和 IO:每個索引都會耗用儲存空間和 IO 資源,這有助於整體成本。如果索引未使用或備援,則表示叢集上不必要的成本。

  • 降低的寫入效能:插入、更新和刪除操作必須維護索引,建立消耗資源的額外負荷。未使用的或備援索引會為這些操作增加不必要的額外負荷。

  • 記憶體和 CPU 壓力:索引會競爭緩衝集區記憶體,如果工作集不適合執行個體記憶體,導致 BufferCacheHitRatio 欠佳,則可能會移出經常存取的資料。系統也會使用維護索引結構的 CPU 資源。

可用於識別索引最佳化機會的工具

  • 索引檢閱工具:

  • 索引基數偵測工具

收集工具組:

git clone https://github.com/awslabs/amazon-documentdb-tools.git

1。索引檢閱工具

索引檢閱工具會分析所有集合和索引,以提供索引清單及其使用模式,並識別 Amazon DocumentDB 叢集上的備援索引。在所有叢集執行個體上執行此工具,以進行全面分析。如需詳細資訊,請參閱索引檢閱工具

用量:

cd performance/index-review/ python3 index-review.py --server-alias <server-alias> --uri <mongodb-uri>

輸出檔案

  • {server-alias}-collections.csv:集合層級統計資料

  • {server-alias}-indexes.csv:詳細的索引用量指標

  • {server-alias}-{timestamp}-index-review.json:用於進一步分析的原始資料

注意

使用獨立別名對叢集中的每個執行個體執行 ,以從每個執行個體產生統計資料,然後執行 工具以取得累積分析

例如: python3 index-review.py --files "{server-alias}-{timestamp}-index-review.json, {server-alias}-{timestamp}-index-review.json" --server-alias full-review

2. 索引基數偵測工具

此工具可識別基數低且查詢效能效率不佳的索引。

用途

cd performance/index-cardinality-detection/ python3 detect-cardinality.py --uri <mongodb-uri>

參數

  • --threshold:基數閾值百分比 (預設值:1%)

  • --sample-count:要取樣的文件數量 (預設值:100,000)

  • --max-collections:每個資料庫要掃描的集合上限 (預設值:100)

如需詳細資訊,請參閱 https://https://aws.amazon.com/blogs/database/detect-and-fix-low-cardinality-indexes-in-amazon-documentdb/

修復策略

1。未使用和備援索引移除

// Example: Drop unused index db.collection.dropIndex("unused_index_name")
注意

在未與所有感興趣的各方討論並測試效能之前,絕不應捨棄索引。

2. 低基數索引最佳化

  • 搭配篩選條件使用部分索引

  • 將單一低基數索引轉換為複合索引