티스토리 뷰
728x90
반응형
비관적 락 (Pessimistic Lock) 동시성 제어
동시성 문제가 있을 것이라 예상하고 Lock을 걸고 처리
- 하나의 트랜잭션이 자원에 Lock을 걸면 다른 트랜잭션은 기다림
- 다른 트랜잭션이 계속 기다리게 되어 성능 저하
- NO WAIT, WAIT 옵션을 사용하여 대기 시간을 제어해서 해결
- Exception을 발생 시켜 예외처리 가능, 트랜잭션 종료 처리로 동시성 증가
- 충돌이 자주 발생하는 환경에 대해서는 롤백의 횟수를 줄일 수 있으므로 성능에서 유리
- 잠시 대기가 있지만 재시도 로직 없이 한번에 처리가 가능
SELECT ...
FOR UPDATE WAIT 10;
UPDATE ...
낙관적 락 (Optimistic Lock) 동시성 제어
동시성 문제가 없을 것이라고 예상하고 후처리
- 데이터를 읽을 때는 Lock을 사용하지 않고, 데이터를 변경하는 시점에 해당 데이터 정합성 체크
- Lock을 사용하지 않기 때문에 성능 우수
- UPDATE 실패 시 자동으로 예외를 던지지 않아 개발자가 직접 처리 (Rollback 처리 비용 증가)
- 데이터 충돌이 자주 일어나지 않을 상황
- 수량이 남아있는데도 데이터 점유 재시도 로직 필요
SELECT ...;
UPDATE ...;
IF SQL%ROWCNT = 0 THEN
//Rollback
END IF;
728x90
반응형
'DB' 카테고리의 다른 글
[MySQL] JSON 조회 JSON_TABLE (0) | 2025.04.29 |
---|---|
[MySQL] JSON 조회 JSON_EXTRACT (1) | 2023.12.06 |
Oracle SELECT ~ FOR UPDATE (동시성 해결) (0) | 2022.03.23 |
Oracle ORA-01401 SELECT 문에서 발생 (0) | 2021.10.14 |
ORACLE NCHAR vs NVARCHAR2 (0) | 2021.10.07 |
반응형
300x250