공유 락(Shared Lock)과 베타 락(Exclusive Lock)

이진호·2022년 9월 29일
2

DB

목록 보기
4/6
post-thumbnail

공유 락(Shared Lock)과 베타 락(Exclusive Lock)

멀티 트랜잭션 환경에서 데이터베이스의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장할 수 있는 잠금 장치. 트랜잭션 격리 수준과 DBMS에 따라 다양한 Lock 정책이 존재하지만 크게 2가지로 나눌 수 있음.

공유 락(Shared(S) Lock)

  • 다른 트랜잭션이 잠긴 객체를 읽고 다른 공유 락을 생성하는 것은 허용하지만, 쓰기나 베타 락을 생성하는 것을 허용하지 않는 잠금.
  • 여러 트랜잭션이 동일한 행에 공유 락을 생성할 수 있음, 즉 다른 트랜잭션이 읽고 있는 행을 읽을 수 있음.
  • 공유 락이 걸려있는 행에 베타 락을 걸 수는 없음, 즉 해당 공유 락이 해제될 때까지 쓰기 불가능.

베타 락(Exclusive(X) Lock)

  • 동일한 행에 다른 트랜잭션을 생성하는 것을 허용하지 않는 잠금.
  • 다른 트랜잭션에서 베타 락을 생성할 수 없기 때문에 쓰기가 불가능.
  • 다른 트랜잭션에서 공유 락을 생성할 수 없음. 단 락을 쓰지 않는 읽기는 가능.

공유 락과 베타 락에 대한 오해

일반적으로 공유 락은 읽기 락이고, 베타 락은 쓰기 락이다. 따라서 베타 락에서 읽기는 가능하고, 쓰기만 불가능하다. 이렇게 널리 퍼져있지만 이는 틀린 말입니다(트랜잭션 격리 수준에 따라 베타 락에서도 읽기가 불가능 할 수 있음).

공유 락과 베타 락의 핵심은 읽기 쓰기가 아니라 락 사이 호환 여부입니다.

공유 락은 같은 공유 락을 허용하기 때문에 읽기가 가능하고, 쓰기에 필요한 베타 락을 불허하기 때문에 쓰기가 불가능 한 것이며, 베타 락은 락을 사용하는 읽기(Locking Reads)인 경우에는 불가능하며 락을 사용하지 않는 읽기(Consistent Nonlocking Reads)인 경우에는 가능합니다.

출처

0개의 댓글