本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
低用量和備援索引
概觀
索引可改善工作負載的整體查詢效能,但會帶來成本。每個索引都會耗用儲存體和 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. 低基數索引最佳化
-
搭配篩選條件使用部分索引
-
將單一低基數索引轉換為複合索引