
DB 락
- 트랜잭션을 시작하고 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없도록 함
- 먼저 들어온 세션이 락을 획득하고 작업 완료 시 락을 반납하고 대기하던 그 다음 세션이 락을 받아서 작업을 수행하고 다시 락을 반납한다
DB 락 타임아웃
- 일정 대기시간이 지난 후에도 락을 받지 못하면 타임아웃 예외가 발생함
Timeout trying to lock table ...
SET LOCK_TIMEOUT <milliseconds> : 락 타임아웃 시간을 설정한다.
- SET LOCK_TIMEOUT 10000; -- 1000 = 1초
DB 락 조회
- 조회 시에도 락 설정이 가능하다
select for update
- 예)
- 세션1 :
select * from member where member_id = 'memberA' for update;
- 세션2 :
update member set money = 2 where member_id = 'memberA';
- 세션2 : 타임아웃 예외 발생
- 세션1 :
commit;
- 세션1 : 락 반납
- 세션2 : 락 획득