데이터베이스 3: 데이터베이스 락 (DB Lock) 정의, 종류, 역할, 2PL 프로토콜

DB Lock

데이터베이스 트랜잭션은 ACID 특성 중 격리성 / 고립성 (Isolation) 을 유지하기 위해서 데이터베이스 락 (DB Lock) 을 이용합니다. 이번 글에서는 데이터베이스 락 (DB Lock) 과 2PL 프로토콜에 대하여 상세하게 알아보겠습니다.

 

데이터베이스 락 (DB Lock)

“데이터베이스 락 (DB Lock)” 을 이용하여 트랜잭션의 격리성 / 고립성을 보장할 수 있습니다. 뮤텍스의 락처럼 데이터를 읽거나 쓸 때 락을 획득하고 (lock), 작업이 끝났을 때 락을 해제합니다 (unlock).

DB Lock 의 종류

데이터베이스 락 (DB Lock) 은 다음과 같이 4가지 종류로 분류됩니다.

공유 락 (Shared Lock)

  • 공유 락 (Shared Lock) 은 데이터를 변경하지 않는 읽기 명령에 대해 주어지는 DB Lock 입니다.
  • 공유 락은 Read Lock 이라고도 불리며, S 로 표기합니다.
  • 공유 락을 사용하면, 하나의 트랜잭션이 데이터를 읽을 때, 다른 트랜잭션은 데이터를 읽을 수는 있도록 허용합니다.

 

베타 락 (Exclusive Lock)

  • 베타 락 (Exclusive Lock) 은 데이터에 변경을 가하는 쓰기 명령들에 대해 주어지는 DB Lock 입니다.
  • 베타 락은 Write Lock 으로 불리기도 하며, X 로 표기합니다.
  • 베타 락을 사용하면, 하나의 트랜잭션이 데이터를 쓸 때, 다른 트랜잭션이 읽을 수도 쓸 수도 없도록 제한합니다.

 

업데이트 락 (Update Lock)

  • 업데이트 락 (Update Lock) 은 데이터를 수정하기 위해 베타 락 (X) 을 걸기 전에 데드 락을 방지하기 위해 사용되는 DB Lock 입니다.
  • 일반적으로 업데이트 락은 UPDATE 쿼리의 필터 (WHERE) 가 실행되는 과정에서 적용됩니다.

 

내재 락 (Intent Lock)

  • 내재 락 (Intent Lock) 은 사용자가 요청한 범위에 대한 락 (ex, 테이블 락) 을 걸 수 있는지 여부를 빠르게 파악하기 위해 사용되는 락 입니다.
  • 내재 락은 데이터베이스는 사용자가 로우에 베타 락 (X)을 거는 시점에, 해당 로우의 상위 객체들에 대한 내재 락을 걸어, 다른 사용자가 더 큰 범위의 자원들에 대해 락을 걸 수 있는지 여부를 빠르게 파악할 수 있도록 돕습니다.

 

2PL 프로토콜 (Two Phase Locking Protocol, 2PL Protocol)

2PL 프로토콜
2PL 프로토콜. (이미지 출처: https://www.researchgate.net/figure/Growing-and-shrinking-phases-in-2PL-Protocol-1_fig9_330485258)

 

2PL 프로토콜 (Two Phase Locking Protocol, 2PL Protocol) 은 DB Lock 을 활용하여 데이터베이스의 직렬 가능성을 보장하여, 공유하고 있는 데이터에 여러 트랜잭션이 동시에 접근할 수 없도록 만듭니다. 2PL 프로토콜은 2단계 로킹 규약 이라고 불리기도 합니다.

2PL 프로토콜은 데이터베이스의 직렬 가능성 (Conflict Serializability) 을 보장할 수 있다는 장점이 있지만, 데드락 (Deadlock) 이 발생할 수 있다는 단점도 있습니다.

 

2PL 프로토콜 과정

2PL 프로토콜은 트랜잭션의 실행 과정을 세 단계로 나눕니다.

  1. 트랜잭션이 실행될 때, DB Lock 에 대한 권한을 요청한다.
  2. 트랜잭션이 모든 DB Lock 을 하나씩 획득한다.
  3. 트랜잭션이 DB Lock 을 하나씩 해제한다.

위 과정으로 볼 때, 2PL 프로토콜은 트랜잭션은 두 가지 phase 로 분류합니다.

  • 상승 단계 (Growing Phase): read_lock , write_lock 을 획득할 수 있음
  • 하강 단계 (Shrinking Phase): unlock 만 할 수 있음

2PL 프로토콜에 따르면 각각의 트랜잭션은 상승 단계 혹은 하강 단계에만 있을 수 있으며, DB Lock 을 해제하면서 동시에 다른 DB Lock 을 획득할 수 없습니다.

 

마치며

데이터베이스 락 (DB Lock) 은 트랜잭션 ACID 특성 중 격리성 / 고립성 (Isolation) 을 보장하기 위한 시스템입니다. DB Lock 을 획득하고 해제하는 규칙은 2PL 프로토콜과 같은 규약으로 정해져 있습니다.

 

함께 읽으면 좋은 글

 

Reference

Leave a Comment