문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

mergeChunks

이 페이지의 내용

  • 정의
  • 구문
  • 명령 필드
  • 액세스 제어
  • 행동
  • 메시지 반환
mergeChunks

샤드 컬렉션의 경우 는mergeChunks 샤드의 연속 청크 범위를 mergeChunks 단일 청크로 결합합니다.admin 인스턴스에서 mongos 데이터베이스에 대해 명령을 실행합니다.

명령은 다음과 같은 구문을 가집니다:

db.adminCommand(
{
mergeChunks: <namespace>,
bounds : [
{ <shardKeyField>: <minFieldValue> },
{ <shardKeyField>: <maxFieldValue> }
]
}
)

복합 샤드 키의 경우 bounds 사양에 전체 샤드 키를 포함해야 합니다. 예를 들어 샤드 키가 { x: 1, y: 1 } 인 경우 mergeChunks 의 형식은 다음과 같습니다.

db.adminCommand(
{
mergeChunks: <namespace>,
bounds: [
{ x: <minValue>, y: <minValue> },
{ x: <maxValue>, y: <maxValue> }
]
}
)

이 명령은 다음 필드를 사용합니다.

필드
유형
설명
mergeChunks
네임스페이스
청크 모두 존재하는 컬렉션 의 정규화된 네임스페이스 입니다. 네임스페이스는 <database>.<collection> 의 형태를 취합니다.
bounds
배열
새 청크의 최소 및 최대 키 값을 포함하는 배열입니다.

authorization 으로 실행되는 배포에서 기본 제공 역할 clusterManager 필요한 권한을 제공합니다.

참고

특별한 상황에서만 mergeChunks 를 사용합니다. 예를 들어 많은 문서를 제거한 후 샤드 클러스터 를 정리하는 경우가 이에 해당합니다.

청크를 성공적으로 병합하려면 다음 조건에 부합 해야 합니다.

  • bounds 필드에서 <minkey><maxkey> 은 병합할 청크 의 하한 및 상한에 해당해야 합니다.

  • 청크는 동일한 샤드에 있어야 합니다.

  • 청크는 연속적이어야 합니다.

mergeChunks 이러한 조건이 충족되지 않으면 오류를 반환합니다.

성공하면 mergeChunks 에서 이 문서를 반환합니다.

{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : NumberLong("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

mergeChunks{chunks 컬렉션에서 다른 메타데이터 작업이 진행 중인 경우 는 다음 오류 메시지를 반환합니다.

errmsg: "The collection's metadata lock is already taken."

밸런서 프로세스와 같은 다른 프로세스가 mergeChunks 실행 중에 메타데이터를 변경하면 이 오류가 표시될 수 있습니다. 부작용 없이 mergeChunks 작업을 다시 시도할 수 있습니다.

입력 청크 가 동일한 샤드 에 없으면 mergeChunks 는 다음과 유사한 오류를 반환합니다.

{
"ok" : 0,
"errmsg" : "could not merge chunks, collection test.users does not contain a chunk ending at { username: \"user63169\" }",
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : NumberLong("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

입력 청크 가 연속적이지 않은 경우 mergeChunks 는 다음과 유사한 오류를 반환합니다.

{
"ok" : 0,
"errmsg" : "could not merge chunks, collection test.users has more than 2 chunks between [{ username: \"user29937\" }, { username: \"user49877\" })"
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : NumberLong("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}
← moveRange