が、 に MongoDB指定された 範囲サイズMongoDB を超えるチャンクを分割できない場合、そのチャンクは ジャンボ ラベルを付けます。
次の手順では、 jumboフラグを手動でクリアする手順を概説します。
手順
分割可能なチャンク
チャンクからjumboフラグをクリアする手動の方法は、 チャンクの分割を試みる ことです。 チャンクが分割可能な場合、MongoDB はチャンクの分割が成功すると フラグを削除します。
jumboチャンクを見つけます。
sh.status(true)を実行して、 jumboというラベルの付いたチャンクを見つけます。
sh.status(true)
たとえば sh.status(true) からの次の出力は、シャードキー範囲{ "x" : 2 } -->> { "x" : 4 }のチャンクがjumboであることを示しています。
--- Sharding Status --- sharding version: { ... } shards: ... databases: ... test.foo shard key: { "x" : 1 } chunks: shard-b 2 shard-a 2 { "x" : { "$minKey" : 1 } } -->> { "x" : 1 } on : shard-b Timestamp(2, 0) { "x" : 1 } -->> { "x" : 2 } on : shard-a Timestamp(3, 1) { "x" : 2 } -->> { "x" : 4 } on : shard-a Timestamp(2, 2) jumbo { "x" : 4 } -->> { "x" : { "$maxKey" : 1 } } on : shard-b Timestamp(3, 0)
jumboチャンクを分割します。
jumboチャンクを分割するには、 sh.splitAt()またはsh.splitFind()のいずれかを使用します。
sh.splitAt( "test.foo", { x: 3 })
MongoDB は、チャンクの分割が成功するとjumboフラグを削除します。
不可分的なチャンク
MongoDB では、シャードキー値が 1 つの範囲を持つチャンクなど、 jumboではない チャンクの分割が できません 。 そのため、 チャンクを分割して フラグをクリアすることはできません。
このような場合は、シャードキーを変更してチャンクを分割可能にするか、 フラグを手動でクリアします。
シャードキーの調整
MongoDB はrefineCollectionShardKeyコマンドを提供します。 refineCollectionShardKeyコマンドを使用すると、既存のキーにサフィックス フィールドを追加して、コレクションのシャードキーを調整できます。 シャードキーに新しいフィールドを追加することで、分割不可の ジャンボ チャンクを分割可能になります。
jumboチャンクを見つけます。
sh.status(true)を実行して、 jumboというラベルの付いたチャンクを見つけます。
sh.status(true)
たとえば、 sh.status(true)からの次の出力は、シャーディングされたコレクションtest.ordersで、シャードキー範囲{ "status" : "A" } -->> {
"status" : "D" }のチャンクと範囲{ "status" : "D" }
-->> { "status" : "P" }のチャンクの両方がjumboであることを示しています。
--- Sharding Status --- sharding version: { ... } shards: ... databases: ... test.orders shard key: { "status" : 1 } unique: false balancing: true chunks: shardA 2 shardB 2 { "status" : { "$minKey" : 1 } } -->> { "status" : "A" } on : shardB Timestamp(3, 0) { "status" : "A" } -->> { "status" : "D" } on : shardA Timestamp(5, 1) jumbo { "status" : "D" } -->> { "status" : "P" } on : shardA Timestamp(4, 2) jumbo { "status" : "P" } -->> { "status" : { "$maxKey" : 1 } } on : shardB Timestamp(5, 0)
test.ordersコレクションのシャードキーを調整します。
キーstatusの濃度が低いことに対処するには、 test.ordersコレクションのキーを調整します。 order_idたとえば、customer_id フィールドと{ status: 1, order_id: 1,
customer_id: 1 } フィールドを現在のシャードキーのサフィックスとして追加します。つまり、シャードキーは調整後になります。
まず、インデックスがまだ存在しない場合は、
create the indexがシャードキー{ status: 1, order_id: 1, customer_id: 1 }をサポートします。db.orders.createIndex( { status: 1, order_id: 1, customer_id: 1 } ) シャードキーを調整するためのその他のインデックス考慮事項については、「 インデックスに関する考慮事項 」を参照してください。
adminデータベースで、refineCollectionShardKeyコマンドを実行して、order_idcustomer_idフィールドと フィールドを既存のキーのサフィックスとして追加します。db.adminCommand( { refineCollectionShardKey: "test.orders", key: { status: 1, order_id: 1, customer_id: 1 } } )
refineCollectionShardKeyコマンドは、チャンク範囲とゾーン範囲を更新して、既存のキー フィールドの範囲値を変更せずに新しいフィールドを含めます。 つまり、シャードキーを改善しても、シャードまたはゾーン全体へのチャンクの分散にはすぐに影響しません。 将来の チャンクの分割 や移行は、ルーチンのシャーディング操作の一部として発生します。
Tip
シャードキーを調整すると、コレクション内のすべてのドキュメントにサフィックス フィールドが存在しない場合があります。 欠落しているシャードキー フィールドを入力するには、「欠落しているシャードキー フィールド 」を参照してください。
シャードキーを検証する前に、コレクション内のすべてまたはほとんどのドキュメントにサフィックス フィールドが含まれていることを確認して、可能であれば、フィールドにその後にフィールドを入力する必要がないようにします。
jumbo分割不可のチャンクの フラグを手動でクリア
jumboフラグを手動でクリアするには、 clearJumboFlagコマンドを使用できます。 チャンク サイズをまだ超えるチャンクのjumboフラグをクリアすると、MongoDB がチャンクを移動しようとしたときに MongoDB はそのチャンクをjumboとして再ラベル付けします。
重要
優先される方法が該当しない場合にのみ、このメソッドを使用してください。
フラグを手動でクリアするには、次の手順に従います。
jumboチャンクを見つけます。
sh.status(true)を実行して、 jumboというラベルの付いたチャンクを見つけます。
sh.status(true)
たとえば sh.status(true) からの次の出力は、シャードキー範囲{ "x" : 2 } -->> { "x" : 3 }のチャンクがjumboであることを示しています。
--- Sharding Status --- sharding version: { ... } shards: ... databases: ... test.foo shard key: { "x" : 1 } chunks: shard-b 2 shard-a 2 { "x" : { "$minKey" : 1 } } -->> { "x" : 1 } on : shard-b Timestamp(2, 0) { "x" : 1 } -->> { "x" : 2 } on : shard-a Timestamp(3, 1) { "x" : 2 } -->> { "x" : 3 } on : shard-a Timestamp(2, 2) jumbo { "x" : 3 } -->> { "x" : { "$maxKey" : 1 } } on : shard-b Timestamp(3, 0)
clearJumboFlagコマンドを実行します。
adminデータベースから、シャーディングされたコレクションの名前空間と次のいずれかを渡して、 clearJumboFlagを実行します。
jumboチャンクの境界。db.adminCommand( { clearJumboFlag: "test.foo", bounds: [{ "x" : 2 }, { "x" : 3 }] }) jumboチャンクに含まれるシャードキーと値を持つfindドキュメント :db.adminCommand( { clearJumboFlag: "test.foo", find: { "x" : 2 } }) 注意
コレクションでハッシュされたシャードキーが使用される場合は、
clearJumboFlagとfindフィールドを使用しないでください。 ハッシュされたシャードキーの場合は、代わりにboundsフィールドを使用します。