[DB] LOCK & 2PL

mary·2024년 3월 8일

DB

목록 보기
10/15

LOCK

데이터마다 가지고 있는 lock을 취득해야만 데이터를 변경하거나 읽을 수 있음.
lock이 없으면 취득할 때까지 기다려야함.

concurrency control을 구현하기 위해 사용.


unlock이 될 때까지 기다렸다가 unlock돼서 해제되면 그 때서야 트랜잭션 실행 가능.

  • write_lock (=exclusive lock)
    : read/write(insert,delete,modify)할 때 사용.
    다른 tx가 같은 데이터를 read/write하는 것을 허용하지 않음.

  • read_lock (=shared lock)
    : read할 때 사용.
    다른 tx가 같은 데이터를 read하는 것을 허용



2PL(two-phase locking) protocol

tx에서 모든 locking operation이 최초의 unlock operation 보다 먼저 수행되도록 하는 것

concurrency control이 Serializability를 보장하기 위해서 사용.

왜 필요하지?
2PL 프로토콜을 따르지 않으면 nonserializable해져서 tx순서에 따라 결과가 각각 다르게 나올 수 있어서.



2PL에서 상황에 따라 Deadlock이 발생하고 해결하는 방법은 OS의 데드락의 해결방법과 동일함.

-종류

  • conservative 2PL
    : 모든 lock을 취득한 뒤에 transaction 시작.
    deadlock이 발생하지 않지만 트랜잭션을 시작하려면 모든 lock을 가진 후에나 실행할 수 있어서 실용적이지 않음.

  • strict 2PLdptj
    : strict shedule(rollback이 발생했을 때 이상한 현상이 발생되지 않도록 하는 것)을 보장하는 2PL.
    write_lock을 commit / rollback 될 때 반환함.
    많이 쓰임.

  • strong strict 2PL(=ss2PL)
    : strict 2PL보다 더 업그레이드 되고 구현이 쉬움.
    read_lock / write_lock 모두 commit / rollback 될 때 반환함.
    많이 쓰임.



출처: https://www.youtube.com/watch?v=0PScmeO3Fig&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=18&t=10s

profile
내 인생을 망치러 온 나의 구원, 개발

0개의 댓글