Lock을 활용한 concurrency control

2024. 10. 2. 01:27·CS/Database

 

❒ Description


지금까지 concurrency control이 무엇인지, 왜 필요한지에 대해서 학습했다.

오늘은 동시성 제어를 구현한 기법 중 하나인 Lock과 2PL에 대해서 학습하자.

 

 

 

 

 

❒ Lock의 종류


1. write-lock (exclusive-lock)

쓰기(배타) 락은 다른 트랜잭션이 같은 데이터를 읽거나 쓰는 것(INSERT, UPDATE, DELETE)을 허용하지

않는다. 따라서 잠금이 해제 될 때까지 다른 트랜잭션은 해당 데이터를 읽지도, 쓰지도 못한다.

 

 

2. read-lock (shared-lock)

다른 트랜잭션이 같은 데이터를 읽는 것을 허용한다. 읽기(공유) 잠금은 읽기 잠금끼리는 동시에 접근이

가능하지만, 읽기 잠금이 설정된 데이터에 쓰기 잠금은 사용할 수 없다.

 

 

 

 

 

❒ Lock의 호환성


현재는 read-read를 제외하고는 한 쪽이 Block 되기 때문에 전체 처리량이 좋지 않다.

이 부분은 MVCC에서 개선된다.

 

 

 

 

 

❒ Lock을 사용해도 생기는 이상현상


  • serial schedue #A : A > B
    • x = 300, y = 500
  • serial schedue #A : A > B
    • x = 400, y = 300
  • 위 그림
    • x = 300, y = 300

세 결과가 모두 다르다.

 

 

 

 

 

 

❒ 2PL protocol (two-phase lock protocol)


1. 2PL이란?

2단계 잠금 프로토콜(Two-Phase Locking, 2PL)은 데이터베이스 관리 시스템에서 트랜잭션의 serializability를

보장하기 위한 동시성 제어 기법 중 하나다. 이 프로토콜은 트랜잭션이 데이터에 접근할 때 사용하는 lock의 획득과

해제를 두 단계로 나누어 관리한다. 따라서 트랜잭션에서 모든 locking operation이 최초의 unlock operation보다

먼저 수행됨을 보장한다.

 

 

2. two-Phase

  1. 확장(Growing or Expanding) phase
    • lock을 취득만 가능하고 반환하지는 않는 phase
  2. 축소(Shrinking or Contracting) phase
    • lock을 반환만 하고 취득하지 않는 pahse

 

 

 

 

 

❒ 2PL & Deadlock


2PL에서는 위와 같이 각 트랜잭션이 필요한 락을 서로 반환하지 않는 Deadlock 현상이 발생할 수 있다.

Deadlock을 해결하는 방법은 운영체제에서 해결하는 방법과 비슷하다.

 

 

 

 

 

❒ 2PL의 변형


1. Conservative 2PL

  • 모든 lock을 취득한 뒤 트랜잭션을 시작
  • deadlock-free
  • 실용적이진 않다.

 

2. Strick 2PL (S2PL)

  • 트랜잭션이 commit 또는 rollback될 때 write-lock을 반환한다.
  • strict schedule 보장
  • Recoverability 보장

 

3. Strong Strick 2PL (SS2PL) or Regorous 2PL

  • 트랜잭션이 commit 또는 rollback될 때 read-lock과 write-lock 모두를 반환한다.
    • S2PL 보다 구현이 쉽다.
    • 하지만 lock을 오래 취득하기 때문에 다른 트랜잭션의 wait time이 길어질 수 있다.
  • strict schedule 보장
  • Recoverability 보장

 

 

 

 

 


'CS > Database' 카테고리의 다른 글

SQL과 NoSQL  (0) 2024.11.20
MVCC (Multi Version Concurrency Control)  (0) 2024.10.02
Isolation 레벨과 이상 현상들  (0) 2024.09.26
DB Transaction & Concurreny Control (2)  (0) 2024.09.20
DB Transaction & Concurreny Control (1)  (0) 2024.09.12
'CS/Database' 카테고리의 다른 글
  • SQL과 NoSQL
  • MVCC (Multi Version Concurrency Control)
  • Isolation 레벨과 이상 현상들
  • DB Transaction & Concurreny Control (2)
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (173)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (4)
        • Java (3)
        • Kotlin (1)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (7)
        • 이벤트 기반 마이크로서비스 구축 (6)
        • 친절한 SQL 튜닝 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Back-Tracking
    binarysearch
    sliding-window
    오블완
    Two-Pointer
    greedy
    부분단조성
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
Lock을 활용한 concurrency control
상단으로

티스토리툴바