コレクションのシャーディング解除
unshardCollection
コマンドを使用してシャーディングされたシャーディングされたコレクションのシャーディングを解除できます。 コレクションは複数のシャードにまたがって分割できなくなり、シャードキーが削除されます。
デフォルトでは 、 コレクションのシャーディングを解除すると 、 MongoDBはコレクションのデータをデータ量が最も少ないシャードに移動します。 あるいは、データを配置するシャードを指定することもできます。
このタスクについて
互換性
このタスクは、次の環境でホストされている配置で実行できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このタスクは、Atlas 共有階層または Atlas サーバーレスでは使用できません。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
制限事項
unshardCollection
は、シャーディングされたクラスターでのみ実行できます。unshardCollection
は、シャーディングされたコレクションでのみ動作できます。unshardCollection
は一度に 1 つのコレクションに対してのみ操作できます。unshardCollection
の最小期間は5分です。Atlas Search インデックスは、
unshardCollection
の実行後に 再構築する必要があります 。unshardCollection
が完了するまで、シャードの追加や削除、埋め込みコンフィギュレーションサーバーと専用コンフィギュレーションサーバーの間の移行などのトポロジー変更を行うことはできません。unshardCollection
の進行中にシャーディングされていないコレクションに対して次の操作を実行することはできません。unshardCollection
の進行中は、クラスターで次の操作を実行できません。unshardCollection
の進行中に発生するインデックスビルドは、メッセージが表示されずに失敗する可能性があります。unshardCollection
の進行中は、インデックスを作成しないでください。インデックスビルドが進行中の場合は、
unshardCollection
を呼び出しないでください。
アクセス制御
デプロイメントでアクセス制御が有効になっている場合、 enableSharding
ロールはunshardCollection
コマンドを実行するためのアクセスを許可します。
始める前に
コレクションのシャーディングを解除する 前に、以下の要件を満たしていることを確認してください。
アプリケーションは、影響を受けるコレクションが書込みをブロックする期間を2 秒許容できます。 書込み (write) がブロックされている期間中、アプリケーションのレイテンシが増加します。
データベースが次のリソース要件を満たしている。
コレクションを移動するシャードに、コレクションとそのインデックス用の十分なストレージ領域があることを確認します。 宛先シャードでは少なくとも
( Collection storage size + Index Size ) * 2
バイトが使用可能である必要があります。I/Oキャパシティーが50 % 未満であることを確認します。
CPU 負荷が80 % 未満であることを確認します。
手順
(任意)シャード名を一覧表示する
シャーディングされたシャーディングされたコレクションのデータを特定のシャードに配置する場合は、対象シャードの名前が必要です。
クラスター内のシャード名のリストを表示するには、 listShards
コマンドを使用します。
db.adminCommand( { listShards: 1 } )
shards._id
フィールドには、各シャードの名前が一覧表示されます。
コレクションのシャーディングを解除します
コレクションのシャーディングを解除するには、 unshardCollection
コマンドを実行します。 次の例では、 sales
データベース内のus_accounts
というコレクションのシャーディングを解除します。
db.adminCommand( { unshardCollection: "sales.us_accounts", toShard: "shard1" } )
アン シャード操作が完了すると、 us_accounts
コレクション内のデータはshard1
に表示されます。 toShard
フィールドを省略すると、データはデータ量が最も少ないシャードに配置されます。
コレクションがシャーディングされていないことを確認する
コレクションがシャーディングされていないことを確認するには、 $shardedDataDistribution
ステージを使用してシャーディングされていない名前空間を照合してください。
db.aggregate( [ { $shardedDataDistribution: { } }, { $match: { "ns": "sales.us_accounts" } } ] )
集計でデータが返されない場合、コレクションはシャーディングされません。