Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

jumboフラグ をクリア

項目一覧

  • 手順

が、 MongoDB指定された 範囲サイズMongoDB を超えるチャンクを分割できない場合、そのチャンクは ジャンボ ラベルを付けます。

次の手順では、 jumboフラグを手動でクリアする手順を概説します。

チャンクからjumboフラグをクリアする手動の方法は、 チャンクの分割を試みる ことです。 チャンクが分割可能な場合、MongoDB はチャンクの分割が成功すると フラグを削除します。

1

mongoshmongosに接続します。

2

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)
3

jumboチャンクを分割するには、 sh.splitAt()またはsh.splitFind()のいずれかを使用します。

sh.splitAt( "test.foo", { x: 3 })

MongoDB は、チャンクの分割が成功するとjumboフラグを削除します。

MongoDB では、シャードキー値が 1 つの範囲を持つチャンクなど、 jumboではない チャンクの分割が できません 。 そのため、 チャンクを分割して フラグをクリアすることはできません。

このような場合は、シャードキーを変更してチャンクを分割可能にするか、 フラグを手動でクリアします。

MongoDB はrefineCollectionShardKeyコマンドを提供します。 refineCollectionShardKeyコマンドを使用すると、既存のキーにサフィックス フィールドを追加して、コレクションのシャードキーを調整できます。 シャードキーに新しいフィールドを追加することで、分割不可の ジャンボ チャンクを分割可能になります。

1

mongoshmongosに接続します。

2

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)
3

キーstatusの濃度が低いことに対処するには、 test.ordersコレクションのキーを調整します。 order_idたとえば、customer_id フィールドと{ status: 1, order_id: 1, customer_id: 1 } フィールドを現在のシャードキーのサフィックスとして追加します。つまり、シャードキーは調整後になります。

  1. まず、インデックスがまだ存在しない場合は、 create the indexがシャードキー{ status: 1, order_id: 1, customer_id: 1 }をサポートします。

    db.orders.createIndex( { status: 1, order_id: 1, customer_id: 1 } )

    シャードキーを調整するためのその他のインデックス考慮事項については、「 インデックスに関する考慮事項 」を参照してください。

  2. adminデータベースで、refineCollectionShardKey コマンドを実行して、order_id customer_idフィールドと フィールドを既存のキーのサフィックスとして追加します。

    db.adminCommand( {
    refineCollectionShardKey: "test.orders",
    key: { status: 1, order_id: 1, customer_id: 1 }
    } )

refineCollectionShardKeyコマンドは、チャンク範囲ゾーン範囲を更新して、既存のキー フィールドの範囲値を変更せずに新しいフィールドを含めます。 つまり、シャードキーを改善しても、シャードまたはゾーン全体へのチャンクの分散にはすぐに影響しません。 将来の チャンクの分割 や移行は、ルーチンのシャーディング操作の一部として発生します。

Tip

シャードキーを調整すると、コレクション内のすべてのドキュメントにサフィックス フィールドが存在しない場合があります。 欠落しているシャードキー フィールドを入力するには、「欠落しているシャードキー フィールド 」を参照してください。

シャードキーを検証する前に、コレクション内のすべてまたはほとんどのドキュメントにサフィックス フィールドが含まれていることを確認して、可能であれば、フィールドにその後にフィールドを入力する必要がないようにします。

jumboフラグを手動でクリアするには、 clearJumboFlagコマンドを使用できます。 チャンク サイズをまだ超えるチャンクのjumboフラグをクリアすると、MongoDB がチャンクを移動しようとしたときに MongoDB はそのチャンクをjumboとして再ラベル付けします。

重要

優先される方法が該当しない場合にのみ、このメソッドを使用してください。

フラグを手動でクリアするには、次の手順に従います。

1

mongoshmongosに接続します。

2

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)
3

adminデータベースから、シャーディングされたコレクションの名前空間と次のいずれかを渡して、 clearJumboFlagを実行します。

  • jumboチャンクの境界

    db.adminCommand( {
    clearJumboFlag: "test.foo",
    bounds: [{ "x" : 2 }, { "x" : 3 }]
    })
  • jumboチャンクに含まれるシャードキーと値を持つfindドキュメント :

    db.adminCommand( {
    clearJumboFlag: "test.foo",
    find: { "x" : 2 }
    })

    注意

    コレクションでハッシュされたシャードキーが使用される場合は、 clearJumboFlagfindフィールドを使用しないでください。 ハッシュされたシャードキーの場合は、代わりにboundsフィールドを使用します。

Tip

以下も参照してください。

戻る

コレクションのシャーディング解除の停止

項目一覧