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
청크를 분할합니다.
sh.splitAt()
또는 sh.splitFind()
를 사용하여 jumbo
청크를 분할합니다.
sh.splitAt( "test.foo", { x: 3 })
청크 분할에 성공하면 MongoDB가 jumbo
플래그를 제거합니다.
분할할 수 없는 청크
인스턴스에 따라 MongoDB는 단일 샤드 키 값 범위의 청크와 같이 더 이상 jumbo
이 아닌 청크를 분할할 수 없습니다. 따라서 플래그를 지우기 위해 청크를 분할할 수 없습니다.
이러한 경우 청크를 분할할 수 있도록 샤드 키를 변경 하거나 플래그를 수동으로 지울 수 있습니다.
샤드 키 세분화
MongoDB 는 refineCollectionShardKey
명령을 제공합니다. refineCollectionShardKey
명령을 사용하면 기존 키에 접미사 필드 를 추가하여 컬렉션의 샤드 키 를 구체화할 수 있습니다. 샤드 키 에 새 필드 를 추가하면 분할할 수 없는 점보 청크를 분할할 수 있게 됩니다.
jumbo
청크를 찾습니다.
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)
컬렉션의 샤드 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
명령은 기존 키 필드의 범위 값을 수정하지 않고 새 필드를 통합하도록 청크 범위 와 구역 범위 를 업데이트합니다. 즉, 샤드 키가 세분화되어도 샤드 또는 구역에 걸친 청크 분포에 즉시 영향을 미치지 않습니다. 향후 청크 분할 또는 마이그레이션은 일상적인 샤딩 작업의 일부로 발생합니다.
팁
샤드 키를 세분화한 후에는 컬렉션의 모든 문서에 접미사 필드가 없는 경우가 있을 수 있습니다. 누락된 샤드 키 필드를 채우려면 누락된 샤드 키 필드를 참조합니다.
샤드 키를 세분화하기 전에 컬렉션의 모든 문서 또는 대부분의 문서에 접미사 필드가 있는지 확인하여 나중에 필드를 채울 필요가 없도록 하세요.
분할할 수 없는 청크에 대한 플래그를 수동으로 jumbo
지우기
jumbo
플래그를 수동으로 지우려면 clearJumboFlag
명령을 사용할 수 있습니다. 여전히 청크 크기를 초과하는 청크에 대해 jumbo
플래그를 지우면 MongoDB 가 청크를 이동하려고 할 때 청크에 jumbo
레이블을 다시 MongoDB 합니다.
중요
선호하는 방법 을 적용할 수 없는 경우에만 이 방법을 사용하세요.
플래그를 수동으로 지우려면 다음 단계를 따르세요.
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
을 실행하고 샤딩된 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
필드를 대신 사용합니다.