데이터베이스

2단계 로킹 규약(2 phase locking protocol), 공유로크 shared lock, 배타적로크 exclusive lock, 2PL

스윙스윙 2021. 9. 3. 21:19

▣ 2단계 로킹 규약(2 phase locking protocol)

 - 직렬 가능성을 보장할 수 있는 규약으로 모든 트랜잭션들이 lock와 unlock연산을

   다음과 같이 두 단계로 구분하여 실행해야 함

확장단계
(Growing Phase)
트랜잭션은 새로운 lock 연산만 실행가능, unlock 연산 실행 불가
축소단계
(Shrinking Phase)
트랜잭션은 새로운 unlock 연산만 실행 가능, 일단 unlock 연산을 실행하면
lock 연산 더 이상 실행 불가

- Read Lock(읽기 로크) : 항목 X에 ReadLock을 수행한 경우, 다른 트랜잭션의 ReadLock은 허용함, Shared Lock(공유 로크)라고도 하며, WriteLock은 허용하지 않음 / 다른 트랜잭션에서 ReadLock이 없는 경우에 한해서 WriteLock로 로크 상승 가능함

 

- Write Lock(쓰기 로크) : 항목 X에 WriteLock을 수행한 경우, 다른 트랙잭션의 ReadLock, WriteLock 모두 허용하지 않음. 그래서, Exclusive lock(배타적 로크)라고도 하며, 언제라도 ReadLock로 로크 하강 가능함

 


2012년 68번

정답 : 3번

엄격한(strict) 2PL과 엄밀(rigorous) 2PL은 모두 교착상태를 피할 수 없음


 

1) 항목 X에 read_lock(X)를 수행하여 공유 로크를 획득한 후 나중에 write_lock(X)를 수행하여 배타적 로크로 로크를 상승(upgrade)시킬 수 있다. (맞음)

 

2) 항목 X에 write_lock(X)를 수행하여 배타적 로크를 획득한 후 나중에 read_lock(X)를 수행하여 공유로크로 로크를 상승 시킬 수 있다.

 -> write_lock(X)을 수행한 경우, 다른 트랜잭션의 readlock, writelock 모두 허용하지 않음 그래서, Exclusive lock(배타적 로크)라고도 하며, 언제라도 ReadLock로 로크 하강 가능함

 

3) 항목 X에 read_lock(X)를 수행하여 공유 로크를 획득한 후 나중에 write_lock(X)를 수행하여 배타적 로크로 로크를 하강(downgrade) 시킬 수 있다.

-> 다른 트랜잭션에서 ReadLock이 없는 경우에 한해서 WriteLock로 로크 상승 가능함

 

4) 항목 X에 read_lock(X)를 수행하여 배타적 로크를 획득한 후 나중에 write_lock(X)를 수행하여 공유로크로 로크를 하강시킬 수 있다.

-> 항목 X에 ReadLock을 수행한 경우, 다른 트랜잭션의 ReadLock은 허용함, Shared Lock(공유 로크)라고도 하며, WriteLock은 허용하지 않음. 다른 트랜잭션에서 ReadLock이 없는 경우에 한해서 WriteLock로 로크 상승 가능함