정의
unshardCollection기존 샤딩된 컬렉션을 분할하여 컬렉션 데이터를 단일 샤드로 옮깁니다. 컬렉션의 샤딩을 해제하면 컬렉션을 여러 개의 샤드로 분할할 수 없고 분할 키가 제거됩니다.
버전 8.0에 추가 되었습니다.
팁
In
mongosh, this command can also be run through thesh.unshardCollection().Helper methods are convenient for
mongoshusers, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.이 명령은
admin데이터베이스 에서 실행 되어야 합니다.컬렉션 에 구역 구성이 적용된 경우 컬렉션 의 샤딩을 해제하기 전에 먼저 구역 에서 범위 연결 및 샤드를 제거 해야 합니다. 자세한 내용은 구역 샤딩 해제를 참조하세요.
참고
컬렉션 의 샤딩 해제는 쓰기 집약적인 작업으로 oplog 성장률이 증가할 수 있습니다. 이를 완화하려면 다음과 같은 구성 변경을 고려하세요.
oplog 의 무제한 증가를 방지하려면 고정된 oplog 크기를 설정하다 합니다.
세컨더리가 오래될 가능성을 줄이려면 oplog 크기를 늘리세요.
자세한 내용은 복제본 세트 oplog 를 참조하세요.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
- MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
참고
이 작업 MongoDB Atlas 무료 또는 Flex 계층에서는 사용할 수 없습니다.
제한 사항
Queryable Encryption 컬렉션에는 unshardCollection 을(를) 사용할 수 없습니다.
구문
db.adminCommand( { unshardCollection: "<database>.<collection>", toShard: "<shard-id>" } )
명령 필드
필드 | 유형 | 필요성 | 설명 |
|---|---|---|---|
| 문자열 | 필수 사항 | 샤딩을 해제할 데이터베이스 및 컬렉션 을 지정합니다. |
| 문자열 | 옵션 | 수신자 샤드 ID 를 지정합니다. MongoDB 가 컬렉션 을 샤딩 해제하면 컬렉션 데이터를 현재 샤드에서 이 특정 샤드 로 이동합니다. 지정하지 않으면 클러스터 는 데이터 양이 가장 적은 샤드 를 선택합니다. |
고려 사항
unshardCollection샤딩된 클러스터에서만 실행 수 있습니다.unshardCollection샤딩된 컬렉션에서만 작동할 수 있습니다.unshardCollection한 번에 하나의 컬렉션 에서만 작동할 수 있습니다.unshardCollection최소 지속 시간은 5 분입니다.unshardCollection실행 후 Atlas Search 인덱스를 다시 작성해야 합니다.writeConcernMajorityJournalDefault은(는)true이어야 합니다.unshardCollection이(가) 완료될 때까지 샤드를 추가 또는 제거하거나 내장된 구성 서버와 전용 구성 서버 간에 전환하는 등 토폴로지 를 변경할 수 없습니다.unshardCollection이(가) 진행 중인 동안에는 샤딩 해제 중인 컬렉션 에서 다음 작업을 실행 수 없습니다.unshardCollection이(가) 진행 중인 동안에는 클러스터 에서 다음 작업을 실행 수 없습니다.unshardCollection이(가) 진행 중인 동안 발생하는 인덱스 빌드는 자동으로 실패할 수 있습니다.unshardCollection이(가) 진행되는 동안에는 인덱스를 생성하지 마세요.진행 중인 인덱스 빌드가 있는 경우
unshardCollection를 호출하지 마세요.
오류를 방지하기 위해 MongoDB
unshardCollection를 실행 때 컬렉션 의 영역을 자동으로 삭제합니다.If the collection you're unsharding uses Atlas Search, the search index becomes unavailable when the unsharding operation completes. You need to manually rebuild the search index once the unsharding operation completes.
If the collection you're unsharding is archived in Atlas Online Archives, the online archive files are marked as
Orphanedonce the unsharding operation completes. You can create another online archive for the same database, collection, and fields as the orphaned archive as long as there is no other archive for that same combination in theActivestate.
요구 사항:
컬렉션 의 샤딩을 해제하기 전에 다음 요구 사항을 충족하는지 확인하세요.
애플리케이션 은 영향을 받는 컬렉션 이 쓰기를 차단하는 2초의 기간을 허용할 수 있습니다. 쓰기가 차단되는 기간 동안 애플리케이션 의 지연 시간 이 증가합니다.
데이터베이스는 다음과 같은 리소스 요구 사항을 충족합니다.
컬렉션 을 이동하려는 샤드 에 컬렉션 및 해당 인덱스를 위한 충분한 저장 공간이 있는지 확인합니다. 대상 샤드 에는 최소
( Collection storage size + Index Size ) * 2바이트의 사용 가능한 공간이 필요합니다.I/O 용량 이 50% 미만인지 확인합니다.
CPU 로드가 80% 미만인지 확인합니다.
행동
Unshard Zones
구역 샤딩 사용하는 컬렉션 샤딩 해제하려면 먼저 밸런서 중지한 다음 구역 에서 범위 와 샤드 제거 .
예시
컬렉션 샤딩 해제
다음 예시 에서는 sales.eu_accounts 컬렉션 을 샤딩 해제합니다.
db.adminCommand( { unshardCollection: "sales.eu_accounts" } )
특정 샤드로 샤딩 해제
다음 예시 에서는 sales.us_accounts 컬렉션의 샤딩을 해제하고 컬렉션 데이터를 shard1 에 배치합니다.
db.adminCommand( { unshardCollection: "sales.eu_accounts", toShard: "shard1" } )
구역 샤드 컬렉션 샤딩 해제
다음 예시 구역을 사용하는 컬렉션 샤딩을 해제합니다.
범위 연관 관계를 식별합니다.
구역과 연결된 범위를 식별하려면 메서드를 실행 하고 sh.status() 각 chunks 샤딩된 컬렉션 에 대해 필드 의 범위를 기록합니다.
sh.status()
구역 에서 범위 제거
구역 에서 범위 제거 하려면 명령을 실행 updateZoneKeyRange .
db.adminCommand( { updateZoneKeyRange: "app.inventory", min: 100, max: 500, zone: null } )
컬렉션 에서 사용하는 구역에서 모든 범위를 제거할 때까지 이 단계를 반복합니다.
구역 에서 샤드 제거
구역 에서 샤드를 제거 하려면 removeShardFromZone 명령을 실행 .
db.adminCommand( { removeShardFromZone: "shard01", zone: "us" } )
구역에서 모든 컬렉션 샤드를 제거할 때까지 반복합니다.