"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
- 동시성 & 성능 낮음
'Database > Mysql' 카테고리의 다른 글
[Real MySQL] 8-0. 인덱스: Disk (0) | 2024.09.07 |
---|---|
[Real MySQL] 8-3. 인덱스: 유일성 (0) | 2024.09.07 |
[Real MySQL] 15-3. 데이터 타입: 날짜와 시간 (0) | 2023.11.26 |
[Real MySQL] 15-2. 데이터 타입: 숫자 (0) | 2023.11.26 |
[Real MySQL] 15-1. 데이터 타입: 문자열 (0) | 2023.11.26 |