Docs Menu

ハッシュされたシャードキーインデックスの削除

MongoDB 7.0.3 以降(そして 6.0.12 と 5.0.22)、ハッシュされたシャードキーのインデックスを削除できます。

これにより、ハッシュされたシャードキーでシャーディングされたコレクションのデータ挿入を高速化できます。mongosync を使用すると、データの取り込みを高速化することもできます。

不要なインデックスを削除すると、CRUD 操作が高速化されます。 各 CRUD 操作では、ドキュメントに関連するすべてのインデックスを更新する必要があります。 1 つのインデックスを削除すると、すべての CRUD 操作が高速化されます。

重要

シャードキーでハッシュされていないインデックスをサポートしている場合にのみ、コレクションからハッシュされたシャードキーインデックスを削除する必要があります。 サポートされている非ハッシュインデックスがシャードキーに存在しない場合、シャードキーでフィルタリングするクエリはコレクションスキャンを実行します。コレクションに存在するインデックスを確認するには、db.collection.getIndexes() を使用します。

ハッシュされたシャードキーインデックスを削除するときは、次の点を考慮してください。

  • サーバーはコレクションのバランシングを無効にし、コレクションを今後のバランシング ラウンドから除外します。今後のバランシング ラウンドにコレクションを含めるには、シャードキーインデックスを再作成します。

  • シャードキーインデックスを削除すると、範囲削除はコレクション内の残りの 孤立した孤立 をクリーンアップしません。ハッシュされたシャードキーインデックスを削除する前に、コレクション内に 孤立したドキュメント が存在しないことを確認する必要があります。コレクション内に孤立したドキュメントがないことを確認する方法については、以下の手順を参照してください。

1

以下のコマンドを実行して、バランサーを停止します。

sh.stopBalancer()

sh.stopBalancer()ではmongos のみを実行できます。sh.stopBalancer()mongodで実行するとエラーが発生します。

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()