jumbo
フラグ をクリア
項目一覧
が、 に 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_id
customer_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
フィールドを使用します。