업무 중 웹 화면에서 계속 무한 로딩이 걸려 원인을 찾아보니 deadlock이 발생했다..
이로 인해 서비스중인 서버를 급하게 살리려면 서버를 재가동 해야했기에 deadlock에 대해 알아보면서
해결방법을 찾아보도록 해요 !
show engine innodb status
- wait 발생 여부와 spin wait 및 spin round의 발생 여부 등 여러 가지 정보를 보여준다.
<img src="https://velog.velcdn.com/images/sangmoki/post/7775e328-827d-4d35-9127-196c5ef08717/image.png">
- 마지막 발생한 참조키 에러 발생 내역을 확인할 수 있다.
<img src="https://velog.velcdn.com/images/sangmoki/post/5052f5ab-71d9-411a-9f56-46fe30be3a9d/image.png">
- 마지막에 발생한 데드락 내역 확인
<img src="https://velog.velcdn.com/images/sangmoki/post/6801a4ad-f604-4b8f-a38e-2874d28100ba/image.png">
- 현재 실행 중인 트랜잭션의 trx id(트랜잭션의 현재 id)
- 각각의 트랜잭션에 따라 증가해 counting 된다.
- 이 정보를 통해 현재 트랜잭션들이 어떠한 상태에서 동작중인 지를 확인할 수 있다.

- 여기서 말하는 thread는 isnert buffer thread, log thread, read thread, write thread)들이 동작하는 상태를 보여준다.
#### 6. [INSERT BUFFER AND ADAPTIVE HASH INDEX]
- 이 정보는 insert buffer와 adaptive hash의 상태를 보여준다.
#### 7. [BUFFER POOL AND MEMORY]
- 이 정보는 innodb buffer pool의 사용 상태와 memory 사용 상태를 보여준다. innodb 레벨에서 pending된 read의 수와 write의 수를 알 수 있고, 몇 개의 페이지가 읽히고 쓰였는지를 확인할 수 있다. 그 외의 정보들도 확인할 수 있다.
#### 8. [LOGS]
- 이 정보는 innodb의 log subsystem에 대한 정보를 제공한다.
- 현재 사용하는 로그의 sequence number를 확인할 수 있고 flush된 로그 번호도 확인할 수 있다.
- 발생 시간
- (1)번 트랜잭션 정보
- (1)번 트랜잭션이 사용하기 위해 기다리고 있는 row에 대한 정보
- (2)번 트랜잭션 정보
- (2)번 트랜잭션이 현재 잡고 있는 row에 대한 정보
- (2)번 트랜잭션이 사용하기 위해 기다리고 있는 row에 대한 정보
이를 통해 어디서 deadlock이 발생했고 내부 정보에 대한 내용을 간략하게 정리해보았습니다.
감사합니다.
레퍼런스
https://dataonair.or.kr/db-tech-reference/d-lounge/expert-column/?mod=document&uid=52944