Uncontrolled Sharing Problems
Lost update problem

T1가 작업한 A 내용이 없어짐
Uncommitted dependency problem

T1이 존재하지 않는 값을 읽어가 작업한 셈이 됨
Inconsistent analysis problem

T1이 inconsistent한 상태의 데이터 아이템 값으로 작업해 틀린 결과값을 계산함
Lock-Based Protocols
Locks
shared lock (S): 그 데이터 아이템을 read하기 위해 획득해야 하는 lock
exclusive lock (X): 그 데이터 아이템을 write하기 위해 획득해야 하는 lock
lock-compatibility matrix

- (ex) A에 T1이 shared lock 걸은 상태에서 T2가 shared lock 요청 → compatible → T2도 A에 shared lock 획득
- (ex) A에 T1이 shared lock 걸은 상태에서 T2가 exclusive lock 요청 → incompatible → T1이 lock 해제할 때까지 T2는 기다려야 함
lock escalation: 어떤 데이터 아이템에 대해 원래 shared lock을 갖고 있었는데, exclusive lock을 갖게 된 것
lock-based protocol은 기본적으로 conflict serializable schedule을 만들기 위한 것임. 그러나 lock만으로는 conflict serializable schedule을 보장할 수 없음 — ∵ 언제 unlock해야 하는지 명시적으로 정해져있지 않기 때문임.
2-phase locking protocol (2PLP)
conflict-serializable schedule을 보장하기 위한 protocol.

phase 1: growing phase. lock 획득만 가능, lock 해제 불가능
phase 2: shrinking phase. lock 해제만 가능, lock 획득 불가능
lock point (위 그래프에서 점선으로 표시된 시점)
phase 1, 2 간 경계로, 마지막 lock이 획득되는 시점과 같음.
트랜잭션들의 순서를 결정하는 기준이 됨.
Cascading rollback problem
basic 2PLP에서 발생할 수 있는 문제로, 한 트랜잭션에서 failure 발생했을 때 연관된 여러 트랜잭션들이 모두 롤백해야 하는 상황.
이런 경우 시스템에 큰 부하가 발생할 수 있고, 리소스가 낭비되기 때문에 cascading rollback problem이 발생하지 않도록 추가 보완한 protocol이 필요함. 한 트랜잭션이 업데이트한 결과를 그 트랜잭션의 commit 전까지 다른 트랜잭션이 접근하지 못하도록 해야 문제를 해결 가능한데, 이를 구현하는 방식은 strict two-phase locking, rigorous two-phase locking 의 두 가지가 있음.
strict two-phase locking

shrinking phase에서는 shared lock만 해제할 수 있고, exclusive lock은 commit/abort 시점에서 해제
다른 트랜잭션들이 해제된 shared lock을 사용해 더 일찍 작업을 시작할 수 있게 되므로, rigorous 2PLP에 비해 concurrency의 측면에서 더 효율적.
대부분의 실제 DBMS에서는 strict 2PLP를 사용함.
rigorous two-phase locking

shared lock, exclusive lock 모두 commit/abort 시점에서 해제
이 경우 lock point = commit/abort time 이므로, 트랜잭션들의 실행 순서도 사실상 commit/abort 시점을 기준으로 결정하게 됨.
모든 lock을 같은 시점에서 해제하므로, strict 2PLP에 비해 더 간단함.
Deadlock
서로 다른 트랜잭션들이 각자의 작업을 위해 서로가 갖고 있는 lock이 해제되기를 무한정 대기하고 있는 상황.
(ex) T1은 B에 lock 요청해 T2의 lock 해제 기다리고, T2는 A에 lock 요청해 T1의 lock 해제 기다리고 있는 상황 — 둘 다 growing phase라서 필요한 lock 모두 획득 전까지 해제 불가능하기 때문에 무한정 기다리는 상황 발생
모든 2PLP는 그 종류에 상관없이 (strict, rigorous 모두) deadlock 발생의 여지가 있음.
lock 요청 시점부터 timeout 설정해 일정 시간 동안 lock 획득 실패할 경우 스스로를 abort하는 방식으로 deadlock을 회피하는 방식으로 문제 해결할 수 있음.
본 포스트 내용은 고려대학교 컴퓨터학과 "데이터베이스" 강의 내용 일부를 개인 공부 목적으로 정리한 것입니다.
'computer science > 데이터베이스' 카테고리의 다른 글
| Transaction (0) | 2024.01.25 |
|---|---|
| Relational DBMS (0) | 2024.01.17 |
| Relational Algebra (관계대수) (0) | 2024.01.08 |
| Basics of Relational Model (0) | 2024.01.06 |
| Database Introduction (0) | 2024.01.06 |