▣ 동시성 제어_ 트랜잭션 격리 수준(isolation Level) 고립단계_갱신 분실 Lost Update, 부정판독 Dirty Read, 비반복판독 Non-Reatable Read, 가상 판독 Phantom Reads, 연쇄 복귀, 모순성 , 독립성 레벨, 병행수행도, 고립성
독립성 레벨 isolation Level |
부정 판독 (Dirty Read) |
비반복 판독 (Non-Reatable Read) |
팬텀 (Phantom Read) |
비고 |
L0. Read Uncommitted | O | O | O | shared lock(X) 아직 Commit되지 않은 데이터를 다른 트랜잭션에서 읽는 것 허용 |
L1. Read Committed | X | O | O | shared lock(O) 트랜잭션에서 commit되어 확정된 데이터만 다른 트랜잭션이 읽도록 허용함 |
L2. Repeatable Read | X | X | O | read동안 update/delete(X) 트랜잭션 내에서 쿼리를 두번 이상 수행할 때, 첫번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지해 줌 트랜잭션 완료시까지 shared lock을 유지 |
L3. Serializable Read | X | X | X | read동안 insert(X) 트랜잭션 내에서 쿼리를 두번 이상 수행할 때, 첫번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌지 않음은 물론 새로운 레코드 삽입도 방지 완벽한 데이터베이스 일관성 유지 |
독립성 레벨이 높을수록 간섭의 정도는 낮음(병행수행도 낮아짐)
Serializable < Repeatable < Read Committed < Read Uncommitted
높은 고립 수준(낮은 동시성) ↔ 낮은 고립 수준(높은 동시성)
* 암기키워드
Lost Update -> L.U 덮어쓰기 엎친데 덮친격(write 두번)
Dirty Read -> D.R Rollback
Non-Repeatable Read -> N.R 집계 U. D.
Phantom Read -> P.R 집계 I
▣ 병행 제어를 하지 않을 때의 문제점
- 갱신 손실(Lost Update) : 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상
- 비완료 의존성(Uncommitted Dependency) : 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상. 임시 갱신이라고도 한다.
- 모순성(Inconsistency) : 두 개의 트랜잭션이 병행수행될 때 원치 않는 자료를 이용함으로써 발생하는 문제. 불일치 분석이라고도 한다.
- 연쇄 복귀(Cascading Rollback) : 병행수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우 다른 트랜잭션도 함께 Rollback되는 현상
* 연쇄복귀(cascading rollback)는 부정판독(dirty read)과 유사함
부정판독은 완료되지 않은 데이터를 읽는 그 자체의 문제점을 의미하며,
연쇄복귀는 다른 트랜잭션의 취소(rollback)때문에 자신도 취소할 것인지 말 것인지에 대한 문제
* 모순성(inconsistency) : 트랜잭션 수행 시 값이 달라지는 모순성
두 트랜잭션이 인터리빙 되어 병행 수행될 때 원치 않는 자료를 이용함으로써 발생하는 현상
2014년 66번
정답 : 1번, 3번
동일한 트랜잭션에서 동일한 데이터를 조회할 경우, 같은 값이 나오기 위해서는 'REPEATABLE READ'가 보장되어야 함.
비반복적 읽기(Non-Repeatable Reads) 오류가 발생하지 않아야 함.
독립성 레벨 isolation Level |
부정 판독 (Dirty Read) |
비반복 판독 (Non-Reatable Read) |
팬텀 (Phantom Read) |
L0. Read Uncommitted | O | O | O |
L1. Read Committed | X | O | O |
L2. Repeatable Read | X | X | O |
L3. Serializable Read | X | X | X |
2013년 69번
정답 : 1번, 4번
독립성 레벨 isolation Level |
부정 판독 (Dirty Read) |
비반복 판독 (Non-Reatable Read) |
팬텀 (Phantom Read) |
비고 |
L0. Read Uncommitted | O | O | O | shared lock(X) 아직 Commit되지 않은 데이터를 다른 트랜잭션에서 읽는 것 허용 |
L1. Read Committed | X | O | O | shared lock(O) 트랜잭션에서 commit되어 확정된 데이터만 다른 트랜잭션이 읽도록 허용함 |
L2. Repeatable Read | X | X | O | read동안 update/delete(X) 트랜잭션 내에서 쿼리를 두번 이상 수행할 때, 첫번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지해 줌 트랜잭션 완료시까지 shared lock을 유지 |
L3. Serializable Read | X | X | X | read동안 insert(X) 트랜잭션 내에서 쿼리를 두번 이상 수행할 때, 첫번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌지 않음은 물론 새로운 레코드 삽입도 방지 완벽한 데이터베이스 일관성 유지 |
2011년 74번
정답 : 3번
2014년 69번
정답 : 1번
T2 데이터 조회 이후, T1의 Rollback이 진행되었으므로 '오손 데이터 읽기' 오류 발생함
2011년 69번
정답 : 1번
트랜잭션 T1에서 write(x) 수행한 값을 트랜잭션 T2에서 read(x)로 읽어서 사용하고 있으나,
‘00:00:07’에 T1 작업이 실패했으므로 write(x) 수행한 연산은 롤백(Rollback) 됨
다른 트랜잭션에서 철회 대상인 쓰기 연산 값을 트랜잭션 T2에서 사용했으므로
오손 읽기(Dirty Read) 문제가 발생
1) 트랜잭션 T1에서 수행하는 sum(price) 연산은 T2에서 이미 읽기/쓰기 연산이 실행된 상태
하지만, 트랜잭션 T1에서 독립성 레벨을 ‘Repeatable Read’로 설정하고 있으므로 읽기 연산
을 수행하는 동안 다른 트랜잭션에서 update/delete를 수행할 수 없음
T2에서 연산이 수행되기 전 값인 10,000을 읽어와서 비반복 판독(Non-Repeatable Read)을 방지
2) 트랜잭션 T2에서 수행하는 sum(price) 연산은 T1에서 조회 연산만 실행하므로,
T2에서 최종 쓰기 연산을 수행한 price = price+100 값인 10,100 값을 출력함
2017년 63번
선행 트랜잭션인 T1 에서 Write 한 x 값 갱신된 값 이 후행 트랜잭션인 T2 에서 Write(x) 로 인해
갱신 손실이 발생
2018년 67번
정답 : 2번
두 트랜잭션이 인터리빙 되어 병행 수행 될 때 원치 않는 자료를 이용함으로써 발생하는 현상
2018년 68번
정답 : 2번
트랜잭션 독립성 수준이 높을수록 간섭의 정도는 낮습니다. 즉, 병행 수행도가 낮아진다는 의미입니다.
병행 수행도가 낮다는 것은 트랜잭션 처리율도 낮다는 의미임
2019년 55번
정답 : 1번
2020년 59번
정답 : 4번
독립성 레벨 (isolation Level) |
부정 판독 (Dirty Read) |
비반복 판독 (Non-Reatable Read) |
팬텀 (Phantom Read) |
비고 |
L0. Read Uncommitted | Y | Y | Y | shared lock(X) |
L1. Read Committed | N | Y | Y | shared lock(O) |
L2. Repeatable Read | N | N | Y | read동안 update/delete(X) |
L3. Serializable Read | N | N | N | read동안 insert(X) |
2021년 64번
정답 : 1번
트랜잭션 T1에서 UPDATE 수행한 값을 트랜잭션 T2에서 읽어서 사용하고 있으나,
T1작업이 마지막에 ROLLBACK되고 있음.
다른 트랜잭션에서 철회 대상인 쓰기 연산 값을 트랜잭션 T2에서 사용했으므로
오손읽기(Dirty Read)문제 발생됨
'데이터베이스' 카테고리의 다른 글
뷰 (VIEW)에서 활용되는 WITH CHECK OPTION, SQL 검증 (0) | 2021.08.19 |
---|---|
관계대수 연산_실렉션, 프로젝션, 합집합, 카디션곱, 교집합, 조인, 디비전 (0) | 2021.08.13 |
GROUP BY, HAVING SQL 예제 1, 2명 이상의 학생, 성적평균 80점이상인 학과, 학과코드, 학과명, 학생수 (0) | 2021.08.13 |
ER모델, E-R 모델을 관계 데이터 모델로 사상_관계, 강한개체, 전체참여, 참조외래키, 부서, 직원 (0) | 2021.08.12 |
참조무결성 제약(ON DELETE RESTRICT, ON UPDATE CASCADE), 직원과 부서, 부서번호 삭제, 부서번호 업데이트, SQL (0) | 2021.08.11 |