删除哈希分片键索引
从 MongoDB 7.0.3(以及 6.0.12 和 5.0.22)开始,您可以删除哈希分片键的索引。
这可以加快使用哈希分片键分片的collection的数据插入速度。使用 mongosync
时,它还可以加快数据摄取速度。
关于此任务
删除 不必要的索引可以加快CRUD操作的速度。 每个 CRUD 操作都必须更新与文档相关的所有索引。 删除一个索引可以提高所有 CRUD 操作的速度。
删除哈希分片键索引时,服务器会禁用该集合的负载均衡,并从未来的负载均衡轮次中排除该集合。 为了再次将collection包含在均衡轮次中,您必须重新创建分片键索引。
重要
仅当存在针对分片分片键的支持性非哈希索引时,才应从集合中删除哈希分片键索引。 如果分片键上不存在支持的非哈希索引,分片键分片分片键筛选的查询将执行 集合扫描。要查看集合上存在哪些索引,请使用db.collection.getIndexes()
。
步骤
1
2
确认collection中没有孤立文档
从 MongoDB 6.0.3 开始,您可以使用$shardedDataDistribution
阶段运行聚合,以确认没有剩余孤立文档:
db.aggregate([ { $shardedDataDistribution: {} }, { $match: { "ns": "<database>.<collection>" } } ])
$shardedDataDistribution
有类似如下的输出:
[ { "ns": "test.names", "shards": [ { "shardName": "shard-1", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 }, { "shardName": "shard-2", "numOrphanedDocs": 0, "numOwnedDocuments": 6, "ownedSizeBytes": 366, "orphanedSizeBytes": 0 } ] } ]
确保集群中每个分片的 "numOrphanedDocs"
为 0
。