교착상태 (DeadLock)

교착상태(DeadLock)은 서로 다른 두개의 작업(트랜잭션)이 리소스 잠금을 교차해서 획득하려 할 때 발생합니다.
 

deadlock_1.gif

 

가장 보편적인 DeadLock그림입니다.
T1
작업은 R1(리소스)의 잠금을 획득하고 R2를 액세스 하려 합니다
.
동시에 T2 작업은 R2(리소스)의 잠금을 획득하고 R1을 액세스 하려 합니다.
이처럼 둘중 하나가 중지되지 않는 한 빼도박도 못하는 대치 상황이 바로 교착상태입니다
.
이 교착상태는 데이터외에 다른 리소스들에서도 발생할수 있는데요자주 일어날수 있는 상황은 아니지만
충분히 가능성은 있어 보입니다간단히 몇가지만 설명드리자면

스레드 할당을 기다리는 대기작업이 어떤 리소스를 소유하고 있습니다
    
불행히도 현재 모든 스레드들의 작업들이 대기하고 있는 그 리소스를 사용해야 하는 경우입니다
.
   
예를들면 세션S1이 R1(리소스)에 공유잠금(S)을 획득하고 sleep에 빠졌습니다.
   
이때 실행가능한 모든 세션들이 R1에 단독잠금을 획득하려 하게 되는 상황입니다.
   
S1은 스레드를 할당받기 위해 대기하고 있고사용가능한 스레드들은 전부 R1의 잠금을 획득하려 하니 
   
교착상태가 발생하게 됩니다

-  
메모리관련 교착상태입니다.
   
동시에 두개의 쿼리 Q1 Q2가 각각 10MB, 20MB, 합해서 30MB가 필요한 사용자 정의 함수로 실행됩니다
   하지만 현재 사용가능한 메모리가 20MB밖에 없다고 하면 교착상태가 발생한 다고 합니다
.
   
솔직히 위내용은 문서를 보고 왜 그런지 궁금했습니다아직도 확인중에 있지만 
   
아마도 쿼리 내에서 사용자 정의함수가 각 행마다 실행되고사용자정의 함수는 행마다 리소스를 소비하게돼 

   수행 중간쯤에서 이 같은 상황이 발생되는 것 같습니다.

 

출저: 
넥슨 DB팀 :: 교착상태 (DeadLock)

이 글을 공유하기

댓글

Designed by JB FACTORY