트랜잭션 T1과 T2가 병행 수행될 때, 정확한 결과를 보장할 수 있는… | [7급 국가직 데이터베이스론] 22년 1회차 기출문제 상세 페이지
1[7급 국가직 데이터베이스론] 22년 1회차
트랜잭션 T1과 T2가 병행 수행될 때, 정확한 결과를 보장할 수 있는 스케줄만을 모두 고르면? (단, 두 트랜잭션 수행 전 A와 B의 값은 각각 50이다)ㄱ.
T1 T2 read(A) A := A×2 write(A) read(B) B := B×2 write(B) read(A) A := A+100 write(A) read(B) B := B+100 write(B)
ㄴ.
T1 T2 read(A) A := A+100 read(A) A := A×2 write(A) write(A) read(B) B := B×2 read(B) B := B+100 write(B) write(B)
ㄷ.
T1 T2 lock(A) read(A) A := A+100 write(A) unlock(A) lock(A) read(A) A := A×2 write(A) unlock(A) lock(B) read(B) B := B×2 write(B) unlock(B) lock(B) read(B) B := B+100 write(B) unlock(B)
ㄹ.
T1 T2 lock(A) read(A) A := A+100 write(A) lock(B) unlock(A) lock(A) read(A) A := A×2 write(A) read(B) B := B+100 write(B) unlock(B) lock(B) unlock(A) read(B) B := B×2 write(B) unlock(B)
1
ㄱ, ㄴ
2
ㄱ, ㄹ
3
ㄴ, ㄷ
4
ㄷ, ㄹ
해설
정확한 결과를 보장하는 스케줄은 ㄱ, ㄹ이다. 직렬 수행 결과는 T1 후 T2이면 A=B=300, T2 후 T1이면 A=B=200이다.
ㄱ은 T2 후 T1을 수행하는 직렬 스케줄로 A=B=200이다. ㄹ은 T1이 B의 로크를 얻은 뒤에야 A를 해제하는 2단계 로킹을 지켜 A=150→300, B=150→300으로 T1 후 T2 직렬 결과와 같다.
- ㄴ: T1과 T2가 모두 A=50, B=50을 읽어 한쪽 갱신이 덮어써지는 갱신 손실이 생기고 A=150, B=100이 된다.
- ㄷ: 로크를 쓰지만 항목마다 바로 해제해 A는 T1 후 T2(300), B는 T2 후 T1(200) 순으로 섞여 직렬 결과와 다르다.
오류나 개정된 내용이 보이면 알려주세요