다음 문제를 풀어보세요.


17.70 트랜잭션 T1, T2, T3에 대하여 스케줄 s1, s2 중에서 충돌 직렬 가능한 (conflict serializable) 것은?


T1: r1(x); r1(z); w1(x);

T2: r2(z); r2(y); w2(z);

T3: r3(x); r3(y); w3(y);


s1: r1(x); r2(z); r1(z); r3(x); r3(y); w1(x); w3(y); r2(y); w2(z);

s2: r1(x); r2(z); r3(x); r1(z); r2(y); r3(y); w1(x); w2(z); w3(y);



1. s1  

2. s2  

3. s1, s2  

4. 없음




충돌직렬(Conflict serializability)


충돌직렬가능성의 정의는 아래와 같습니다.


동일한 데이터 Q에 대해 접근하는 트랜잭션 Ti, Tj의 내부의 연속적인 연산이 Ii, Ij일 경우


Ii = read(Q), Ij = read(Q) : 비충돌

Ii = read(Q), Ij = write(Q) : 충돌

Ii = write(Q), Ij = read(Q) : 충돌

Ii = write(Q), Ij = write(Q) : 충돌


즉, 서로 다른 트랜잭션에서 동일한 자원에 대해 연속적으로 읽기 / 읽기를 제외한 쓰기(write)가 하나라도 발생하면 충돌입니다. (읽기/쓰기, 쓰기/읽기, 쓰기/쓰기) 이런 충돌이 순환 사이클을 그리는 경우을 말합니다.




낮은 단계(하위 수준) 고립성 수준에서 발생하는 현상들


부정판독(Dirty Read)


다른 트랜잭션에 의해 커밋(commit)되지 않은 수정된 데이터를 참조하는 것을 의미한다. 수정을 가한 트랜잭션이 롤백(Rollback)되면 그 데이터를 참조한 트랜잭션은 일관되지 않은 상태에 놓이게 된다.



비반복 가능 판독(Non-Repeatable Reads)


한 트랜잭션에서 같은 데이터를 두번 이상 읽을 때, 그 중간에 다른 트랜잭션이 값을 갱신하거나 삭제함으로 읽은 값들이 서로 다르게 되는 현상이다.



팬텀판독(Phantom Read)


한 트랜잭션에서 같은 데이터를 두번 이상 읽을때, 그 중간에 다른 트랜잭션이 값을 추가함으로써 처음 데이터를 읽을때 없던 유령(Phantom) 레코드가 나타나는 현상이다. 

 




트랜잭션 고립성 수준(Transaction Isolation Level) - ANSI/ISO SQL 표준으로 정의



판독 비완료(Read Uncommitted)


커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다.



판독 완료(Read Committed)


트랜잭션이 커밋되어 완료된 데이터만 다른 트랜잭션이 읽도록 허용함으로써 부정판독(Dirty Read)를 방지해 준다.


반복 가능 판독(Repeatable Read)


오직 완료된 레코드만이 읽혀질 수 있으며, 같은 레코드의 반복적인 판독은 동일한 값을 반환한다. 즉, 첫번째 있던 레코드가 삭제되거나 값이 갱신되는 현상을 방지함으로써 비반복 가능판독(Non-Repeatable Read)를 방지해 준다.


직렬 가능(Serializable)


오직 완료된 레코드만이 읽혀질 수 있으며, 같은 레코드의 반복적인 판독은 동일한 값을 반환한다. 즉, 첫번째 있던 레코드가 삭제되거나 값이 갱신되는 현상을 방지함으로써 비반복 가능판독(Non-Repeatable Read)를 방지해 준다. 또한 새로운 레코드가 나타나지도 않음으로써, 팬텀 판독(Phantom Read)도 방지해 준다.


 

감리사문제)

SQL 1992(SQL2) 4가지 격리 수준(isolation level) 중에서 한 트랜잭션 내에서 동일한 데이터를 두 번 읽을 때서로 다른 값을 읽는 경우가 발생할 수 있는 격리 수준을 모두 고르시오. (2개 선택)


1. Read committed            

2. Serializable     

3. Repeatable read           

4. Read uncommitted


+ Recent posts