[DB] Concurrency Control - ③

양현지·2023년 6월 12일
1

DB

목록 보기
12/15

0. 개요

2PL Locking, B+ Tree Locking 외에도 Timestamp를 사용해 C&C를 제공할 수있다. Timestamp CC를 통해 serailizable schedule을 보장하고 recoverability를 제공한다.

1. Timestamp CC

1) TS(Timestamp)

① TS

  • 트랜잭션이 시작될 때 할당되는 값으로, 트랜잭션의 실행 순서를 나타내는 타임스탬프
  • TS는 각 트랜잭션마다 고유한 값을 가지며, 트랜잭션이 시작될 때 생성
    => TS를 사용하여 트랜잭션 간의 순서를 정의하고 충돌을 처리하는데 사용

② RTS(Read-Timestamp)

  • 각 객체에 할당되는 값으로, 누군가 해당 객체를 읽을 때의 타임스탬프

③ WTS(Write-Timestamp)

  • 각 객체에 할당되는 값으로, 해당 객체를 수정(쓰기)할 때의 타임스탬프

2) When T wants to Read Object?

  • WTS만 고려(RTS는 고려하지 않음)

① if TS(T) < WTS(O)
: 트랜잭션 T의 시작 시간이 O(object)가 쓰인 시간보다 빠르다.

즉, 트랜잭션이 객체를 수정(쓰기)하기 전에 해당 객체를 이미 다른 트랜잭션이 수정한 상태이므로 허용되지 않음

② if TS(T) > WTS(O)
: 트랜잭션이 시작보다 O(object)에 마지막으로 업데이트 된 시간이 더 빠르다.

즉, 트랜잭션이 객체를 수정하기 전에 해당 객체를 다른 트랜잭션이 이미 수정한 상태이므로 허용

=> Allow T to read O & Reset RTS(O) to max(RTS(O), TS(T))

3) When T wants to Write Object?

① TS(T) < RTS(O) // 트랜잭션이 시작한 이후에 Object는 read 되었음. 만약 T가 Object를 수정하였다면 RTS(O)는 최신 데이터를 읽지 못했을 수 있음 => 충돌

  • abort and restart T
    ② TS(T) < WTS(O) // 트랜잭션이 시작한 이후에 Object가 업데이트 되었음. 그러나 "Thomas Write Rule"에 의해 이러한 쓰기 작업은 무시해도 됨

Thomas Write Rule?

트랜잭션 Ti가 Write(x) 수행 시 TS(Ti) < write_TS(x) 이면 TS(Ti)가 write(x)를 실행한 것으로 간주하고 무시하는 것이 토마스 기록 규칙(Thomas write rule), 이는 write 연산의거부로 인한 트랜잭션의 취소를 감소시키기 위한 목적이다

0개의 댓글