배경
- 전달된 에러를 추적하다가, 아래와 같은 데드락 에러를 만나게 되었다.
InternalError: 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
- 정확한 문제 해결을 위해서 이번 기회에 데드락에 대해서 한번 더 정리를 해보고, 마리아 데이터베이스에서는 어떠한 경우에 데드락이 발생할 수 있는지를 알아보자.
데드락이란 무엇인가?
–
-
교착상태 (
deadlock
)이란 두개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로는 아무것도 완료되지 못하는 상태를 말한다. -
일반적으로 데이터베이스에서 발생하는 데드락은
DBMS
가 감지하여 실행되는 트랙잭션들 사이에 발생하는 데드락으로 각각의 트랜잭션이 사용하는 데이터들 사이의 데드락을 감지하여 알려준다.
InnoDB에서 DeadLock 확인하기
InnoDB
는 트랜잭션을 실행시 데드락이 발생하게 되면 그것을 감지하고, 하나의 트랜잭션을 롤백하여 데드락을 해소하고, 그 정보를 로그로 남긴다.
SHOW ENGINE INNODB STATUS
-
위의 구문을 통해서 정보를 얻을 수 있지만 비교적 최신 기록만 남아있다. 따라서 장애가 발생하였을 때 바로 확인해보는 것이 좋다.
-
여러가지 항목이 있는데, 항목의 자세한 값은 다음과 같다.