티스토리 뷰

728x90
반응형
db lock 일명 '하드락' 은 해당 테이블에 관하여 락을 걸어서 해당 테이블을 이용하고자 하는 사용자에게 대기를 거는 방식 이다. 
하드락이라고 불리는 이유는 굉장히 위험하면서도 강력한 lock 이기 때문이다.
사용되는 곳 : 동시성 제어가 요구되는 특정 정보가 공유되는 경우 사용됨
ex) 특정 데이터가 공유되며 데이터의 한정성이 결정되어야 하는 경우 ( 은행 자금, 영화 티켓 등)
하드락을 사용하기 위한 쿼리 문구
 
-테이블 잠금-
1. select ~ for update  //업데이트 잠금
2. select ~ lock in share mode //읽기 잠금
해당 테이블 전체에 대한 lock을 걸어서 동시성 제어 처리 
해당 테이블 전체에 걸 경우 모든 정보에 대해 대기열을 제시함

 

ex)table lock 작동 방식
트랜잭션 1 : SELECT * FROM test for update , lock in share mode // 테이블 전체에 lock 진행
트랜잭션 2 : SELECT * FROM test for update , lock in share mode // 트랜잭션 1에서 이미 lock이 걸려있기 때문에 대기상태 대기 순서 1
트랜잭션 3 : SELECT * FROM test for update , lock in share mode // 트랜잭션 1에서 이미 lock이 걸려있기 때문에 대기상태 대기 순서 2
트랜잭션 4 : SELECT * FROM test for update , lock in share mode // 트랜잭션 1에서 이미 lock이 걸려있기 때문에 대기상태 대기 순서 3

 

테이블 row 잠금
1. select ~  where id = 1 for update  //업데이트 잠금

2. select ~  where id = 1 lock in share mode //읽기 잠금​
해당 테이블에서 특정 row에 해당하는 정보에만 lock을 걸어 동시성 제어
특정 row가 아닌 경우 lock이 걸리지 않아 동시성 제어를 제공하지 않음 
 
ex) row  lock 작동 방식 설명
트랜잭션 1 : SELECT * FROM test where id = 1 for update , lock in share mode // 특정 id = 1 인 값에 대한 락 진행
트랜잭션  2  :   SELECT * FROM test where id = 1 for update , lock in share mode // 트랜잭션 1에서 이미 해당 id = 1에 대해서 lock을 걸어 두었기 때문에 커밋 전까지 대기
트랜잭션  3  :  SELECT * FROM test where id = 2 for update , lock in share mode // 트랜잭션 1에서 선언한 id = 1과 다른 row에 대한 조회이기 때문에 대기하지 않아도 됨
트랜잭션 4 : SELECT * FROM test where id = 2 for update , lock in share mode // 트랜잭션 3에서 이미 id = 2 에 대한 정보를 조회 하였기 때문에 커밋 전까지 대기

 

해당 db lock 실전 처리
try {
       //db lock 
             // id  : 특정 row에 lock 처리

       testMapper.selectTestLock(id);   // 쿼리 내용 : select * from test where id = {} for update, lock in share mode

       //데이터 처리...
       //commit;
    }catch (EgovBizException | IOException e) {
          //예외처리
    }

 

 

 

728x90
반응형
250x250
반응형
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함