[MongoDB] AutoMerger

DataBase 2024. 8. 7. 16:46

 

 

 

[참고]

https://www.mongodb.com/docs/manual/core/automerger-concept/

 

 

 

AutoMerger

MongoDB 7.0부터 balancer는 mergeable chunk들을 merge 할 수 있음.
mergeable chunk란 동일한 shard에 존재하면서 min/max shard key가 연속적인 chunk들을 의미함.
balancer 구동시 백그라운드에서 자동으로 mergeable chunk를 merge하는 것이 AutoMerger.

 

 

 

설정

AutoMerger와 관련된 서버 설정은 2가지.

autoMergerIntervalSecs
AutoMerger 동작 주기. 명시적으로 AutoMerger가 중지상태가 아니라면 AutoMerger는 balancer가 시작될 때 최초 동작하고, 이후로는 autoMergerIntervalSecs 에 설정된 주기로 동작함. 기본값은 3600초 (=1시간)


autoMergerThrottlingMS
동일한 collection에서 merge가 일어난 이후 다음 merge가 일어나기까지의 시간. 기본값은 15000ms(=15초)

위 2가지 설정값 모두 mongod에서만 설정 가능.

 

 

 

 

구동정책

balancer의 상태와 운명을 함께함.
balancing window가 설정되어 있다면 AutoMerger는 설정된 window 사이에서만 동작함.

 

 

 

 

 

동작설정

기본적으로 balancer와 함께 동작하도록 놔두는게 제일 좋겠지만, AutoMerger도 임의로 on/off할 수 있고, collection별로도 설정이 가능.

// AutoMerger 기동
sh.startAutoMerger()
 
// AutoMerger 중지
sh.stopAutoMerger()

/*
start/stop은 config.settings의 _id가 automerge 인 document의 enabled값에 의해 설정됨
 
start: enabled = true
stop: enabled = false
*/



 
// 특정 namespace에 AutoMerger 활성화
sh.enableAutoMerger('DB_NAME.COLLECTION_NAME')
 
// 특정 namespacedp AutoMerger 비활성화
sh.disableAutoMerger('DB_NAME.COLLECTION_NAME')

/*
enable/disable은 config.collections.findOne({_id:'DB_NAME.COLLECTION_NAME'}) 의 enableAutoMerge 값으로 설정됨
 
enable: enableAutoMerge property가 false 이거나 property 자체가 없을 경우
disable: enableAutoMerge property가 존재하고 값이 false 일 경우
*/

 

 

 

 

 

수동 merge chunk

mergeChunks
https://www.mongodb.com/docs/manual/reference/command/mergeChunks/
balancer(AutoMerger)를 멈춰두고 수동으로 직접 chunk를 하나씩 골라서 merge 하려고 할 경우 사용.
mongos의 admin DB에서 실행해야 함.

// 특정 shard의 chunk 리스트
use config
uuid = db.collections.findOne({_id: DB_NAME.COLLECTION_NAME}).uuid
db.chunks.find({uuid:uuid, shard:'shard_001'}).sort({'min.key1':1,'min.key2':1})
 
// chunk 정보가 주루룩 나올텐데 이 중에 merge 하고 싶은 chunk들의 min, max를 알고 있다고 가정하고
 
// mergeChunks
use admin
 
db.adminCommand({
    mergeChunks: DB_NAME.COLLECTION_NAME,
    bounds: [
        {MIN_KEY},
        {MAX_KEY}
    ]
})

 

 

mergeAllChunksOnShard
https://www.mongodb.com/docs/manual/reference/command/mergeAllChunksOnShard/
지정한 shard의 mergeable chunk를 모두 merge.

db.adminCommand({
    mergeAllChunksOnShard: DB_NAME.COLLECTION_NAME,
    shard: 'shard_001'
})

 

 

 

 

 

 

Posted by bloodguy
,