unshardコレクション
定義
unshardCollection
既存のシャーディングされたコレクションのシャーディングを解除し、コレクションデータを単一のシャードに移動します。コレクションをシャーディング解除すると、コレクションを複数のシャードに分割できなくなり、シャードキーが削除されます。
バージョン8.0の新機能。
Tip
mongosh
では、このコマンドはsh.unshardCollection()
を通じて実行することもできます。ヘルパー メソッドは
mongosh
ユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。このコマンドは
admin
データベースで実行する必要があります。コレクションにゾーン構成が適用されている場合は、コレクションのシャーディングを解除する 前に、まずゾーンから範囲の関連付けとシャードを削除する必要があります。詳細については、「 シャーディングされていないゾーン 」を参照してください。
注意
コレクションのシャーディングを解除するには 書き込み集中型の操作であり、 oplogの増加率が増加する可能性があります。 これを軽減するには、次の構成変更を検討してください。
oplogの無制限の増加を防ぐには、固定のoplogサイズを設定します。
セカンダリが古くなる可能性を減らすには、 oplogサイズを増やします。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
重要
このコマンドは、共有インスタンスまたはサーバーレスインスタンスでは実行できません。 詳細については、「サポートされていないコマンド 」を参照してください。
制限事項
次の場合は、 unshardCollection
は使用できません。
構文
db.adminCommand( { unshardCollection: "<database>.<collection>", toShard: "<shard-id>" } )
コマンドフィールド
フィールド | タイプ | 必要性 | 説明 |
---|---|---|---|
| string | 必須 | シャーディングを解除するデータベースとコレクションを指定します。 |
| string | 任意 | 受信者シャードIDを指定します。 MongoDBがコレクションのシャーディングを解除すると、コレクションデータは現在のシャードからこの特定のシャードに移動されます。 指定されていない場合、クラスターはデータ量が最も少ないシャードを選択します。 |
Considerations
unshardCollection
はシャーディングされたクラスターでのみ実行できます。unshardCollection
は、シャーディングされたコレクションでのみ動作できます。unshardCollection
は一度に 1 つのコレクションに対してのみ操作できます。unshardCollection
の最小表示時間は5分です。Atlas Search インデックスは、
unshardCollection
の実行後に 再構築する必要があります 。unshardCollection
が完了するまで、シャードの追加や削除、埋め込みコンフィギュレーションサーバーと専用コンフィギュレーションサーバーの間の移行などのトポロジー変更を行うことはできません。unshardCollection
の進行中にシャーディングされていないコレクションに対して次の操作を実行することはできません。unshardCollection
の進行中は、クラスターで次の操作を実行できません。unshardCollection
の進行中に発生するインデックスビルドは、メッセージが表示されずに失敗する可能性があります。unshardCollection
の進行中は、インデックスを作成しないでください。インデックスビルドが進行中の場合は、
unshardCollection
を呼び出しないでください。
要件
コレクションのシャーディングを解除する 前に、以下の要件を満たしていることを確認してください。
アプリケーションは、影響を受けるコレクションが書込みをブロックする期間を2 秒許容できます。 書込み (write) がブロックされている期間中、アプリケーションのレイテンシが増加します。
データベースが次のリソース要件を満たしている。
コレクションを移動するシャードに、コレクションとそのインデックス用の十分なストレージ領域があることを確認します。 宛先シャードでは少なくとも
( Collection storage size + Index Size ) * 2
バイトが使用可能である必要があります。I/Oキャパシティーが50 % 未満であることを確認します。
CPU 負荷が80 % 未満であることを確認します。
動作
シャーディングされていないゾーン
ゾーンシャーディング を使用しているコレクションのシャーディングを解除するには、まずバランサーを停止し、次にゾーンから範囲とシャードを削除する必要があります。
例
コレクションのシャーディング解除
次の例では、 sales.eu_accounts
コレクションのシャーディングを解除します。
db.adminCommand( { unshardCollection: "sales.eu_accounts" } )
特定のシャードへのアンシャーディング
次の例では、 sales.us_accounts
コレクションのシャーディングを解除し、そのコレクションデータをshard1
に配置します。
db.adminCommand( { unshardCollection: "sales.eu_accounts", toShard: "shard1" } )
ゾーンシャーディングされたコレクションのシャーディング解除
次の例では、ゾーン を使用しているコレクションのシャーディングを解除します。
バランサーを停止する
バランサー を停止するには、 コマンドを実行します。balancerStop
db.adminCommand( { balancerStop: 1 } )
範囲の関連付けを識別します。
ゾーンに関連付けられている範囲を識別するには、sh.status()
chunks
メソッドを実行し、各シャーディングされたコレクションの フィールドに範囲を確認します。
sh.status()
ゾーンから範囲を削除
ゾーンから範囲を削除するには、updateZoneKeyRange
コマンドを実行します。
db.adminCommand( { updateZoneKeyRange: "app.inventory", min: 100, max: 500, zone: null } )
コレクションで使用されるゾーンからすべての範囲を削除するまで、この手順を繰り返します。
ゾーンからシャードを削除する
ゾーンからシャードを削除するには、 コマンドを実行しますremoveShardFromZone
db.adminCommand( { removeShardFromZone: "shard01", zone: "us" } )
すべてのコレクションシャードがゾーンから削除されるまで、 を繰り返します。
バランサーを再起動する
バランサー を再起動するには、 コマンドを実行します。balancerStart
db.adminCommand( { balancerStart: 1 } )