자동 합병
MongoDB 7.0 부터 밸런서가 병합성 요구 사항을 충족하는 청크를 자동으로 병합할 수 있습니다.
행동
AutoMerger는 밸런싱 작업의 일부로 백그라운드에서 실행됩니다. 대부분의 사용 사례에서는 기본 설정이 잘 작동합니다. 배포서버에 맞게 사용자 지정할 설정에 대한 자세한 내용은 AutoMerger 정책을 참조하세요.
AutoMerger가 실행되면 각 컬렉션의 각 샤드에 대해 병합 가능한 청크의 모든 시퀀스를 함께 압축합니다.
자동 병합 정책
명시적으로 비활성화하지 않는 한, AutoMerger는 밸런서 가 처음 활성화될 때 시작되고 루틴이 소모된 후 다음 autoMergerIntervalSecs
동안 일시 중지됩니다.
자동 병합이 활성화되면 autoMergerIntervalSecs
초마다 자동 병합이 발생합니다.
AutoMerger는 특정 컬렉션의 후속 병합이 최소한 autoMergerThrottlingMS
에 지정된 양만큼 지연되도록 보장합니다.
밸런싱 기간이 설정된 경우 AutoMerger는 해당 기간 동안에만 실행됩니다.
밸런싱 설정 우선 순위
자동 병합은 밸런싱 작업의 일부로 발생합니다. 자동 병합을 실행할지 여부와 시기를 결정하기 위해 다음과 같은 순서로 설정이 고려됩니다.
글로벌 밸런싱 설정
컬렉션 당 밸런싱 설정 (
configureCollectionBalancing
구성)글로벌 자동 병합 설정
컬렉션별 AutoMerger 설정(
configureCollectionBalancing
으로 구성)
세부 정보
mergeAllChunksOnShard
동일한 샤드에 있는 collection의 병합 가능한 모든 청크를 찾아서 병합합니다. 동일한 collection에 있는 두 개 이상의 청크는 다음 조건을 모두 충족할 때 병합 할 수 있습니다.
동일한 샤드 가 소유합니다.
이는 점보 청크가 아닙니다.
jumbo
청크는 마이그레이션에 참여할 수 없으므로 병합할 수 없습니다.트랜잭션 및 스냅샷 읽기를 중단하지 않고 기록을 안전하게 삭제할 수 있습니다.
청크와 관련된 마지막 마이그레이션은 적어도
minSnapshotHistoryWindowInSeconds
값만큼 이전에 발생했습니다.청크와 관련된 마지막 마이그레이션은 적어도
transactionLifetimeLimitSeconds
값만큼 이전에 발생했습니다.
예시
이 예시에서는 모든 청크의 히스토리가 비어 있고 모든 청크가 점보 상태가 아니라고 가정합니다. 두 조건이 모두 충족되므로 동일한 샤드의 연속 간격은 모두 병합할 수 있습니다.
설정
이 청크는 샤드 키가 x
인 coll
(이)라는 컬렉션에 속합니다. 총 9개의 청크가 있습니다.
청크 ID | Min | 최대 | 샤드 |
---|---|---|---|
a | x: 0 | x: 10 | 샤드0 |
B | x: 10 | x: 20 | 샤드0 |
C | x: 20 | x: 30 | 샤드0 |
D | x: 30 | x: 40 | 샤드0 |
E | x: 40 | x: 50 | Shard1 |
F | x: 50 | x: 60 | Shard1 |
G | x: 60 | x: 70 | 샤드0 |
h | x: 70 | x: 80 | 샤드0 |
i | x: 80 | x: 90 | Shard1 |
단계
결과
이러한 명령이 완료되면 인접한 청크가 병합됩니다. 총 청크는 원래 9개가 아니라 4개 있습니다.
청크 ID | Min | 최대 | 샤드 |
---|---|---|---|
A-B-C-D | x: 0 | x: 40 | 샤드0 |
E-F | x: 40 | x: 60 | Shard1 |
G-H | x: 60 | x: 80 | 샤드0 |
i | x: 80 | x: 90 | Shard1 |