본문 바로가기
CS/DB

[DB] 데이터베이스 병행(동시성) 제어 기법: 로킹, 기본적 2PL

by jangThang 2023. 4. 25.
반응형

 데이터베이스 병행 작업 시 문제점을 해결하기 위한 로킹과 기본적 2PL에 대해서 알아보겠습니다.

 

[ Contents ]

     

     

    1. 병행작업의 문제점

     운영체제에서 같은 자원을 쓰는 프로세스를 병렬 처리할 때 교착상태(Deadlock)에 빠지듯이, DB에서도 같은 데이터를 동시에 여러 트랜잭션이 처리할 때 문제가 생깁니다. 이를 해결하기 위해서 병행 제어 기법을 사용합니다. 

     

    2023.04.25 - [Data Engineering] - [DB] 데이터베이스 동시성 제어(병행 제어)와 문제점

     

    [DB] 데이터베이스 동시성 제어(병행 제어)와 문제점

    데이터베이스는 여러 트랜잭션을 번갈아가며 함께 처리합니다. 그러다 보니 서로 얽히는 경우도 생기는데, 이러한 병행수행의 문제점에 대해서 알아보겠습니다. [ Contents ] 1. 동시성 제어 (병행

    star7sss.tistory.com

     

     

     

    2. 로킹(Locking)

    서로 다른 트랜잭션이 동일한 데이터에 동시에 수정하지 못하도록 Lock을 걸어 독점적 사용을 보장하는 기법

     

     데이터에 접근하기 전에, 미리 Lock을 걸고 작업이 끝나면 Unlock을 합니다. 그 사이에는 어떤 트랜잭션도 해당 데이터에 수정하지 못합니다. 다만 읽기 연산은 가능합니다.

     

    - 공용(Shared) lock: 다른 트랜잭션도 읽기 연산은 가능, 쓰기 연산은 불가능 
    - 전용(Exclusive) lock: 다른 트랜잭션은 읽기, 쓰기 연산 불가능

     

     작업 중에 다른 트랜잭션이 읽어가도 되는 건 공용 Lock을 걸고, 온전히 자신만 데이터를 써야할 때에는 전용 Lock을 겁니다. 하지만 이럼에도 모순성 문제는 해결하지 못합니다. 

     트랜잭션 연산 중간에 Lock 이외의 값을 변경해서 DB 일관성이 훼손되는 경우, 로킹 방식으로는 방지할 수 없습니다.

     

     

     

    3. 기본적 2PL

    - 확장 단계: Lock 연산은 할 수 있으나, Unlock 연산은 할 수 없음 (데이터를 점유하는 단계)
    - 축소 단계: Unlock 연산은 할 수 있으나, Lock 연산은 할 수 없음 (데이터를 해제하는 단계)

     

     트랜잭션 초기는 확장 단계로 lock연산만 가능합니다. 이후 Unlock 연산을 한다음에는 축소 단계로 진입해서 다시 Lock연산을 할 수 없습니다. 즉, 무분별하게 데이터 점유와 해제를 반복할 수 없습니다.

     

     

     이를 통해, 트랜잭션의 직렬 가능성을 보장할 수 있습니다. 직렬 가능성은 여러 트랜잭션을 번갈아가며 작업(인터리빙, Interleaving)해도, 독립적으로 연속 실행한 결과와 같은 걸 보장합니다.

     

     하지만, 교착상태(Deadlock)는 해결하지 못합니다. 각 트랜잭션이 서로가 필요한 데이터를 lock한 상태라면, 무한정 대기가 이어질 수 밖에 없습니다. 따라서 교착상태는 별도의 모니터링을 통해서 해결해야 합니다.

     

     

     

    4. 엄격한(strict) 2PL과 엄중한(rigorous) 2PL

    엄격한 2PL: 트랜잭션이 완료될 때까지, 모든 전용 Lock은 unlock 없이 유지
    엄중한 2PL: 트랜잭션이 완료될 때까지, 모든 Lock은 unlock 없이 유지

     

     엄격한 2PL은 가장 널리 사용되는 방법으로 연쇄 복귀(Cascading Rollback) 문제를 막을 수 있습니다.

     반면 엄중한 2PL은 병렬성이 떨어지지만, 엄격한 2PL보다는 구현이 용이한 장점이 있습니다.

     다만, 이 역시 교착상태는 발생할 수 있습니다.

     

     

    star가 되고나서 Tistory

    반응형

    댓글