데이터 정합성 for update

2024. 7. 3. 15:24DBMS/PERFORMANCE

반응형

   
  'for update' 구문을 반드시 사용해야 할 때 성능을 이유로 사용을 하지 않으면 데이터 정합성을 해칠 수 있다. 성능보다 중요한 것이 데이터 정합성이다. nowait이나 wait 옵션을 사용하면  select for update 문장을 통해 동시성을 높일 수도 있다.

 

eg.
은행 계좌 이체를 처리하는 시스템에서 두 사용자가 동시에 같은 계좌에서 돈을 인출하려고 하면, 데이터 정합성을 유지하기 위해 'for update' 구문을 사용해야 한다.

BEGIN;
SELECT balance FROM accounts WHERE account_id = 12345 FOR UPDATE;
-- balance 확인 후, 인출 처리
UPDATE accounts SET balance = balance - 100 WHERE account_id = 12345;
COMMIT;



 'for update' 구문으로 해당 계좌의 현재 잔액을 잠그고 다른 트랜잭션이 동시에 같은 계좌의 잔액을 수정하는 것을 방지한다. 'for update'를 사용하지 않으면, 동시에 두 사용자가 인출을 시도했을 때 잔액 불일치 문제가 발생할 수 있다.

또한, nowait 옵션을 사용하면 락이 걸린 상태에서 대기하지 않고 즉시 오류를 반환하며, wait 옵션을 사용하면 설정한 시간 동안 락이 해제되기를 기다릴 수 있다. 

SELECT balance FROM accounts WHERE account_id = 12345 FOR UPDATE NOWAIT;



 
 
 

 

 

반응형

'DBMS > PERFORMANCE' 카테고리의 다른 글

튜닝  (0) 2024.08.06
INDEX TUNNING  (0) 2024.07.08
B-tree index structure  (0) 2024.07.03
ROWNUM - COUNT STOPKEY  (0) 2024.04.19
두 테이블 모두가 조인 컬럼을 기준으로 파티셔닝되지 않은 경우  (0) 2024.04.18