[SQL] DeadLock문제

DeMar_Beom·2023년 10월 10일
0

SQL

목록 보기
10/17

MySQL DeadLock문제

  • 작업을 하던 중에 DB에 데이터를 적재하던 중 데드락 상태가 발생
  • insert 작업 이후 select구문을 실행했는데 발생

해결방법 찾기

1. 격리수준 확인

SELECT @@GLOBAL.transaction_isolation;
-> REPEATABLE READ
  • 격리수준은 기본설정으로 되어 있는 REPEATABLE READ
  • 하지만 로컬에서 나 혼자 사용하고 있는 DB이기 때문에 격리수준은 정말 안되면 변경하기로 함

2. 로그 확인

show engine innodb status;
------------------------
LATEST DETECTED DEADLOCK
------------------------
2023-10-10 12:23:36 139925621687444
*** (1) TRANSACTION:
TRANSACTION 6422, ACTIVE 11 sec starting index read
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1128, 2 row lock(s)
MySQL thread id 629, OS thread handle 139921418274560, query id 6566 127.0.0.1 root executing
select * from dundam_user LIMIT 0, 1000
  • 해당 로그를 확인해보니 select 구문을 실행했는데 문제가 발생했다고 나옴
  • 쿼리 자체는 문제가 없다고 판단되어 다른 블로그 내용을 좀 더 살펴보기로 함

블로그 내용 참조

  • 몇 개의 블로그를 확인해보니 데드락이 주로 발생하는 요소가 몇 가지 있었다.
    • update쿼리
    • 프로시저, 함수 등에서 데이터를 적재하고 SELECT 시
    • count(*)의 fullscan
  • 나 같은 경우에는 python으로 대규모 데이터를 삽입 후 데이터가 잘 들어갔는지 확인하기 SELECT했었는데 이게 문제였었다.
  • 이제 해결방법을 2가지로 줄여보면 1번째는 격리수준을 REPEATABLE READ이하로 낮추기, Mysql재시작 후 테이블 상태 확인
  • 간편하게 Mysql재시작을 했더니 잘 진행되었으며, log를 확인해봤는데 데이터도 잘 보전되어 있었음

0개의 댓글