백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다.
4. 격리 수준
여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 얼마나 독립적으로 실행될 수 있는지 정의
- 다른 트랜잭션의 중간 결과에 얼마나 영향을 안받을 지
- 다른 트랜잭션에서 변경한 데이터를 얼마나 볼 수 있게 허용할지
- 뒤로갈수록 고립도는 높아지고, 동시성과 성능은 떨어집니다.
READ UNCOMMITTED
- 동시성 & 성능 높음
- 데이터 일관성 & 정합성 보장 X
- Dirty Read 허용
- 일반적인 DBMS에서 사용 X
Dirty Read
- 다른 트랜잭션에서 커밋되지 않은 트랜잭션 내용 읽기 가능
READ COMMITTED
- 다른 트랜잭션에서 커밋된 트랜잭션 내용만 읽기 가능
- 균형 좋음 (동시성 & 성능 - 데이터 일관성 & 정합성)
- 데이터 일관성 문제 존재 (NON-REPEATABLE READ, Panthom Read)
NON-REPEATABLE READ
- 트랜잭션 내 동일한 데이터에 대해 조회 결과가 다른 상황
Transaction A: (id = 1) member 테이블 행 읽음 10
Transaction B: (id = 1) member 테이블 행 컬럼 수정 + 커밋 10 -> 20
Transaction A: (id = 1) member 테이블 행 읽음 20
=> 두번째 조회에서는 첫번째 조회와 다른 값이 반환됨
Phantom Read
- 트랜잭션 내 동일한 데이터에 대해 결과 건수가 다른 상황
Transaction A: (id = 1) member 테이블 행 읽음 1, 2, 3, 4
Transaction B: (id = 1) member 테이블 행 삭제 or 추가 + 커밋 1, 2, 3 (4 삭제)
Transaction A: (id = 1) member 테이블 행 읽음 1, 2, 3
=> 두번째 조회에서는 첫 번째 조회와 다른 데이터 수가 반환됨 (데이터 삭제됨)
REPEATABLE READ
- 다른 트랜잭션에서 커밋된 트랜잭션 내용만 읽기
- 해당 트랜잭션에서 모든 데이터 동일하게 유지됨
- 기본 격리 수준 (InnoDB)
Panthom Read 문제 방지
- InnoDB에서는 갭락과 넥스트 키 락을 사용하여 Panthom Read를 방지함
- 범위 내에서 다른 트랜잭션이 데이터 수정이나 삽입을 못하도록 함
SERIALIZABLE
- 한 트랜잭션에서 읽고 쓰는 레코드를 다른 트랜잭션에서 절대 접근 불가
- 데이터 일관성 문제 X
- 동시성 & 성능 낮음
'Database > Mysql' 카테고리의 다른 글
[Real MySQL] 8-8. 인덱스: 클러스터링 인덱스 (0) | 2024.09.07 |
---|---|
[Real MySQL] 8-9. 인덱스: 유니크 인덱스 (0) | 2024.09.07 |
[Real MySQL] 15-4. 데이터 타입: JSON (0) | 2023.11.26 |
[Real MySQL] 15-3. 데이터 타입: 날짜와 시간 (0) | 2023.11.26 |
[Real MySQL] 15-2. 데이터 타입: 숫자 (0) | 2023.11.26 |