View a markdown version of this page

维护索引 - Amazon DocumentDB

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

维护索引

索引膨胀

Amazon DocumentDB 使用 Multi-Version 并发控制 (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 维护索引。

使用 reIndex 维护索引

reIndex 是一个用于重建索引的命令。通常在索引损坏或效率低下时使用。随着时间的推移,索引会因为多次更新、插入或删除而积累未使用的空间,从而导致性能下降。重新编制索引有助于删除此类未使用的空间并恢复索引的效率。

reIndex 指南

  • 只有 Amazon DocumentDB 5.0 及更高版本支持 reIndex

  • reIndex 始终在后台运行。

  • Amazon DocumentDB 支持在后台对单个索引进行重新索引,允许多个工作人员。在 reIndex 进程运行时,旧索引可供查询使用。

  • 亚马逊 DocumentDB 支持通过 currentOp 索引进度报告。您可以看到与索引创建期间查看的索引构建阶段相似的索引构建阶段。唯一的区别是 reIndex 总是有八个阶段,无论它是否独一无二。没有 “建立索引:按键排序 2” 阶段。

  • reIndex 可以与任何命令并行运行,但同一集合上与索引相关的命令除外:createIndexes、dropIndexes、collMod 和 renameCollection。

  • 文本、地理空间、矢量和部分索引目前不支持 reIndex。

reIndex 构建

使用以下命令来重建索引:

db.runCommand({ reIndex: "collection-name", index: "index-name"})

您也可以选择控制分配给重建过程的工作人员的人数:

db.runCommand({ reIndex: "collection-name", index: "index-name", workers: number })

有关使用 Java 管理索引的特定信息,请参见使用 Java 在 Amazon DocumentDB 中进行索引管理