다섯 살도 알 수 있게 · DB/데이터
데이터베이스 병행제어가 뭐예요?
병행제어를, 포장 담당과 배송 기사가 같은 상자를 동시에 집으려다 부딪히는 이야기로 풀어봤어요.
포장 담당과 배송 기사가 같은 상자를 동시에 집으려고 해요.누가 먼저 집을지 정하지 않으면 두 사람이 부딪혀요.
두 사람이 동시에 수량을 고치면 한쪽 기록이 지워져요.기록이 지워지지 않게 막는 규칙이 '병행제어'예요.
병행제어 = 동시에 손대도 안 부딪히게 막는 규칙이에요.상자를 잠그거나, 작업 순서를 매기거나, 버전을 따로 보여줘요.
비관적 잠금상자를 미리 잠가 충돌을 막아요
낙관적 제어일단 고치고 나중에 충돌을 확인해요
타임스탬프 순서시작 시각으로 작업 순서를 매겨요
MVCC(다중 버전)각자에게 데이터 스냅샷을 보여줘요
병행제어의 대표 방법은 네 가지예요.MVCC는 읽기와 쓰기가 서로 막지 않아요.
잠금으로 데이터를 안전하게 지킬수록 뒷사람의 기다림이 늘어요.잠금 방식과 격리 수준이 함께 안전과 속도의 균형을 정해요.
한 줄로
병행제어 = 여러 사람이 동시에 같은 데이터를 손대도 부딪히지 않게 잠그거나 순서를 매기는 규칙.
병행제어는 여러 트랜잭션이 동시에 실행될 때 정합성을 지키기 위한 기법으로, 비관적 잠금(2단계 잠금 등), 낙관적 동시성 제어, 타임스탬프 순서 지정, MVCC(다중 버전 동시성 제어) 등이 있어요. ACID의 Isolation을 실제로 구현하는 방법이고, 어떤 방법을 쓰느냐에 따라 격리 수준과 성능이 달라져요.
어른들은 이렇게 불러요
- 비관적 잠금(Locking)
Pessimistic Locking - 미리 상자를 잠가두는 것. 2단계 잠금(2PL)이 대표적이에요.
- 낙관적 동시성 제어
Optimistic Concurrency Control - 일단 해보고 나중에 충돌을 확인하는 것. 충돌이 드문 환경에서 빨라요.
- 타임스탬프 순서 지정
Timestamp Ordering - 시작 시각으로 처리 순서를 매기는 것. 먼저 온 순서를 지켜요.
- MVCC
MVCC - 각자에게 스냅샷을 보여주는 것. 읽기가 쓰기를 막지 않아요.
- 데드락(교착상태)
Deadlock - 서로의 자물쇠를 기다리며 멈추는 것. 순환 대기가 생기면 발생해요.
- 격리 수준
Isolation Level - 동시 작업을 얼마나 엄격히 막을지 정하는 단계. 병행제어 방법이 이 수준을 실현해요. → 동시에 손댈 때 얼마나 가려 볼지
- ACID
ACID - 전표가 지키는 네 가지 약속. 병행제어는 그중 Isolation을 지켜줘요. → 전표가 지키는 네 약속
- 합의(Consensus)
Consensus - SRE 분야의 여러 서버가 뜻을 맞추는 이야기. 여러 서버가 같은 값에 동의해야 할 때는 합의 알고리즘을 써요. → 합의(Consensus)
다음 이야기
깊은 선반 대신 바로 꺼내는 특급 출고대 →