Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

删除哈希分片键索引

在此页面上

  • 关于此任务
  • 步骤
  • 了解详情

从 MongoDB 6.0.12(和 5.0.22)开始, 您可以删除哈希分片键的索引。

这可以加快使用哈希分片键分片的collection的数据插入速度。使用 mongosync时,它还可以加快数据摄取速度。

删除 不必要的索引可以加快CRUD操作的速度。 每个 CRUD 操作都必须更新与文档相关的所有索引。 删除一个索引可以提高所有 CRUD 操作的速度。

删除哈希分片键索引时,服务器会禁用该集合的负载均衡,并从未来的负载均衡轮次中排除该集合。 为了再次将collection包含在均衡轮次中,您必须重新创建分片键索引。

重要

仅当存在针对分片分片键的支持性非哈希索引时,才应从集合中删除哈希分片键索引。 如果分片键上不存在支持的非哈希索引,分片键分片分片键筛选的查询将执行 集合扫描。要查看集合上存在哪些索引,请使用db.collection.getIndexes()

1

运行以下命令以停止负载均衡器:

sh.stopBalancer()

您只能在sh.stopBalancer() 上运行mongos 。如果在mongod上运行, sh.stopBalancer()会产生错误。

2

从 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

3

运行以下命令以删除索引:

db.collection.dropIndex("<index name>")
4

运行以下命令,重启集群上的负载均衡器:

sh.startBalancer()

后退

clearJumboFlag