moveChunk
정의
moveChunk
내부 관리 명령. 샤드 간에 청크 를 이동합니다. 관리 데이터베이스 를 사용하는 동안 인스턴스
moveChunk
를 통해mongos
명령을 실행합니다. 다음 양식을 사용하세요.팁
mongosh
에서 이 명령을sh.moveChunk()
헬퍼 메서드를 통해서도 실행할 수 있습니다.헬퍼 메서드는
mongosh
사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.db.adminCommand( { moveChunk : <namespace> , find : <query> , to : <string>, forceJumbo: <boolean>, _secondaryThrottle : <boolean>, writeConcern: <document>, _waitForDelete : <boolean> } ) 대신 다음을 사용할 수 있습니다.
db.adminCommand( { moveChunk : <namespace> , bounds : <array> , to : <string>, forceJumbo: <boolean>, _secondaryThrottle : <boolean>, writeConcern: <document>, _waitForDelete : <boolean> } ) moveChunk
명령에는 다음과 같은 필드가 있습니다.필드유형설명moveChunk
문자열find
문서이동할 청크의 샤드 키 값을 지정하는 샤드 키의 동등성 매치입니다.bounds
필드 또는find
필드 중 하나만 지정하고 둘 다 지정하지는 않습니다. 해시 샤드 키 를사용하는 컬렉션에서 청크를 선택하는 데 필드를 사용하지 마세요 .find
bounds
배열이동할 특정 청크의 경계입니다. 배열은 이동할 청크의 하위 및 상위 샤드 키 값을 지정하는 두 개의 문서로 구성되어야 합니다.bounds
필드 또는find
필드 중 하나만 지정하고 둘 다 지정하지는 않습니다.bounds
를 사용하여 해시 샤드 키를 사용하는 컬렉션에서 청크를 선택합니다.to
문자열청크의 대상 샤드 이름입니다.부울선택 사항. 명령 이 마이그레이션하기에는 너무 큰 청크를 이동할 수 있는지 여부를 결정하는 플래그입니다. 청크에는 점보 레이블이 지정되거나 표시되지 않을 수 있습니다.
true
인 경우 명령은 청크를 이동할 수 있습니다.false
인 경우 명령은 청크를 이동할 수 없습니다.
기본값은
false
입니다.경고:
forceJumbo=true
이 포함된moveChunk
명령은 컬렉션에 대한 읽기 및 쓰기 작업을 차단합니다.이 옵션을 사용하면 청크가 구성된 청크 크기보다 큰 경우에도 샤드가 청크를 마이그레이션합니다. 마이그레이션 기간 동안 컬렉션을 사용할 수 없습니다.
긴 차단 기간 없이 이러한 큰 청크를 마이그레이션하려면 대신 크기 제한을 초과하는 범위 균형 조정 을 참조하세요.
_secondaryThrottle
부울선택 사항. WiredTiger 의 경우 기본값은
false
입니다.true
인 경우 기본적으로 청크 마이그레이션 중에 이동하는 각 문서는 밸런서가 다음 문서를 진행하기 전에 적어도 하나의 보조 문서로 전파됩니다. 이는{ w: 2 }
의 쓰기 고려 (write concern)와 동일합니다.다른 쓰기 고려 (write concern)를 지정하려면
writeConcern
옵션을 사용합니다.false
인 경우 밸런서는 보조 문서로의 복제를 기다리지 않고 대신 다음 문서를 계속 진행합니다.
자세한 내용은 보조 스로틀을 참조하세요.
writeConcern
문서선택 사항. Express 청크 마이그레이션 중에
_secondaryThrottle
가 세컨더리를 기다리는 데 사용할 쓰기 고려 (write concern) 를 문서입니다.writeConcern
_secondaryThrottle: true
가 필요합니다._waitForDelete
부울bounds
의 값은 다음과 같은 형식을 취합니다.[ { hashedField : <minValue> } , { hashedField : <maxValue> } ] 청크 마이그레이션 섹션에서는 MongoDB의 샤드 간에 청크가 이동하는 방법을 설명합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 서버리스 인스턴스에서는 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
고려 사항
데이터의 초기 수집을 위한 샤드 클러스터 준비 또는 대규모 대량 가져오기 작업과 같은 특별한 moveChunk
상황에서만 를 사용합니다. 대부분의 경우 밸런서가 샤드 클러스터에서 청크를 생성하고 밸런싱할 수 있습니다. 자세한 내용 은 샤드 클러스터에서 범위 생성 을 참조하세요.
행동
Indexes
moveChunk
에서는 모든 인덱스가 대상에 존재해야 합니다(예: to
)를 제거하고 필요한 인덱스가 없는 경우 오류를 반환합니다.
메타 데이터 오류
moveChunk
{chunks
컬렉션에서 다른 메타데이터 작업이 진행 중인 경우 는 다음 오류 메시지를 반환합니다.
errmsg: "The collection's metadata lock is already taken."
moveChunk
가 실행되는 동안 다른 프로세스(예: 밸런서 프로세스)가 메타데이터를 변경하면 이 오류가 표시될 수 있습니다. 부작용 없이 moveChunk
작업을 다시 시도할 수 있습니다.
maxCatchUpPercentageBeforeBlockingWrites
Server Parameter
MongoDB 5.0 부터는 maxCatchUpPercentageBeforeBlockingWrites
를 설정하여 전송 중인 청크의 총 크기(MB)와 비교했을 때 moveChunk
작업 중에 아직 마이그레이션되지 않은 데이터의 최대 허용 비율을 지정할 수 있습니다.