Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

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

sh.splitAt() 또는 sh.splitFind() 를 사용하여 jumbo 청크를 분할합니다.

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

청크 분할에 성공하면 MongoDB가 jumbo 플래그를 제거합니다.

인스턴스에 따라 MongoDB는 단일 샤드 키 값 범위의 청크와 같이 더 이상 jumbo 이 아닌 청크를 분할할 수 없습니다. 따라서 플래그를 지우기 위해 청크를 분할할 수 없습니다.

이러한 경우 청크를 분할할 수 있도록 샤드 키를 변경 하거나 플래그를 수동으로 지울 수 있습니다.

MongoDB 는 refineCollectionShardKey 명령을 제공합니다. refineCollectionShardKey 명령을 사용하면 기존 키에 접미사 필드 를 추가하여 컬렉션의 샤드 키 를 구체화할 수 있습니다. 샤드 키 에 새 필드 를 추가하면 분할할 수 없는 점보 청크를 분할할 수 있게 됩니다.

1

mongoshmongos 에 연결합니다.

2

sh.status(true) 를 실행하여 jumbo 레이블이 지정된 청크를 찾습니다.

sh.status(true)

예를 들어 sh.status(true) 의 다음 출력은 샤딩된 collection 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_idcustomer_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_idcustomer_id 필드를 기존 키에 접미사로 추가합니다.

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

refineCollectionShardKey 명령은 기존 키 필드의 범위 값을 수정하지 않고 새 필드를 통합하도록 청크 범위구역 범위 를 업데이트합니다. 즉, 샤드 키가 세분화되어도 샤드 또는 구역에 걸친 청크 분포에 즉시 영향을 미치지 않습니다. 향후 청크 분할 또는 마이그레이션은 일상적인 샤딩 작업의 일부로 발생합니다.

샤드 키 세분화한 후에는 컬렉션 의 모든 문서에 접미사 필드 없을 수 있습니다. 누락된 샤드 키 필드 채우려면 누락된 샤드 키 필드 설정을 참조하세요.

샤드 키를 세분화하기 전에 컬렉션의 모든 문서 또는 대부분의 문서에 접미사 필드가 있는지 확인하여 나중에 필드를 채울 필요가 없도록 하세요.

jumbo 플래그를 수동으로 지우려면 clearJumboFlag 명령을 사용할 수 있습니다. 여전히 청크 크기를 초과하는 청크에 대해 jumbo 플래그를 지우면 MongoDB 가 청크를 이동하려고 할 때 청크에 jumbo 레이블을 다시 MongoDB 합니다.

중요

선호하는 방법 을 적용할 수 없는 경우에만 이 방법을 사용하세요.

플래그를 수동으로 지우려면 다음 단계를 따르세요.

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 을 실행하고 샤딩된 collection의 네임스페이스를 전달하고 다음 중 하나를 전달합니다.

  • jumbo 청크의 경계 :

    db.adminCommand( {
    clearJumboFlag: "test.foo",
    bounds: [{ "x" : 2 }, { "x" : 3 }]
    })
  • jumbo 청크에 포함된 샤드 키와 값으로 문서를 찾습니다 :

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

    참고

    collection이 해시 샤드 키를 사용하는 경우 find 필드를 clearJumboFlag 과 함께 사용하지 마세요. 해시 샤드 키의 경우 bounds 필드를 대신 사용합니다.

돌아가기

전용 구성 서버에 내장

이 페이지의 내용