동시성 제어(lock)
JeongSeulho
2025년 01월 16일
준비중...
클립보드로 복사
lock
lock이라는 개념을 도입하여 동시성 제어를 구현하는 방법
write lock
- 데이터를 쓰려면 먼저 쓰려는 데이터에 대해
write lock
을 획득해야 함 write lock
를 가지고 있는는 동안 다른 트랜잭션이 해당 데이터를 쓰지 못하도록 함
read lock
- 데이터를 읽으려면 먼저 읽으려는 데이터에 대해
read lock
을 획득해야 함 read lock
를 가지고 있는 동안 다른 트랜잭션이 해당 데이터를 쓰지 못하지만, 읽을 수는 있음
read lock, write lock 조합
lock
사용 예시시
read lock
,write lock
조합
lock을 사용하여도 일어나는 이상 현상
- 아래 예시의
serial schedule #1
은t1
=>t2
순서로 실행되었을 때 결과가- x 300
- y 500
serial schedule #2
는t2
=>t1
순서로 실행되었을 때 결과가- x 400
- y 300
- 하지만
lock
을 사용한 임의의 순서에schedule
결과는- x 300
- y 300
- 즉,
lock
을 사용하여도non-serial schedule
가 발생할 수 있음
2PL protocol(Two-Phase Locking Protocol)
- 위의 문제를 해결하는 방법법
- 모든
lock operation
이 최초의unlock operation
보다 먼저 수행되어야 함. serializability
를 보장함
Expanding phase
:lock
을 취득하고 반환하지 않는 phaseShrinking phase
:lock
을 반환하고(unlock
) 취득하지 않는 phase
2PL protocol에서는 OS의 데드락과 같은 문제가 발생할 수 있음
해결 방법 또한 OS의 데드락과 동일
다양한 종류의 2PL protocol
- 2PL protocol은 세부적인 방식에 따라 여러 종류가 있음
- 다음 예시를 기준으로 설명
conservative 2PL protocol
- 필요한 모든
lock
을 취득하고 트랜잭션 진행 deadlock free
- 모든
lock
을 취득하는 것 자체가 실용적이지 않음음
strict 2PL protocol
strict schedule
을 보장하는 방법(recoverability
보장)write lock
을 커밋, 롤백 할 때 반환환
strong strict 2PL protocol
strict 2PL
와 동일- 추가로
read lock
또한 커밋, 롤백 할 때 반환함