티스토리 뷰

DB

Pessimistic Lock vs Optimistic Lock

snail voyager 2022. 9. 5. 23:28
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