[데이터베이스] 동시성 제어 3, Deadlock 발생 확인 및 해결법

December 06, 2023


DBMS의 교착 상태

dbms-deadlock

문제 상황

  • T1은 Student 테이블의 lock을 보유하고, Grade 테이블의 lock을 얻을려 요청해 대기
  • T2은 Grade 테이블의 lock을 보유하고, Student 테이블의 lock을 얻을려 요청해 대기

위의 2 트랜잭션은 서로 보유중인 lock을 계속 보유하며 서로가 가지지 못한 lock을 계속 대기합니다.

Deadlock Prevention

Deadlock이 발생할 가능성을 봉쇄

  1. 모든 lock을 동시에 요청 → 거부될 경우, 모두 헤재
  2. 데이터에 순서 부여 → 순서대로 lock 요청
Wait-Die Wound-Wait
비선점적 선점적
오래된 트랜잭션이 A를 lock했고, 나중의 트랜잭션이 A를 요청했을 때, 나중의 트랜잭션은 rollback(die) 오래된 트랜잭션이 A를 lock했고, 나중의 트랜잭션이 A를 요청했을 때, 요청하는 트랜잭션은 점유 중인 트랜잭션이 자원을 해제할 때까지 Wait
나중의 트랜잭션이 A를 lock했고, 오래된 트랜잭션이 A를 요청했을 때, 오래된 트랜잭션은 Wait 나중의 트랜잭션이 A를 lock했고, 오래된 트랜잭션이 A를 요청했을 때, 점유 중인 트랜잭션을 중단시키고 해당 자원을 요청하는 오래된 트랜잭션에게 할당
원래 소유하던 나중의 트랜잭션은 rollback(wound)
중단 및 롤백이 더 자주 발생 중단 및 롤백 횟수가 비교적 적음

wait-die-wound-wait

  • 오래됨과 나중된 트랜잭션을 구분하기 위해서 둘다 타임스탬프가 필요

Deadlock Detection

  • Wait-For Graph: G = (V, E)

    • V: Set of transactions

    • E: Set of Tw → Th, where Tw is waiting for Th

    • 이 그래프에 사이클 발생시, Deadlock으로 판단

Deadlock Resolution

  • Selection of a victim transaction
  • Victim transaction의 rollback
  • Starvation의 발생 여부

예제로 보는 Deadlock

  • 예제 트랜잭션 스케줄 1

    schedule11
  • Wait-For Graph 1

    schedule-graph1
  • 예제 트랜잭션 스케줄 2

    트랜잭션 lock 예제1

    트랜잭션은 4개가 있고, 자원들은 A, B, C로 총 3개가 있습니다.

  • Wait-For Graph 2

    트랜잭션 lock 대기 그래프

    위의 트랜잭션은 사이클이 없어 deadlock이 아닙니다.

참고

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


Profile picture

이재원

이해하기 쉬운 코드를 작성하려 고민합니다.


© 2024 Won's blog Built with Gatsby