Git :)

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • shared lock와 exclusive lock의 차이점 및 활용
    DB 2023. 10. 22. 18:07
    728x90
    Shared Lock이란?

      

    • 하나의 트랜잭션이 같은 데이터를 읽을 때 읽기는 허용하지만 수정은 불가
    • Read Lock이라고도 불리며, 데이터를 읽기 위해서만 사용된다.
    • 읽기 요청 중에 레코드가 업데이트되는 중이 아닌지 확인합니다. (데이터의 무결성 지원)
    • 모든 종류의 Update로 부터 안전하다.
    • Lock-S로 표시할 수 있다.
    • Lock-S 명령어를 통해 사용할 수 있다.
    예시
    1. 두 개의 트랜잭션 1,2가 존재.
    2. 트랜잭션1의 작업 내용 : A값을 200으로 변경
    3. 트랜잭션2의 작업 내용 : A를 읽는 작업 수행
    4. 트랜잭션 1,2가 동시에 발생하는 상황에서 Shared Lock이 없다면 트랜잭션 2는 A를 '100'이라는 잘못된 값으로 읽음
    5. 반대로, Shared Lock이 있다면 트랜잭션 1은 트랜잭션 2가 읽기를 마친 다음에 update를 수행


    Exclusive Lock이란?

    • 데이터가 변경된다면, 해당 트랜잭션은 exclusive lock를 가지고 있으며 해당 데이터에 대한 접근을 방지
    • commit 또는 rollback 까지 해당 exclusive lock을 가지고 있음. (commit, rollback을 하기 전 까지는 해당 데이터에 접근 금지)
    • 한번에 하나의 트랜잭션만 소유할 수 있다.
    • exclusive lock을 가지고 있다면, 읽고 쓰기 모두 가능. (Write Lock 이라고도 불린다.)
    • exclusive lock, shared lock이 해당 리소스에 걸려 있다면 기다려야 한다.
    • Lock-X라고도 불린다.
    • X-Lock은 Lock-X 명령어를 통해 호출된다.
    예시
    1. 프로모션 서비스에서 선착순 또는 부상 수량이 제한된 이벤트 개발
    2. 동시 다발적으로 이벤트에 참여한 유저수가 증가함.
    3. 참여한 유저 수를 update하는 과정에 트랜잭션을 추가(@transactional 사용)
    4. 해당 리소스에 대한 Lock이 걸려 있어서 순차적으로 프로세스가 수행되며 동시성 문제 또한 해결할 수 있다.
    728x90

    'DB' 카테고리의 다른 글

    [ORACLE] PIVOT 함수 사용법  (0) 2023.10.22