[MongoDB] Range deletion

DataBase 2024. 7. 23. 15:37

 

 

 

MongoDB 7.0 기준.

 

 

 

range deletion task는 각 mongod의 config.rangeDeletions 컬렉션에 존재함. (mongos에서 아무리 봐도 없음)

document의 구조는 아래와 같음. 

// https://github.com/mongodb/mongo/blob/master/src/mongo/db/s/range_deletion_task.idl
{
    _id: UUID('ba3e37b5-49a7-45e2-8de1-d5fada15b165'),
    // namespace
    nss: 'DB.COLLECTION',
    // 해당 chunk가 속해있는 컬렉션의 uuid (config.collections)
    collectionUuid: UUID('849f09b3-cc83-4b74-9f92-d86ec41b6312'),
    // chunk migration을 보낸 shard
    donorShardId: 'shard_008',
    // 삭제할 chunk range
    range: {
      min: {
        key1: 'xxx',
        key2: 1111
      },
      max: {
        key1: 'xxy',
        key2: 1112
      }
    },
    // range 삭제 가능상태 여부 (optional이므로 없을 수 있음)
    pending: true,
    // 현재 삭제중인지 여부 (optional이므로 없을 수 있음)
    processing: false
    // 언제 range를 삭제할 것인지 여부 (now, delayed)
    whenToClean: 'delayed',
    // task가 생성된 시간
    timestamp: Timestamp({ t: 1721712651, i: 33 }),
    // 삭제할 range에 들어있는 orphaned document 수
    numOrphanDocs: Long('23531'),
    // shard key pattern
    keyPattern: {
      key1: 1,
      key2: 1
    }
}

 

 

 

 

migration이 시작되면 pending 상태의 range deletion taks가 양측 shard 모두에 생성되며, 이후 진행결과에 따라 수정됨.

commit: 보내는 shard의 range deletion document는 pending flag가 삭제되고 ready 상태로 되며, 받는 shard의 range deletion document는 삭제됨.
abort: 보내는 shard의 range deletion document는 삭제되고, 받는 shard의 range deletion document는 pending flag가 삭제되고 ready 상태로 변경됨.





config.rangeDeletions 컬렉션을 보면 migration이 끝났는데도 해당 range가 삭제되지 않고 남아있는 것을 확인 가능.
이를 orphan documents라고 함.
이는 migration이 일어나기 전에 해당 range에 실행되던 query가 문제없이 완료되도록 하기 위해 기본값 15분 동안 삭제하지 않고 기다려주기 때문.
그냥 query 완료여부를 체크해서 다 완료된 시점에 삭제하면 되긴 하겠지만, range deleter가 동작하는 primary의 경우엔 그걸 알 수 있으나 secondary에서 일어나는 query는 알 수 없으므로 넉넉하게 15분을 설정한 것.
만약 빨리 끝내고 싶으면 더 짧게 설정할 수도 있고, 15분 이상 걸리는 query가 있을 경우 더 길게 설정할 수도 있음.
orphanCleanupDelaySecs 설정값을 통해 변경가능.

https://www.mongodb.com/docs/manual/reference/parameters/#mongodb-parameter-param.orphanCleanupDelaySecs

 

 

 

 

[참고]

https://github.com/mongodb/mongo/blob/master/src/mongo/db/s/README_range_deleter.md

https://github.com/mongodb/mongo/blob/v7.0/src/mongo/db/s/README_migrations.md#range-deletions

 

 

 

 

'DataBase' 카테고리의 다른 글

[MongoDB] BSON  (0) 2024.07.19
[MongoDB] chunk/range size 변경  (0) 2024.07.11
[MongoDB] chunk 관리  (0) 2024.07.04
[MongoDB] oplog 분석  (0) 2024.05.29
[MongoDB] mongosh에서 JavaScript 사용하기  (0) 2024.02.27
Posted by bloodguy
,