이것저것

데드락 본문

Database

데드락

nays111 2021. 1. 7. 04:50

[데드락(교착상태)이란?]

두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 Lock을 획득하고 상대방 데이터에 대하여 Lock을 요청하면 무한 대기 상태에 빠질 수 있는 현상

데이터베이스의 데드락은 운영체제의 데드락과 상당히 비슷합니다. 위의 정의를 풀어 설명하면, 공통된 자원을 이용하기 위해 여러 개의 트랜잭션이 서로 Lock을 걸어주다가 무한 대기 상태에 빠지는 것을 데드락이라고 한다.

예를 들어 먼저 T1에서 A에 대해 Lock을 걸고, T2에서 B에 대해 Lock을 걸었다고 가정해보자.

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

T1은 1번 책에 Lock을 걸고 100만큼 가격을 올리고, T2는 2번 책에 Lock을 걸고 가격을 1.1배 만큼 올리려한다.

그런데 T1이 2번책에도 Lock을 걸고 가격을 100만큼 올리려한다. 마찬가지로, T2도 1번 책에 Lock을 걸고 가격을 1.1배만큼 올리려한다. T1,T2 서로의 데이터에 지금 Lock을 걸고 있기 때문에 아무것도 할 수 없는 데드락 상태에 빠지게 된다. 그렇기 때문에 현재 예시에서는 T1을 강제로 중지시키고 T2를 정상적으로 실행되었다.

'Database' 카테고리의 다른 글

NOSQL 에 대하여  (0) 2021.04.17
Transaction - ACID  (0) 2021.02.17
2PL  (0) 2021.01.10
DBCP  (0) 2021.01.10
WAL (Write-Ahead-Logging)  (0) 2021.01.07
Comments