다섯 살도 알 수 있게 · DB/데이터

데이터베이스 병행제어가 뭐예요?

병행제어를, 포장 담당과 배송 기사가 같은 상자를 동시에 집으려다 부딪히는 이야기로 풀어봤어요.

포장 담당과 배송 기사가 동시에 같은 상자를 집으려고 해요누가 먼저 집을지 정하지 않으면 두 사람이 부딪혀요

포장 담당과 배송 기사가 같은 상자를 동시에 집으려고 해요.누가 먼저 집을지 정하지 않으면 두 사람이 부딪혀요.

두 사람이 동시에 수량을 고치면 한쪽 기록이 지워져요기록이 지워지지 않게 막는 규칙이 '병행제어'예요

두 사람이 동시에 수량을 고치면 한쪽 기록이 지워져요.기록이 지워지지 않게 막는 규칙이 '병행제어'예요.

줄 서서 차례로스냅샷을 따로 보여주기(MVCC)병행제어 = 동시에 손대도 안 부딪히게 막는 규칙상자를 잠그거나, 작업 순서를 매기거나, 버전을 따로 보여줘요

병행제어 = 동시에 손대도 안 부딪히게 막는 규칙이에요.상자를 잠그거나, 작업 순서를 매기거나, 버전을 따로 보여줘요.

비관적 잠금상자를 미리 잠가 충돌을 막아요
낙관적 제어일단 고치고 나중에 충돌을 확인해요
타임스탬프 순서시작 시각으로 작업 순서를 매겨요
MVCC(다중 버전)각자에게 데이터 스냅샷을 보여줘요
병행제어 대표 방법 네 가지비관적 잠금(Locking) — 상자 미리 잠가두기충돌을 원천 차단낙관적 제어 — 일단 고치고 나중에 충돌 확인충돌 드물 때 빠름타임스탬프 순서 — 시작 시각으로 순서 매김먼저 온 순서대로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)
다음 이야기
깊은 선반 대신 바로 꺼내는 특급 출고대 →
다른 용어도 그림책으로 보고 싶다면 요청하기 →