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

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 필드를 대신 사용합니다.

다음도 참조하세요.

돌아가기

샤드 제거

이 페이지의 내용