개념 사전 · 개념

트랜잭션과 MVCC

Transaction · 트랜잭션

은 관련 조회와 변경을 하나의 성공·실패 단위로 묶는 데이터베이스 처리 경계이다. MVCC는 행 버전과 스냅샷으로 동시 작업의 가시성을 관리하는 방식이며 세부 규칙은 DBMS와 격리 수준에 따라 다르다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 여러 변경을 함께 확정하거나 함께 취소한다.
  • 동시 요청이 볼 수 있는 데이터 범위를 격리 수준으로 관리한다.
  • 잠금·조건부 갱신·제약과 함께 갱신 경쟁을 처리한다.

02어떤 순서로 동작하나

  1. 업무 단위 시작

    을 시작하고 업무의 성공 조건과 필요한 조회·변경을 정한다.

  2. 조건부 변경

    재고가 충분한지 같은 조건을 데이터베이스의 실제 갱신과 결합하며 경쟁 요청이 있으면 대기나 충돌이 생길 수 있다.

  3. 결과 판정

    변경 행 수와 후속 작업 성공을 확인하고 실패·충돌이면 DBMS 상태 규칙에 맞게 롤백한다.

  4. 확정 또는 재시도

    모든 조건이 만족되면 커밋한다. 재시도가 필요한 오류는 전체 업무 단위와 외부 부작용을 고려해 처리한다.

03먼저 알아둘 용어와 구성요소

은 여러 변경을 한 논리 단위로 묶어 COMMIT 또는 ROLLBACK한다.
원자성은 전체 변경의 확정 또는 취소, 일관성은 제약·업무 규칙의 유지, 격리는 동시 작업의 관찰 범위, 지속성은 확정한 변경의 보존을 뜻한다. 실제 보장은 엔진·설정·장애 모델과 함께 읽는다.
MVCC는 행 버전과 가시성 규칙을 이용한다. 여기의 예에서 SELECT는 스냅샷에 보이는 버전과 자기 의 변경을 읽으며 다른 세션의 미커밋 변경은 읽지 않는다. 다른 DBMS의 격리 수준 규칙까지 일반화하지 않는다.
의 에서 보통 SELECT는 각 명령 시작 시점까지 커밋된 자료를 본다. 같은 의 두 SELECT 사이 다른 세션이 커밋하면 결과가 달라질 수 있다.
에서 UPDATE가 다른 이 변경 중인 행을 만나면 기다릴 수 있다. 상대가 커밋하면 새 행 버전에 WHERE 조건을 다시 평가한다.
는 의 첫 비제어 문장에서 잡은 스냅샷을 사용한다. 다른 엔진에 격리 수준 이름만으로 모든 세부 규칙을 일반화하지 않으며 충돌 시 전체 재시도를 고려한다.

04예제로 따라가기

  • 재고 차감은 성공했지만 주문 기록이 실패하면 한 으로 묶은 변경을 롤백하여 두 자료가 어긋난 최종 상태를 막는다.
  • 에서 두 세션이 재고 1개를 조건부 차감하면 후발 UPDATE는 기다린 뒤 최신 행의 조건을 다시 평가하여 0행 변경이 될 수 있다.
  • 같은 격리 수준의 두 SELECT 사이 다른 세션이 커밋하면 두 결과가 달라질 수 있다. 이 규칙을 모든 DB와 격리 수준에 일반화하지 않는다.

05혼동하기 쉬운 점과 확인 기준

  • SELECT로 재고를 읽고 나중에 무조건 감소시키는 방식은 두 사용자가 같은 재고를 보고 경쟁할 수 있다. 잠금·MVCC·격리 수준과 재시도 설계가 이 문제에 관여한다.
  • deadlock으로 한 이 중단되었다면 전체 업무 단위를 적절히 다시 시도해야 한다.
  • 라는 약어를 붙였다는 이유로 잘못된 업무 코드를 DB가 자동 교정하지는 않는다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.