-
[MongoDB] createIndex commitQuorumSoftware Development/Database 2023. 3. 31. 23:00
몽고디비 인덱스 생성시에 commitQuorum 옵션이 있다.
기본값은 'votingMembers'인데, 데이터 보유 노드 전체에 인덱스를 생성해야 결과를 출력한다.
만약 데이터 보유 노드 중 한대가 RECOVERING 상태이고 commitQuorum: votingMembers 옵션으로 createIndex를 생성하면 결과를 반환하지 않는다.
결과를 반환하지 않는다고 해서 인덱스가 생성되지 않은 것은 아니다. 프라이머리노드 및 살아있는 세컨더리 노드는 인덱스가 생성됐을 수 있다.
그렇기 때문에 createIndex시에 응답이 필요한 경우는, commitQuorum옵션을 majority로 설정하는 것이 좋다.
만약 노드중 한대가 RECOVERING일 때,
commitQuorum옵션을 votingMembers로 설정하고 createIndex를 여러번 호출하면, 이후에 commitQuorum옵션을 majority로 설정해도 createIndex가 결과를 반환하지 않는다.
commitQuorum옵션을 majority로 설정하면 데이터 보유 노드 중 한대가 문제가 있어도 잘 실행되어야 할 것 같은데 왜 이럴까?
몽고디비에 maxNumActiveUserIndexBuilds라는 설정이 있다.
maxNumActiveUserIndexBuilds의 설명은 아래와 같다.
- Sets the maximum number of concurrent index builds allowed on the primary. This is a global limit that applies across all collections.
createIndex는 동시에 maxNumActiveUserIndexBuilds로 설정된 숫자만큼 가능하다. 기본값은 3인데, 만일 commitQuorum옵션을 votingMembers설정한 createIndex 명령이 3번이상 실행되면, 이후에 majority로 설정해도 락이 걸리는 것이다.
동시에 처리할 수 있는 갯수가 한정적이기 때문이다.
'Software Development > Database' 카테고리의 다른 글
Database의 파일시스템 EXT4, XFS 비교 (Feat. MongoDB, ScyllaDB) (0) 2024.06.22 [몽고디비] Query Plans (0) 2023.05.09 [MongoDB] 몽고디비 설치시 최적의 하드웨어 및 OS 설정 (0) 2023.03.12 [MongoDB] 재해복구 시스템을 위한 몽고디비 노드 설정. (0) 2023.03.10 [MongoDB] Compound Index 생성해도 왜 쿼리가 느리지? (0) 2022.05.31