솜은 코튼

[DB] 트랜잭션 스케줄 (뷰 직렬 가능 스케줄) 본문

DB

[DB] 트랜잭션 스케줄 (뷰 직렬 가능 스케줄)

솜.코 2023. 6. 2. 20:47

2023.06.02 - [DB] - [DB] 트랜잭션 스케줄

 

[DB] 트랜잭션 스케줄

2023.06.02 - [DB] - [DB] 병행 제어 (동시 공용 문제점) [DB] 병행 제어 (동시 공용 문제점) 병행 제어 . 복수 사용자 DBMS는 병행성을 지원하며, 병행성은 몇 개의 트랜잭션들을 동시에 실행시키는 것이다

sommda.tistory.com

 

 

뷰 동등과 뷰 직렬 가능 스케줄

 

두 스케줄 S와 S'에 포함된 트랜잭션들이 모두 같고 다음 조건을 만족하면

스케줄 S와 S'는 '뷰 동등'이라 한다.

 

1 각 데이터 아이템 x에 대해 스케줄 S에서 x의 초기값을 Ti가 읽는다면
스케줄 S'에서도 x의 초기값을 T1가 읽어야 한다.
2 스케줄 S에서 트랜잭션 Ti가 수행하는 모든 read(x) 연산이 x값이
트랜잭션 Tj가 수행한 write(x) 연산으로 생성된 값이라면
스케줄 S'에서도 Ti가 수행하는 모든 read(x) 연산의 x값이
트랜잭션 Tj의 write(x) 연산으로 생성된 값이어야 한다.
3 스케줄상에서 write(X) 연산이 수행되는 각 데이터 아이템 x에 대해,
스케줄 S에서 Ti가 write(x)를 마지막으로 실행하면
스케줄 S에서 Ti가 write(X)를 마지막으로 실행하면
스케줄 S'에서도 Ti가 write(x)를 마지막으로 실행해야 된다.

 

위의 조건 1과 2는 각 트랜잭션이 두 스케줄에서 똑같은 값을 읽는다는 것을 보장하고,

조건 3은 조건 1과 2와 함께 두 스케줄이 모두 똑같은 데이터베이스 상태를

결과로 생성한다는 것을 보장한다는 것이다.

 

뷰 동등성은 두 스케줄에서 모두 데이터를 읽을 때는 같은 데이터 값을 읽어야 되고

기록할 떄도 같은 데이터 값을 기록해야 되는데

이렇게 되면 똑같은 뷰를 갖게 된다는 것이다.

 

 

이 정의를 따르면 앞의 그림 '비직렬 스케줄'은 그림 '직렬 스케줄'의 (a)와 동등하다.

T2의 read(x)와 read(y)는 T1이 수행한 write(x)와 write(y)값을 읽고 있고,

T2는 이 두 스케줄에서 x와 y를 최종적으로 기록한 트랜잭션이기 때문이다.

 

스케줄 S에 대해 뷰 동등한 직렬 스케줄 S'이 존재할 때

스케줄 S를 '뷰 직렬 가능 스케줄'이라 한다.

 

 

 

위의 스케줄은 직렬 스케줄 <T3, T4, T5>와 뷰 동등하기 때문에 뷰 직렬 가능 스케줄이다.

T3의 read(x) 연산은 두 스케줄 모두에서 초기의 값을 읽고 있고

T5의 write(x)는 두 스케줄 모두에서 마지막 기록 연산이 되기 때문이다.

모든 충돌 직렬 가능 스케줄은 뷰 직렬 가능이다.

그러나 역은 성립되지 않는다.

 

예로 위의 스케줄은 뷰 직렬 가능이지만 충돌 직렬 가능은 아니다.

T4나 T5의 write(x) 연산은 먼저 read(x) 연산을 실행하지 않고 수행된다.

이런 종류의 연산을 '맹목 연산'이라 하며

이 맹목 연산은 충돌 직렬 가능이 아닌 뷰 직렬 가능 스케줄에 나타난다.

 

 

 

 

 

 

 

 

* 해당 글은 '데이터베이스 시스템' 책을 참고하여 작성하였습니다. 출처: 데이터베이스 시스템 (이석호)

* 참고 사이트: https://rebro.kr/164