공부

[DB] S/X Lock

ironk.im 2025. 6. 24. 23:26
반응형

1. S(Shared) Lock, 공유 락

  • 데이터를 읽는 동안 쓰기에 대한 제한을 두기 위한 락
  • 여러 트랜잭션에서 동시에 공유락 획득 가능
  • X락이 설정된 경우는 공유락 획득 불가
/* 오라클 */
SELECT * FROM TEST FOR SHARE;

일반적인 SELECT SQL 수행 시 마지막에 FOR SHARE 구문을 붙이게 되면 S락을 설정할 수 있다

! 중요

공유락에 대해서 SELECT 조회를 하면 공유락이 걸린다는 오해를 하는 경우가 있다

일반적으로 SELECT를 하게 되면 공유락이 걸린다고 생각하는데 FOR SHARE을 붙여서 SELECT를 하지 않으면 공유락이 획득되지 않는다

이는 오라클이 MVCC(Multi Version Concurrency Control)로 동작하기 때문이다

오라클 기준으로 일반적으로 조회를 하는 경우에는 실제 데이터를 읽는 것이 아닌 스냅샷을 통해서 데이터를 데이터를 읽기 때문에 락의 영향을 받지 않고 데이터를 읽을 수 있다

다만 이런 경우 조회하는 시간이 오래걸리거나 하는 경우 스냅샷으로 부터 읽은 데이터가 변경되면 Ora-01555: Snapshot Too Old ****가 발생할 수 있다

 

2. X(Exclusive) Lock, 베타 락

  • 데이터 쓰기를 하는 트랜잭션에서 설정하는 락
  • 데이터를 쓰는 동안 다른 락을 허용하지 않음
  • X 락이 설정 되어있으면 S 락 또는 X 락을 설정할 수 없음
  • 베타락이 걸려있으면 데이터를 읽는 것 또한 차단
  • 동시성은 감소하나 데이터 무결성 보장
/* 오라클 */
SELECT * FROM TEST FOR UPDATE;

/* DML 시에도 X락 설정됨 */
UPDATE, DELETE

베타락은 데이터 또는 테이블에 대한 변경이 발생할 때, 그리고 SELECT 시 FOR UPDATE 구문을 붙인 경우 설정된다

반응형