DB 락

박찬우·2024년 2월 1일

스프링 DB

목록 보기
12/53

DB 락

  • 트랜잭션을 시작하고 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에서 해당 데이터를 수정할 수 없도록 함
  • 먼저 들어온 세션이 락을 획득하고 작업 완료 시 락을 반납하고 대기하던 그 다음 세션이 락을 받아서 작업을 수행하고 다시 락을 반납한다

DB 락 타임아웃

  • 일정 대기시간이 지난 후에도 락을 받지 못하면 타임아웃 예외가 발생함
    • Timeout trying to lock table ...
  • SET LOCK_TIMEOUT <milliseconds> : 락 타임아웃 시간을 설정한다.
    • SET LOCK_TIMEOUT 10000; -- 1000 = 1초

DB 락 조회

  • 조회 시에도 락 설정이 가능하다
  • select for update
  • 예)
    1. 세션1 : select * from member where member_id = 'memberA' for update;
    2. 세션2 : update member set money = 2 where member_id = 'memberA';
    3. 세션2 : 타임아웃 예외 발생
    4. 세션1 : commit;
    5. 세션1 : 락 반납
    6. 세션2 : 락 획득
profile
진짜 개발자가 되어보자

0개의 댓글