Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

Dead Lock 개념 본문

DB 관련 지식/DB 기본 개념

Dead Lock 개념

`O` 2024. 1. 24. 01:54
728x90
반응형

해당 페이지에서는 database 를 관리하면서 발생 할 수 있는 Dead Lock 에 대한 개념을 다룬다.

 

해당 내용은 아래의 URL 들을 참조하여 기재한다.

 

[1] https://gyoogle.dev/blog/computer-science/operating-system/DeadLock.html

 

[2] https://dataonair.or.kr/db-tech-reference/d-lounge/expert-column/?mod=document&uid=52944

 

[3] https://tecoble.techcourse.co.kr/post/2022-11-01-mysql-dead-lock/

 

[4] https://www.geeksforgeeks.org/deadlock-in-dbms/

 

또한 아래의 이전 게시글과 연관되어 있다.

 

[5]

2021.03.05 - [MySQL/아키텍처 및 내부 구조] - MySQL / MariaDB Lock 종류 (InnoDB 기준)

 

[6]

2021.03.08 - [PostgreSQL/아키텍처 및 내부 구조] - PostgreSQL / PPAS Lock 종류

 

 

Dead Lock 은  발생하는?

 

Dead Lock Database 서로 점유하려는 자원에 대해서 하나의 작업만 (트랜잭션 또는 프로세스) 순차적으로 점유하도록 사상이 반영되있다는 사항에서 기여한다. (자세한 내용은 [1] 참조) , 하나의 작업이 이미 자원을 점유하여 사용 중이라면 사용이 끝날 때까지 다른 작업이 점유를 없다는 것이다

 

 

Dead Lock 예시

 

Dead Lock 은 아래와 같은 예시를 통해 현상을 이해할 수 있다.

 

아래의 그림을 설명하는 Transaction T1 이 student 테이블에 대한 일부 또는 전체 테이블 데이터에 대한 자원 점유를 통한 lock 을 걸고 있고 이 때, Grade 테이블의 일부 데이터를 변경하려고 한다.

 

이 때, T2 는 반대로 Grade 테이블에 대해서 일부 또는 전체 테이블에 대한 자원점유를 통해 lock 을 걸고 있고 이 때, student table 을 가지고 있다.


이 상황에서 하필 T1 이 자원을 점유하여 변경하려는 Grade 테이블 내 데이터 자원을 이미 T2 가 점유하여 lock 을 걸고있으므로 T2 작업이 끝날 때 까지 대기 할 수 밖에 없다.


T2 는 반대로 Student 의 데이터를 변경하려고 하나 이미 T1 이 점유하여 Lock 을 걸고 있으니 T2 또한 대기상태에 빠진다.

결국 T1 T2 가 서로간의 lock 으로 인하여 교착상태가 되어 계속 대기하는 상태가 되고, 이를 dead lock 이라 한다.

 

출처 : https://www.geeksforgeeks.org/deadlock-in-dbms/

 

Dead Lock 해결 방법

 

결국, Dead Lock 을 해결하려면 (위의 예시 기준으로) 둘 중, 하나의 트랜잭션이 먼저 종료되거나 강제로 종료 시키는 수 밖에 없다. 그래야 선점 및 순차사용 logic 에 따라 data 를 조회, 사용 할 수 있기 때문이다.

 

각 DB engine 들은 이에 대해서 대응하기위해 각각 대응 방안을 지원한다.

반응형
Comments