티스토리 뷰
낮은 단계의 격리성 수준에서 발생할 수 있는 현상들
1. Dirty Read
- 다른 트랜잭션에 의해 수정됐지만 아직 커밋되지 않은 데이터를 읽는 것을 말함.
- 변경 후 아직 커밋되지 않은 값을 읽었는데 변경을 가한 트랜잭션이 최종적으로 롤백된다면 그 값을 읽은 트랜잭션은 비일관된 상태에 놓이게 됨.
2. Non-Repeatable Read
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상.
3. Phantom Read
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령(Phantom) 레코드가 두 번째 쿼리에서 나타나는 현상을 말함.
트랜잭션 격리성 수준
1. Read Uncommitted
- 트랜잭션에서 처리 중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용함.
2. Read Committed
- 트랜잭션이 커밋되어 확정된 데이터만 다른 트랜잭션이 읽도록 허용함으로써 Dirty Read를 방지해줌.
- 커밋된 데이터만 읽더라도 Non-Repeatable Read와 Phantom Read 현상을 막지는 못함.
- 읽는 시점에 따라 결과가 다를 수 있음.
3. Repeatable Read
- 트랜잭션 내에서 쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지해 줌.
- 이 트랜잭션 격리성 수준이 Phantom Read 현상을 막지는 못함.
- 첫 번째 쿼리에서 없던 새로운 레코드가 나타날 수 있음.
4. Serializable Read
- 트랜잭션 내에서 쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌지 않음은 물론 새로운 레코드가 나타나지도 않음.
레벨 | Dirty Read | Non-Repeatable Read | Phantom Read |
Read Uncommited | 가능 | 가능 | 가능 |
Read Committed | 불가능 | 가능 | 가능 |
Repeatable Read | 불가능 | 불가능 | 가능 |
Serializable Read | 불가능 | 불가능 | 불가능 |
- 트랜잭션 경리성 수준은 ISO에서 정한 분류 기준일 뿐이며, 모든 DBMS가 4가지 레벨을 다 지원하지는 않음.
- 대부분 DBMS가 Read Committed를 기본 트랜잭션 격리성 수준을 채택하고 있으므로 Dirty Read가 발생할까 걱정하지 않아도 되지만, Non-Repeatable Read, Phantom Read 현상에 대해선 세심한 주의가 필요함.
- 그런 현상이 발생하지 않도록 DBMS 제공 기능을 이용할 수 있지만, 많은 경우 개발자가 직접 구현해 주어야 하기 때문.
[출처] SQL 전문가 가이드
- Total
- Today
- Yesterday
- 비동기
- 프로그래머스 Level 3
- 스택/큐
- 해시
- a
- Handler Interceptor
- 블로킹
- 프로그래머스
- 동기
- http://www.nextree.co.kr/p6960/
- 핸들러 인터셉터
- blocking
- 논블로킹
- 프로그래머스 Level 1
- 인터셉터
- Synchronous
- 코딩테스트 고득점 Kit
- Filter
- non-blocking
- 필터
- Asynchronous
- 프로그래머스 Level 2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |