Database/Mysql

[Real MySQL] 5-2. 트랜잭션과 잠금

noahkim_ 2024. 8. 10. 17:44

"Real MySQL" 책을 정리한 포스팅 입니다.

 

4. 격리 수준

  • 특정 트랜잭션이 얼마나 독립적으로 실행될 수 있는지 정의 (여러 트랜잭션이 동시에 처리될 때)
    • 다른 트랜잭션의 중간 결과에 얼마나 영향을 안받을 지
    • 다른 트랜잭션에서 변경한 데이터를 얼마나 볼 수 있게 허용할지
  • 뒤로갈수록 고립도는 높아지고, 동시성과 성능이 떨어집니다.

 

READ UNCOMMITTED

  • Dirty Read 허용
  • 동시성 & 성능 높음
  • 데이터 일관성  & 정합성 보장 X (일반적인 DBMS에서 사용 X)

 

Dirty Read
  • 다른 트랜잭션에서 커밋되지 않은 트랜잭션 내용 읽기 O

 

READ COMMITTED

  • 다른 트랜잭션에서 커밋된 트랜잭션 내용만 읽기 O
  • 균형 좋음 (동시성 & 성능 - 데이터 일관성 & 정합성)
  • 데이터 일관성 문제 (NON-REPEATABLE READ, Panthom Read)

 

NON-REPEATABLE READ
  • 트랜잭션 내 동일한 데이터에 대해 조회 결과가 다른 상황
  • example
    • Transaction A: (id = 1) member 테이블 행 읽음
    • Transaction B: (id = 1) member 테이블 행 컬럼 수정 + 커밋
    • Transaction A: (id = 1) member 테이블 행 읽음
    • => 데이터 다름

 

Phantom Read
  • 트랜잭션 내 동일한 데이터에 대해 결과 건수가 다른 상황
  • example
    • Transaction A: (id = 1) member 테이블 행 읽음
    • Transaction B: (id = 1) member 테이블 행 삭제 or 추가 + 커밋
    • Transaction A: (id = 1) member 테이블 행 읽음
    • => 데이터 사라짐

 

REPEATABLE READ

  • 다른 트랜잭션에서 커밋된 트랜잭션 내용만 읽기 O + 해당 트랜잭션에서 모든 데이터 동일하게 유지됨
  • 기본 격리 수준 (InnoDB)
  • 데이터 일관성 문제 (Panthom Read)
    • InnoDB: Phantom Read X (갭 락 + 넥스트 키 락)

 

SERIALIZABLE

  • 한 트랜잭션에서 읽고 쓰는 레코드를 다른 트랜잭션에서 절대 접근 불가
  • 데이터 일관성 문제 X
  • 동시성 & 성능 낮음