logo

[DB] Lock을 사용하여 동시성 제어하기 (+ 2PL Protocol)

* 관련 기술 스택이 없습니다
emoji

• 데이터베이스에서 동시성 제어는 여러 트랜잭션이 동시에 실행될 때 데이터의 정합성과 무결성을 유지하는 방법으로, 이를 위해 Locking 메커니즘이 사용된다. Lock은 트랜잭션의 직렬성을 보장하여 데이터의 정합성을 유지하며, Read-Lock과 Write-Lock이 존재한다. Read-Lock은 여러 트랜잭션이 동시에 획득할 수 있지만, Write-Lock은 배타적이어서 한 트랜잭션만 획득할 수 있다.
• 동시성 문제를 해결하기 위해 Lock을 사용하지만, Lock만으로는 항상 Serial Schedule과 같은 결과를 보장할 수 없다. 예를 들어, 두 트랜잭션이 동시에 Write-Lock을 요청할 경우, 데이터베이스는 한 트랜잭션에 Lock을 부여하고 다른 트랜잭션은 대기 상태로 두어 데이터 정합성을 유지하지만, 이는 Serial Schedule의 결과와는 다를 수 있다.
• 2PL(2-Phase Locking) 프로토콜은 트랜잭션에서 모든 락 획득 작업이 최초의 락 해제 작업보다 먼저 수행되도록 하여 serializability를 보장하는 방법으로, Expanding Phase와 Shrinking Phase로 나뉜다. Expanding Phase에서는 락을 획득만 하고, Shrinking Phase에서는 락을 반환만 한다.
• 2PL 프로토콜의 다양한 변형 중 하나는 트랜잭션 시작 전에 필요한 모든 락을 미리 획득하는 방식으로, 이는 다른 트랜잭션과의 락 경쟁을 줄일 수 있지만 트랜잭션 시작이 어려워질 수 있다. 또 다른 변형은 트랜잭션 종료 시까지 모든 쓰기 락을 유지하여 Dirty Read를 방지하는 방식이다.

thumbnail
북마크
공유하기
신고하기
12분 분량
조회수 57
profile-image우쨈
10일 전
Copyright © 2025. Codenary All Rights Reserved.