슬라이드 버전 공유
Outline
- Lock-Based Protocols
- Timestamp-Based Protocols
- Deadlock Handling
주요 내용
-
Atomicity Consistency Isolation Durability (ACID) : Transaction이 지켜야할 4가지 성질
-
A, C, D : recovery manage에서 설명(log)
-
I : concurrence control manager(locking)
-
Lock허용 여부 : data의 consistence가 유지되면 허용
-
Lock-based / Timestamp-Based Protocol 설명 / Lock-based는 대체적으로 Deadlock을 발생시킴.
Lock-Based Protocols (1/3)
-
lock 메카니즘은 데이터 엑세스에 대한 동시성 제어
-
2가지 모드
- Exclusive mode read x, write x
- Shared mode read o, write x
- lock 요청은 concurrency control 매니저에게 요청하는 것 ( 트랜젝션은 granted 된 이후 진행 됨)
Lock-Based Protocols (2/3)
-
Lock compatibility matrix
-
위 matrix에 true 일때만 lock을 얻을 수 있음
-
1개 이상의 트랜젝션이 shared lock을 쥐고 있을 수 있음
-
Exclusive lock은 하나의 트랜젝션을 초과해서 얻을수 없음
-
lock을 못 얻으면 트랜젝션은 대기
Lock-Based Protocols (3/3)
-
아래의 lock은 A와 B사이에 무언가가 침투하면 serializability가 보장되지 않음
-
아래 예제는 잘못된 locking Lock을 너무 빨리 풀면 data consistence가 깨짐.
-
lock 프로토콜은 모든 트랜젝션이 따라하야 하는 rule임
Pitfalls of Lock-Based Protocol (1/2)
- T3와 T4 모두 진행이 안됨 lock-S(B)와 lock-X(A)가 각 트랜젝션을 wait로 만들기 때문
-
이 상황을 데드락이라 함
-
T4의 lock-S(B)는 이미 B data에 X-lock이 걸려있기 때문에 wait
-
T3의 lock-X(A)는 이미 A data에 S-lock이 걸려있기 때문에 wait
-
Pitfalls of Lock-Based Protocol (2/2)
- 데드락 가능성은 대부분은 lock 프로토콜에 존재함
- starvation은 concurrency control 매니저가 잘못 설계되어있으면 가능함
- 트랜젝션이 X-lock을 기다리는 동안 다른 트랜젝션에 S-lock을 기다릴 경우
- 데드락 상황에서 같은 트랜젝션은 반복적으로 롤백됨
- concurrency control 매니저를 잘 설계하면 starvation 방지가능
Two-Phase Locking Protocol (1/2)
-
conflict-serializable 스케쥴을 보장
-
Phase 1 : Growing Phase
- 트랜젝션이 lock 획득 가능
- 트랜젝션이 lock release 불가능
-
Phase 2 : Shrinking Phase
- 트랜젝션이 lock 획득 불가능
- 트랜젝션에 lock release 가능
-
트랜젝션이 각 lock 포인트에 따라 직렬화 가능한것이 보장됨
Two-Phase Locking Protocol (2/2)
-
two-phase locking은 데드락 방지를 보장하진 않음
-
Cascading rollback은 가능함
-
Strict 2PL : Transaction이 종료되는 시점에 모든 x-lock들을 전부 unlock하는 방법(x-lock은 종료될 때까지 계속 유지)
-
Rigorous 2PL : x-lock 뿐만 아니라 s-lock을 포함한 모든 lock을 Transaction이 종료될 때까지 유지
Example of Cascading Rollback #1
Example of Cascading Rollback #2
-
T5에 Failure가 발생 : T5가 했던 변경사항을 전부 Rollback 해야함. -> Write(A)를 원복해야 함.
-
그러면 T6의 read(A)값도 잘못된 값을 읽었기 때문에 Rollback 됨.
-
T7의 read(A)값도 잘못된 값을 읽었기 때문에 Rollback 발생 -> Cascading Rollback -> 치명적
Timestamp-Based Protocols (1/3)
-
각 트랜젝션이 시작 될 때 timestamp를 발행
-
old transaction에 우선권 부여
-
트랜젝션 매니저는 아래를 관리
- W-timestamp(Q) is the largest timestamp of any transaction that executed write(Q) successfully
- R-timestamp(Q) is the largest timestamp of any transaction that executed read(Q) successfully
Timestamp-Based Protocols (2/3)
-
read나 write 연산의 conflict시 ts를 따짐
-
만약 Ti가 read(Q)를 발행한다고 가정
- TS(Ti) < W-timestamp(Q)이면 이미 dirty된 데이터를 읽는 다는 것이니 Ti를 롤백
- TS(Ti) >= W-timestamp(Q)이면 read 연산이 수행되고 R-timestamp(Q)가 max(R-timestamp(Q), TS(Ti))로 업데이트
Timestamp-Based Protocols (3/3)
- Ti가 write(Q)를 발행했다고 가정
- TS(Ti) < R-timestamp(Q) 이면 이미 읽은 시간보다 과거 시간에 write를 시도하는 것이므로 reject
- TS(Ti) < W-timestamp(Q)이면 이미 써진 시간보다 과거에 write를 시도한 것이므로 역시 reject
- 위 케이스가 아니면 write연산은 수행되고 W-timestamp(Q)는 TS(Ti)로 업데이트
Correctness of Timestamp-Ordering Protocol
-
timestamp-ordering 프로토콜은 serializability를 보장하여 precedence graph의 cycle이 없음
-
타임스탬프 프로토콜은 트랜젝션의 대기가 없으므로 데드락이 없음
-
하지만 cascade-free는 아니며 recoverable 하지 않음
Recoverability and Cascade Freedom
- 타임스탬프 프로토콜의 문제점
- Ti가 abort, Tj가 Ti에 의해 쓰여진 데이터를 이미 읽었다 가정
- Tj는 반드시 abort 되어야하지만 이미 commit되었다면 복구 불가능
- 나아가, Tj의 값을 읽은 경우 모두 롤백되어야 함
- 이런 형태의 롤백을 cascading rollback이라 부름
- 솔루션
- 트랜젝션의 구조화 되어 write가 제일 마지막에 처리 되어야함
- 모든 쓰기 트랜젝션은 atomic해야함
Deadlock Handling
-
모든 트랜젝션이 다른 트랜젝션을 기다리고 있으면 시스템이 데드락됨
-
데드락 방지 프로토콜이 이를 막아줌
- 각 트랜젝션이 시작되기 전 사용되는 모든 데이터를 lock함(pre-declaration)
- (graph-based protocol)
Deadlock Handling #2
-
Prevention : 아예 Deadlock을 발생시키지 않기 위해 까다로운 제약조건을 건다.
-
Detection : 일정 주기로 deadlock이 발생할 지 체크.
-
Resolution : Cycle이 구성된 Transaction 중 하나를 강제종료해서 Deadlock 복구 –> Cycle 해제 (victim)
-
“wait-for graph” : Dead-lock 발생여부를 Check하는 그래프. Cycle이 있으면 Deadlock 이다.
Timeout-Based Schemes
-
롤백 트랜젝션이 원본 타임스탬프 기준으로 재시작 됨
-
오래된 트랜젝션이 우선함
-
Timeout-Base 스키마
- 트랜젝션은 특정 시간 동안만 기다리고 이후 트랜젝션이 롤백됨
- 데드락이 불가능해짐
- 구현이 간단하지만 starvation문제 가능성 있음 좋은 timeout 값을 정하기 어려움
Deadlock Detection (1/2)
-
데드락은 wait-for 그래프로 탐지됨
-
그래프에서 cycle이 발생하면 데드락 상태임
Deadlock Detection (2/2)
Deadlock Recovery
- 데드락이 탐지되면
- 몇몇 트랜젝션은 롤백되어야함 최소한의 롤백비용을 가지는 희생자를 찾아야함
- 롤백
- 전체 롤백
- 더 효과적인 롤백은 데드락을 끊을수 있는 트랜젝션만 롤백
- 같은 트랜젝션이 계속 victim으로 지정되면 starvation가능성 있음 롤백 횟수를 가중치로 만들어 starvation을 피해야함