티스토리 뷰

DeadLock


# Overview

이전 게시글에서 데드락의 개념에 대해 알아보았습니다. 데드락의 개념적 정의에 대해서는 쉽게 이해 하였지만 MySQL에서의 데드락은 어떻게 발생되는 것인지 이해하지 못하였습니다. 직접 데드락을 발생시켜 발생 조건과 원리에 대해 이해하려고 합니다.

 

# Tip

데드락을 2가지의 경우로 발생시켜 보려고 합니다.

1. Row 1개 사용

2. Row 2개 사용

이번 게시물에서는 Row를 2개 사용하여 데드락을 발생시키는 것이 목표입니다.

 

 

1. DeadLock 발생


[ DeadLock 실행 순서 ]

# 트랜잭션1
> START TRANSACTION;
> UPDATE LOGIN_USER_DATA SET NAME="deadlock_test" WHERE ID="1";

# 트랜잭션2
> START TRANSACTION;
> UPDATE LOGIN_USER-DATA SET NAME="deadlock_test2" WHERE ID="2";

# 트랜잭션1
> DELETE FROM LOGIN_USER_DATA WHERE ID="2";

# 트랜잭션2
> UPDATE LOGIN_USER_DATA SET NAME="hi" WHERE ID="1";

 

 

2. 실험 결과


[ 결과 ]

트랜잭션2(오른쪽) 마지막 쿼리문을 실행하고 나서 데드락이 발생한 것을 확인할 수 있다.

트랜잭션1(왼쪽)은 데드락이 발생하고 나서 데드락에 빠져있던 쿼리문이 정상적으로 실행된 것을 확인할 수 있습니다.

 

데드락 발생이후 트랜잭션1과 2에서 SELECT * FORM TABLE_NAME을 실행하여 어떻게 결과가 적용되었는지 확인해 보겠습니다.

 

트랜잭션2(오른쪽)에서는 데드락에 빠져있던 마지막 쿼리문 update login_user_data set name="하이" where id="1"; 이 적용되지 않은 것을 ID 1번에서 확인할 수 있습니다. 또한 이전에 실행한 update login_user_data set name="deadlock_test2" where id="2"; 쿼리문 역시 적용되지 않고 ROLLBACK된 것을 확인할 수 있습니다.

 

 

트랜잭션1(오른쪽)은 데드락에 빠져있던 마지막 쿼리문이 delete from login_user_data where id="2";이 적용되어 ID 2번이 삭제된 것을 확인할 수 있습니다. 또한 이전에 실행한 update login_user_data set name="deadlock_test" where id="1"; 쿼리문도 정상적으로 COMMIT된 것을 확인할 수 있습니다.

 

 

즉, 데드락이 발생하게 되면 DBMS가 트랜잭션1 혹은 트랜잭션2 중 하나를 강제로 중지시켜 한 트랜잭션은 정상으로 실행되며 다른 트랜잭션은 실행을 중지시키고 변경된 데이터를 원래 상태로 되돌려 놓아 데드락을 해결하는 것을 확인할 수 있습니다.

 

 

[ DeadLock 발생 조건 설명 ]

 

데드락은 공통된 자원을 이용하기 위해 여러 개의 트랜잭션이 서로 lock을 걸어주다가 무한 대기 상태에 빠지는 것을 데드락이라 한다.

 

예를 들어 트랜잭션1에서 A에 대해 락을 걸고 트랜잭션2에서 B에 대해 락을 건다고 가정한다. 그리고 트랜잭션1에서 B에 대해 락을 걸고 트랜잭션2가 A에 대해 락을 건다면 트랜잭션1과 트랜잭션2는 서로 A, B에 대한 락을 유지하며 무한루프에 빠지게 된다. 일반적으로 데드락이 발생하면 DBMS가 트랜잭션1 혹은 트랜잭션2 중 하나를 강제로 중지시켜 한 트랜잭션은 정상적으로 실행되며 중지된 트랜잭션에서 변경한 데이터는 원래 상태로 되돌려 놓는다.

 

 

Innodb에서는 데드락이 발생하면 하나의 트랜잭션을 롤백시켜 데드락을 해결한 후 과정을 로그로 남긴다. 로그는 show engine innodb status 명령어를 통해서 확인 할 수 있다.

 

 

[ 시연 영상 ]

노트북이 오래되어 화면녹화가 불가능하였습니다. 글씨가 작아 알아보기 힘드시겠지만 어떻게 동작하는지 흐름과정만 참고해 주시면 감사겠습니다.

https://youtu.be/Z3I_PnvVPGE 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함