트랜잭션 - 동시성 제어 #DB Lock

dragonappear·2023년 6월 14일

Database 101

목록 보기
3/10

출처: https://sewonzzang.tistory.com/76


DB Lock

인터리빙으로 동작하는 트랜잭션 스케쥴이 Serializable Schedule 인지 매번 검사하는 것은 쉽지 않은 일이다.
그래서 DBMS는 직렬 가능 스케쥴인지 검사하기 보다는 직렬 가능성을 보장하는 Concurrency Control 기법을 사용한다.
즉, 모든 트랜잭션들이 직렬 가능성이 보장되는 규약을 따르도록 하는 것이다.

Concurrency Control에는 Lock을 사용하는 것과 MVCC를 사용하는 것을 알아보자.

DB Lock

DB Lock은 같은 데이터 동시에 접근하려는 여러 트랜잭션 간에 상호 배제를 제공하는 동기화 메커니즘이다.

Write Lock(or Exclusive lock)

다른 트랜잭션이 같은 데이터를 Read/Write 하는 것을 허용하지 않는다.

  • Write Operation은 생각보다 복잡한 과정이다.
  • 같은 데이터에 Read/Write하는 것은 예상치 못한 동작을 할 수 있기 때문에 해당 데이터에 Lock을 걸어서 concurrency 보장하게 할 수 있다.

Read Lock(or Shared lock)

다른 트랜잭션이 같은 데이터를 Read하는것을 허용한다.

Lock Based Concurrency Control

Read LockWrite Lock
Read LockOX
Write LockXX

Lock을 사용해도 발생하는 이상현상


2PL Protocol(Two-phase Locking)

2PL Protocol

TX에서 모든 Locking Operation이 Unlocking Operation보다 먼저 수행되도록 하는 것

  • Expanding Phase, Shrinking Phase로 구분할 수 있다.
    • Expanding Phase: Lock을 획득만하고 반환하지 않는 Phase
    • Shrinking Phase: Lock을 반환만하고 획득하지 않는 Phase

2PL과 데드락

2PL로 동작할 때 Deadlock이 발생할 수 있다.

Conversative 2PL

모든 Lock을 취득한 뒤 TX 시작 -> deadlock free but 실용적이지 않다.

Strict 2PL

Commit할 때 Write Lock을 반환하는 2PL

Strict Schedule을 보장하는 2PL
Recoverability 보장

0개의 댓글