반응형
격리 수준
- DB가 트랜잭션 간 동시 작업을 격리하는 수준 (level)
- 동시에 여러 트랜잭션이 동일 컬럼, 로우, 테이블에 읽고 쓴다면?
- 예상하지 못한 데이터 이상 현상 발생 → 동시성 문제
- 데이터 정합성/무결성이 위배됨
- 따라서 DB는 4단계 트랜잭션 격리 수준 제공
Read Uncommitted
- 가장 낮은 격리 수준
- 트랜잭션이 커밋되지 않은 데이터를 다른 트랜잭션에서 읽을 수 있음
- 장점 성능이 가장 좋음
- 단점 데이터 일관성 보장 수준이 가장 낮음
Read Committed
- 트랜잭션 커밋된 데이터만 읽을 수 있음
- 다른 트랜잭션이 데이터를 수정하면 문제가 발생한다........
- 장점 Dirty Read 방지
- 단점 Non-Repeatable Read 가능 - 동일한 데이터를 읽어도 값이 달라짐
Repeatable Read
- 한 트랜잭션이 읽는 데이터는 종료될 때까지 다른 트랜잭션에서 수정, 삭제 X
- 새로운 행을 추가하거나 삽입은 가능 (새로운 데이터에 대해 방지하지 못함)
- 장점 Non-Repeatable Read 방지
- 단점 Phantom Read 가능
Serializable
- 가장 높은 격리 수준
- 트랜잭션이 순차적으로 실행
- 읽기 작업조차 락을 사용해 동시성 제한
- 장점 Phantom Read 방지, 완벽한 일관성
- 단점 성능 저하 가능성
문제 유형
Dirty Read
- 한 트랜잭션이 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 문제
- DB와 다른 데이터를 읽는 문제!!!!!!!!!!!!!!!
- 만약 다른 트랜잭션이 변경한 순간 데이터를 읽고 롤백하면 다른 데이터를 읽게 됨
Non-Repeatable Read
- 한 트랜잭션이 읽고 있는 데이터를 다른 트랜잭션에서 수정하거나 삭제하는 문제
- 읽고 있는데 수정함~~, 동일한 쿼리로 동일한 데이터를 조회했을 때 결과가 다름
Lost Update
- 두 트랜잭션이 동일한 데이터를 읽고 수정한 후 저장할 때, 한 트랜잭션의 업데이트가 손실되는 문제
- 낙관적 제어를 사용하는 경우 Repeatable Read에서도 발생할 수 있음
Phantom Read
- 동일 조건의 쿼리에서, 다른 트랜잭션에 의해 추가, 삭제된 행으로 인해 결과가 달라지는 문제
- Serializable 빼고 모두 발생할 수 있음
MySQL 기본 트랜잭션 격리 수준은 Read Committed
→ 따라서 별도 설정이 없는한 `Non-Repeatable Read`, `Lost Update`, `Phantom Read` 로 인한 동시성 문제가 발생할 수 있음
반응형
'공부' 카테고리의 다른 글
트랜잭션 격리 수준: Read Uncommitted 와 Read Committed의 차이 (0) | 2024.11.27 |
---|---|
프로그래밍 패러다임 (0) | 2024.02.02 |
8월 계획 (0) | 2022.07.26 |