개념 사전 · 개념
트랜잭션과 MVCC
Transaction · 트랜잭션
은 관련 조회와 변경을 하나의 성공·실패 단위로 묶는 데이터베이스 처리 경계이다. MVCC는 행 버전과 스냅샷으로 동시 작업의 가시성을 관리하는 방식이며 세부 규칙은 DBMS와 격리 수준에 따라 다르다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 여러 변경을 함께 확정하거나 함께 취소한다.
- 동시 요청이 볼 수 있는 데이터 범위를 격리 수준으로 관리한다.
- 잠금·조건부 갱신·제약과 함께 갱신 경쟁을 처리한다.
02어떤 순서로 동작하나
- 업무 단위 시작
을 시작하고 업무의 성공 조건과 필요한 조회·변경을 정한다.
- 조건부 변경
재고가 충분한지 같은 조건을 데이터베이스의 실제 갱신과 결합하며 경쟁 요청이 있으면 대기나 충돌이 생길 수 있다.
- 결과 판정
변경 행 수와 후속 작업 성공을 확인하고 실패·충돌이면 DBMS 상태 규칙에 맞게 롤백한다.
- 확정 또는 재시도
모든 조건이 만족되면 커밋한다. 재시도가 필요한 오류는 전체 업무 단위와 외부 부작용을 고려해 처리한다.
03먼저 알아둘 용어와 구성요소
- 은 여러 변경을 한 논리 단위로 묶어 COMMIT 또는 ROLLBACK한다.
- 원자성은 전체 변경의 확정 또는 취소, 일관성은 제약·업무 규칙의 유지, 격리는 동시 작업의 관찰 범위, 지속성은 확정한 변경의 보존을 뜻한다. 실제 보장은 엔진·설정·장애 모델과 함께 읽는다.
- MVCC는 행 버전과 가시성 규칙을 이용한다. 여기의 예에서 SELECT는 스냅샷에 보이는 버전과 자기 의 변경을 읽으며 다른 세션의 미커밋 변경은 읽지 않는다. 다른 DBMS의 격리 수준 규칙까지 일반화하지 않는다.
- 의 에서 보통 SELECT는 각 명령 시작 시점까지 커밋된 자료를 본다. 같은 의 두 SELECT 사이 다른 세션이 커밋하면 결과가 달라질 수 있다.
- 에서 UPDATE가 다른 이 변경 중인 행을 만나면 기다릴 수 있다. 상대가 커밋하면 새 행 버전에 WHERE 조건을 다시 평가한다.
- 는 의 첫 비제어 문장에서 잡은 스냅샷을 사용한다. 다른 엔진에 격리 수준 이름만으로 모든 세부 규칙을 일반화하지 않으며 충돌 시 전체 재시도를 고려한다.
04예제로 따라가기
- 재고 차감은 성공했지만 주문 기록이 실패하면 한 으로 묶은 변경을 롤백하여 두 자료가 어긋난 최종 상태를 막는다.
- 에서 두 세션이 재고 1개를 조건부 차감하면 후발 UPDATE는 기다린 뒤 최신 행의 조건을 다시 평가하여 0행 변경이 될 수 있다.
- 같은 격리 수준의 두 SELECT 사이 다른 세션이 커밋하면 두 결과가 달라질 수 있다. 이 규칙을 모든 DB와 격리 수준에 일반화하지 않는다.
05혼동하기 쉬운 점과 확인 기준
- SELECT로 재고를 읽고 나중에 무조건 감소시키는 방식은 두 사용자가 같은 재고를 보고 경쟁할 수 있다. 잠금·MVCC·격리 수준과 재시도 설계가 이 문제에 관여한다.
- deadlock으로 한 이 중단되었다면 전체 업무 단위를 적절히 다시 시도해야 한다.
- 라는 약어를 붙였다는 이유로 잘못된 업무 코드를 DB가 자동 교정하지는 않는다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.