❒ Description
지금까지 concurrency control이 무엇인지, 왜 필요한지에 대해서 학습했다.
오늘은 동시성 제어를 구현한 기법 중 하나인 Lock과 2PL에 대해서 학습하자.
❒ Lock의 종류
1. write-lock (exclusive-lock)
쓰기(배타) 락은 다른 트랜잭션이 같은 데이터를 읽거나 쓰는 것(INSERT, UPDATE, DELETE)을 허용하지
않는다. 따라서 잠금이 해제 될 때까지 다른 트랜잭션은 해당 데이터를 읽지도, 쓰지도 못한다.
2. read-lock (shared-lock)
다른 트랜잭션이 같은 데이터를 읽는 것을 허용한다. 읽기(공유) 잠금은 읽기 잠금끼리는 동시에 접근이
가능하지만, 읽기 잠금이 설정된 데이터에 쓰기 잠금은 사용할 수 없다.
❒ Lock의 호환성
현재는 read-read를 제외하고는 한 쪽이 Block 되기 때문에 전체 처리량이 좋지 않다.
이 부분은 MVCC에서 개선된다.
❒ Lock을 사용해도 생기는 이상현상
- serial schedue #A : A > B
- x = 300, y = 500
- serial schedue #A : A > B
- x = 400, y = 300
- 위 그림
- x = 300, y = 300
세 결과가 모두 다르다.
❒ 2PL protocol (two-phase lock protocol)
1. 2PL이란?
2단계 잠금 프로토콜(Two-Phase Locking, 2PL)은 데이터베이스 관리 시스템에서 트랜잭션의 serializability를
보장하기 위한 동시성 제어 기법 중 하나다. 이 프로토콜은 트랜잭션이 데이터에 접근할 때 사용하는 lock의 획득과
해제를 두 단계로 나누어 관리한다. 따라서 트랜잭션에서 모든 locking operation이 최초의 unlock operation보다
먼저 수행됨을 보장한다.
2. two-Phase
- 확장(Growing or Expanding) phase
- lock을 취득만 가능하고 반환하지는 않는 phase
- 축소(Shrinking or Contracting) phase
- lock을 반환만 하고 취득하지 않는 pahse
❒ 2PL & Deadlock
2PL에서는 위와 같이 각 트랜잭션이 필요한 락을 서로 반환하지 않는 Deadlock 현상이 발생할 수 있다.
Deadlock을 해결하는 방법은 운영체제에서 해결하는 방법과 비슷하다.
❒ 2PL의 변형
1. Conservative 2PL
- 모든 lock을 취득한 뒤 트랜잭션을 시작
- deadlock-free
- 실용적이진 않다.
2. Strick 2PL (S2PL)
- 트랜잭션이 commit 또는 rollback될 때 write-lock을 반환한다.
- strict schedule 보장
- Recoverability 보장
3. Strong Strick 2PL (SS2PL) or Regorous 2PL
- 트랜잭션이 commit 또는 rollback될 때 read-lock과 write-lock 모두를 반환한다.
- S2PL 보다 구현이 쉽다.
- 하지만 lock을 오래 취득하기 때문에 다른 트랜잭션의 wait time이 길어질 수 있다.
- strict schedule 보장
- Recoverability 보장
'CS > Database' 카테고리의 다른 글
MVCC (Multi Version Concurrency Control) (0) | 2024.10.02 |
---|---|
Isolation 레벨과 이상 현상들 (0) | 2024.09.26 |
DB Transaction & Concurreny Control (2) (0) | 2024.09.20 |
DB Transaction & Concurreny Control (1) (0) | 2024.09.12 |
B-tree와 DB 인덱스(index) (0) | 2024.09.01 |