Isolation level

LEE YUJIN·2023년 10월 6일
0

트랜잭션

목록 보기
4/4

Race Condition

여러 클라이언트가 같은 데이터에 접근할 때 문제가 발생한다.

Isolation

트랜잭션을 서로 격리해서 다른 트랜잭션이 영향을 줄 수 없도록 한다.

동시성 관련 다양한 문제들

  • 커밋되지 않은 데이터 읽기 (dirty read)
  • 커밋되지 않은 데이터 덮어쓰기 (dirty write)
  • 읽는 동안 데이터 변경 1
    - read skew : 읽는 시점에 따라 데이터 변경
  • 읽는 동안 데이터 변경 2
    - 한 트랜잭션의 결과가 다른 트랜잭션의 쿼리 결과에 영향
  • 변경유실 (lost update)
    - 같은 데이터를 쓸 때 발생

Isolation Level (격리 수준)

1. Read Uncommitted

2. Read Committed

  • 가장 기본적인 격리 수준
  • 커밋된 데이터만 읽기 (dirty read 없음)
구현 -> 커밋된 값과 트랜잭션 진행 중인 값을 따로 보관
  • 커밋된 데이터만 덮어쓰기 (dirty write 없음)
구현 -> 행(record) 단위 잠금(lock) 사용해서 같은 데이터를 수정하는 트랜잭션이 끝날 때 까지 대기

3. Repeatable Read

  • 트랜잭션 동안 같은 데이터를 읽게 함 (read skew 방지)
구현 -> MVCC(Multi-Version Concurrency Control)
읽는 시점에 특정 버전에 해당하는 데이터만 읽음

4. Serializable

  • index 잠금이나 조건기반 잠금 등 사용

참고
https://www.youtube.com/watch?v=poyjLx-LOEU
https://medium.com/@10x.developer.kr/db-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EA%B2%A9%EB%A6%AC-%EC%88%98%EC%A4%80-%EA%B7%B8%EB%A6%BC%EA%B3%BC-%EC%98%88%EC%8B%9C%EB%A1%9C-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1%ED%8E%B8-5bef68de8b7b

profile
개발 공부노트

0개의 댓글