MVCC update 문에서 where절에 명시된 컬럼은 Current 모드로 읽어오는 건가요?? 0

by 나나 [DB 기타] [2024.02.09 13:34:59]


안녕하세요. 재고수량이 마이너스가 되는 동시성 문제를 해결하려고 쿼리문에 낙관적 동시성 제어 방법을 적용하였는데요

    UPDATE prod_opt
    SET INV_QTY = INV_QTY - #{qty}
      , UPD_DTTM = now()
    WHERE OPT_COMB_NO = #{optCombNo}
    AND INV_QTY >= #{qty}

where 절에 'INV_QTY >= #{qty}' 이 부분에서 INV_QTY를 값을 읽어올 때는 Consistent 모드로 읽어오는 건가요 Current 모드로 읽어오는 건가요? 결과를 보니 Current 모드로 읽어오는 것 같긴 한데 

 

친절한 SQL 튜닝 책에서 MVCC 부분을 살펴보니 'DML 문은 Consistent 모드로 대상 레코드를 찾고', 'Consistent 모드로 DML 문이 ‘시작된 시점’에 존재했던 데이터 블록을 찾고' 이부분 때문에 너무 헷갈려서요 ㅠ 대상을 업데이트할 때는 원본 블록에 한다는 건 알겠는데 해당 update 쿼리에서 where절에 있는 데이터를 읽어올 때 Consistent 모드로 읽어오는 건지.. Current 모드로 읽어오는 건지 모르겠습니다....

by 마농 [2024.02.12 22:28:04]

업데이트 쿼리가 시작되는 시점에는 consistent 모드 읽기
최종 반영 시점에는 다시 한번 더 current 모드로 읽기
시점 차이에 따라서, 최초 읽어온 데이터와 최종 반영 데이터가 다를 수 있음.
http://www.gurubee.net/lecture/3142

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입