-
shared lock와 exclusive lock의 차이점 및 활용DB 2023. 10. 22. 18:07728x90
Shared Lock이란?
- 하나의 트랜잭션이 같은 데이터를 읽을 때 읽기는 허용하지만 수정은 불가
- Read Lock이라고도 불리며, 데이터를 읽기 위해서만 사용된다.
- 읽기 요청 중에 레코드가 업데이트되는 중이 아닌지 확인합니다. (데이터의 무결성 지원)
- 모든 종류의 Update로 부터 안전하다.
- Lock-S로 표시할 수 있다.
- Lock-S 명령어를 통해 사용할 수 있다.
예시
- 두 개의 트랜잭션 1,2가 존재.
- 트랜잭션1의 작업 내용 : A값을 200으로 변경
- 트랜잭션2의 작업 내용 : A를 읽는 작업 수행
- 트랜잭션 1,2가 동시에 발생하는 상황에서 Shared Lock이 없다면 트랜잭션 2는 A를 '100'이라는 잘못된 값으로 읽음
- 반대로, 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 명령어를 통해 호출된다.
예시
- 프로모션 서비스에서 선착순 또는 부상 수량이 제한된 이벤트 개발
- 동시 다발적으로 이벤트에 참여한 유저수가 증가함.
- 참여한 유저 수를 update하는 과정에 트랜잭션을 추가(@transactional 사용)
- 해당 리소스에 대한 Lock이 걸려 있어서 순차적으로 프로세스가 수행되며 동시성 문제 또한 해결할 수 있다.
728x90'DB' 카테고리의 다른 글
[ORACLE] PIVOT 함수 사용법 (0) 2023.10.22