Deadlock 해결방안

2021. 7. 20. 10:20DB/기타

발생 현황(3건)

  • 6/3 오후 19시 1건 발생(2021-06-03 19:33:55.803)
  • 6/4 오후 20시 1건 발생(2021-06-04 20:26:22.500)
  • 7/5 오후 21시 1건 발생(2021-07-05 21:28:23.273)

발생 상황

  • 글 상세 조회시 조회수 업데이트 관련 테이블에 조회수 update시 pagelock 발생

발생 원인

  • 현재 하나의 Transaction에 대량의 데이터를 처리하고있음.
    • UPDATE CNT_TABLE
      SET CNT = CNT+1
      WHERE NO=NO
      ------------------------
      ----대량 데이터 처리---- 
      ------------------------
  • Update 후 이어지는 데이터처리량이 많고 그로인한 처리시간 지연 -> lock 시간이 길어짐.

 

해결방안

  • Transaction을 세부적으로 분기
    • 가장 효율적이라고 생각
    • SP 특성상 해당 SP를 사용하는곳이 많이 존재하면 분기가 어려움.
    • ----tracnsactnion 1 -----
      UPDATE CNT_TABLE
      SET CNT = CNT+1
      WHERE NO=NO
      -----tracnsactnion 2--------
      -대량 데이터 처리 분기 1---- 
      ---------------------------
      -----tracnsactnion 3-------
      -대량 데이터 처리 분기 2---- 
      ---------------------------
      -----tracnsactnion 4-------
      -대량 데이터 처리 분기 3---- 
      ---------------------------
  • Transaction 내부의 UPDATE 발생 순서 변경
    • Transaction의 마지막에 UPDATE를 발생시키면 UPDATE로 인한 LOCK이 잠기는 시간이 감소 할 것이라고 생각.
    • 지식이 부족해 테스트 진행 중...
      • --------------------
        -대량 데이터 처리---- 
        ----------------------
        UPDATE CNT_TABLE
        SET CNT = CNT+1
        WHERE NO=NO