티스토리 뷰
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
반응형
'데이터베이스 > MYSQL' 카테고리의 다른 글
CAS(CompareAndSet) 개념 및 성능 비교 정리 (0) | 2024.07.30 |
---|---|
MySQL 격리 수준 개념 정리 (1) (0) | 2024.07.30 |
250x250
반응형
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 알고리즘
- 네이버 클라우드
- 권한
- 캐시
- 개념 이해하기
- Cache
- dfs
- 이미지
- centos7
- 정의
- dockerfile
- Java
- docker
- hazelcast
- Quartz
- 리눅스
- spring
- insert
- Lock
- LocalDate
- MySQL
- mybatis
- 캘린더
- ncp
- 격리수준
- 스케줄러
- Linux
- 도커
- 컨테이너
- leatcode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함