Docs Menu

unshardコレクション

unshardCollection

既存のシャーディングされたコレクションのシャーディングを解除し、コレクションデータを単一のシャードに移動します。コレクションをシャーディング解除すると、コレクションを複数のシャードに分割できなくなり、シャードキーが削除されます。

バージョン8.0の新機能

Tip

mongoshでは、このコマンドはsh.unshardCollection()を通じて実行することもできます。

ヘルパー メソッドはmongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。

このコマンドはadminデータベースで実行する必要があります。

コレクションにゾーン構成が適用されている場合は、コレクションのシャーディングを解除する 前に、まずゾーンから範囲の関連付けとシャードを削除する必要があります。詳細については、「 シャーディングされていないゾーン 」を参照してください。

注意

コレクションのシャーディングを解除するには 書き込み集中型の操作であり、 oplogの増加率が増加する可能性があります。 これを軽減するには、次の構成変更を検討してください。

  • oplogの無制限の増加を防ぐには、固定のoplogサイズを設定します。

  • セカンダリが古くなる可能性を減らすには、 oplogサイズを増やします。

詳しくは、レプリカセットのoplogを参照してください。

このコマンドは、次の環境でホストされている配置で使用できます。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

重要

このコマンドは、共有インスタンスまたはサーバーレスインスタンスでは実行できません。 詳細については、「サポートされていないコマンド 」を参照してください。

次の場合は、 unshardCollectionは使用できません。

db.adminCommand( {
unshardCollection: "<database>.<collection>",
toShard: "<shard-id>"
} )
フィールド
タイプ
必要性
説明

unshardCollection

string

必須

シャーディングを解除するデータベースとコレクションを指定します。

toShard

string

任意

受信者シャードIDを指定します。 MongoDBがコレクションのシャーディングを解除すると、コレクションデータは現在のシャードからこの特定のシャードに移動されます。

指定されていない場合、クラスターはデータ量が最も少ないシャードを選択します。

  • 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"
} )

次の例では、ゾーン を使用しているコレクションのシャーディングを解除します。

1

バランサー を停止するには、 コマンドを実行します。balancerStop

db.adminCommand( { balancerStop: 1 } )
2

ゾーンに関連付けられている範囲を識別するには、sh.status() chunksメソッドを実行し、各シャーディングされたコレクションの フィールドに範囲を確認します。

sh.status()
3

ゾーンから範囲を削除するには、updateZoneKeyRange コマンドを実行します。

db.adminCommand( {
updateZoneKeyRange: "app.inventory",
min: 100,
max: 500,
zone: null
} )

コレクションで使用されるゾーンからすべての範囲を削除するまで、この手順を繰り返します。

4

ゾーンからシャードを削除するには、 コマンドを実行しますremoveShardFromZone

db.adminCommand( {
removeShardFromZone: "shard01",
zone: "us"
} )

すべてのコレクションシャードがゾーンから削除されるまで、 を繰り返します。

5

バランサー を再起動するには、 コマンドを実行します。balancerStart

db.adminCommand( { balancerStart: 1 } )
6

コレクション のシャーディングを解除するには、 unshardCollection コマンドを実行します。

db.adminCommand( { unshardCollection: "app.inventory" } )