트래픽이 몰릴때 UPDATE 이슈 0 2 6,157

by 곰돌방아 [MySQL] update [2024.10.10 10:10:33]


트래픽이 몰릴때 로그를 살펴보면

아래와 같은 쿼리가 있는 곳에서 대부분 lockwait 나 lock획득을 못하는 지연이 발생되는데요

기술적으로 원인을 잘모르겠습니다.

쿼리 예시)

UPDATE PRODUCT

    product_ea = product_ea - #{param_ea}

WHERE product_code = 'CODE1234';

 

혹시나 해서 저 product_ea값을 아래와 같이 미리 계산해서 update에 적용하니

문제점이 해결된거 같기도 한데요.

<selectKey keyProperty="preProductEa" resultType="java.lang.Integer" order="BEFORE">
    SELECT IFNULL(product_ea , 0) + IFNULL(#{param_ea}, 0)
      FROM PRODUCT WHERE product_code = 'CODE1234';
</selectKey>

UPDATE PRODUCT

    product_ea = #{preProductEa}

WHERE product_code = 'CODE1234';

 

업데이트 구문에서 이런부분이 문제가 되는 이슈가 있을까요? ( MYSQL )

oracle에서는 별문제 없었던거 같기도 하고.

 

조언좀 부탁드립니다

by 마농 [2024.10.10 10:49:26]

직접 변경 방식에서 조회 후 변경하는 방식으로 바꾼 건데요.
조회와 변경 그 사이에 다른 곳에서 먼저 값을 바꿔 버리는 경우가 있을 수 있는데
이렇게 되면 잘못된 값으로 변경될 가능성이 있습니다.


by 곰돌방아 [2024.10.10 16:44:08]

답변 감사드립니다.

분리가 되어 있어도 한트랙잭션 안이라서

해당 행은 쉐어락이 걸리지 않을까 생각했었는데..

다른 해결법을 고민해 봐야하겠네요 ㅠ

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