DB Lock의 종류와 차이점(LS, LX)

모두·2025년 3월 12일

오늘은 DB의 Lock 매커니즘에 대해서 글을 작성하려 한다.

DB Lock

  • 여러 트랜잭션이 동시에 동일한 데이터를 액세스할 때
    데이터 무결성을 유지하고 충돌을 방지하는 매커니즘

  • 종류

    • 공유 락(LS-Shared Lock)
    • 배타 락(LX-Exclusive Lock)

무결성을 유지해야 하기 때문에 동시에 수정하면 안된다.

  • 예를 들어 1에다가 1을 두번 더해야 하는데 마침 트랜잭션이 1일 때 동시에 접속을 하였다.
  • 그럼 거기다 플러스 1을 하면 2가 된다. -> 원래는 3이 되어야 한다.

공유 락(LS-Shared Lock)

  • 여러 트랜잭션이 동시에 동일한 리소스를 읽을 수 있도록 허용
  • 공유 락이 걸린 리소스는 변경할 수 없음
  • 데이터 일관성을 유지하기 위해 사용되며 주로 SELECT 쿼리에서 사용

공유락을 통하면 변경은 할 수 없지만 트랜잭션이 동시에 동일 리소스에 대해서 읽을 수는 있다.(SELECT)

  • 여러 트랜잭션이 읽기에 한해서 만 리소스 공유
  • 여기서 읽는게 아닌 수정이나 삭제를 할려고 하면 DeadLOCK 상태가 되기에 불가능

아직 COMMIT 이 않끝났는데도 공유락을 설정 할 수 있음

  • 수정이 안되기 때문에 알고 상황에 맞게 잘 사용해야함

배타 락(LX-Exclusive Lock)

  • 특정 리소스에 대해 한 트랜잭션이 배타적으로 액세스하고 변경할 수 있도록 허용
  • 배타 락이 걸린 리소스는 다른 트랜잭션이 읽거나 쓸 수 없음
  • 데이터 수정시 무결성을 보장하기 위해서 사용되며 주로 UPDATE, DELETE 쿼리에서 사용

위의 공유락과 다르게 배타 락은 오로지 한 트랜잭션이 access 할 수 있고 변경 할 수 있게 한다.

  • 첫번째 쿼리문을 살펴보면 트랜잭션 1이 끝나기 전에는 HR 사람들의 연봉은 조회도 변경도 할 수 없다.

쿼리를 살펴보면 연봉에 대해서 10프로 인상과 20프로 인상 2번이 일어나야 하기 때문에 배타 락을 걸어서 10프로 인상될 동안 20프로 트랜잭션은 기다렸다 10프로 트랜잭션이 종료되면 발동

0개의 댓글