Skip to content

3_1. OCC

김영서 edited this page Oct 7, 2021 · 1 revision

Optimistic Concurrency Control

OCC 동작

  1. 데이터베이스의 내용을 Private Space로 복사하여 작업 수행
  2. 작업한 내용이 Conflic Serializable 한지 검사
  3. Conflic Serializable 하다면 Private Space의 결과를 데이터베이스에 반영

OCC 종류

대표적으로 BOCC, FOCC가 있습니다.


BOCC (Backward-oriented OCC)

tjtj 이전에 Commit된 ti들과 비교하여 Conflict Serializble을 판단합니다.

  1. tj가 시작하기 전에 ti가 이미 Commit 된 경우, tj는 Commit 가능합니다.

    1

  2. "tj 시작" ~ "tj Validation 시작" 사이에 끝난 트랜잭션들의 WS과 tj의 RS이 공집합인 경우, tj는 Commit 가능합니다.

    2

결론적으로 BOCC에서는 tj의 Validation 시작 전 Commit 된 모든 트랜잭션들이 1 또는 2의 조건을 만족하면, tj를 Commit 할 수 있습니다.

3


FOCC (Forward-oriented OCC)

tj가 Validation 할 때에 tj와 동시에 실행 중인 (active한) 트랜잭션들의 RS과 tj의 WS을 비교합니다. 이를 통해 tj의 Write가 Conflict를 발생시키는지 확인합니다.

FOCC는 아래 3가지 방법중 하나를 통해 Conflict를 방지합니다.

  1. Abort tj
  2. tj의 WS과 교집합이 공집합이 아닌 RS를 갖는 트랜잭션을 Abort
  3. tj를 Wait 시키기

4

Clone this wiki locally