본문 바로가기

~2023/IT

블로킹(Blocking)과 데드락(Deadlock) 차이

반응형

 

 

 

 

블로킹(Blocking)

DBMS의 가장 작은 실행단위인 트랜잭션이 실행될 때,

접근하는 자원의 고유성을 보장하기 위해, 잠시 다른 트랜잭션의 개입을 막는 것을 의미한다.

 

최적의 성능을 위해서는 이런 트랜잭션을 최대한 짧게 진행해야한다.

 

블로킹 상태가 많을 수록, 사용자의 Latency는 길어지고, 불편함을 호소한다.

이것을 방지하지 위해 아래의 명령어를 사용한다.

 

SELECT * FROM USERS

SET LOCK_TIMEOUT 10000
GO

 

10000는 10초이다. (1000 = 1초)

 

아래의 정보를 꼭 기억하자

- set lock_timeout 0 : 블로킹이 걸려있으면 곧바로 종료

- set lock_timeout -1 : 블로킹이 걸려있으며 해지될 때까지 무작정 기다림(기본값)

 

 

데드락(Deadlock)

서로 다른 트랜잭션이 거의 동시에 발동하여

각각의 자원을 블로킹하고 있는 상태일 때, 두 트랜잭션이 서로 상대의 블로킹된 정보에 접근하고자 할 때,

서로 하염없이 기다리는 상태이다.

 

이것을 방지하기 위해 

데드락 걸렸을 때, 아래와 같이 우선순위를 미리 정해준다.

트랜잭션 쿼리 안에 아래의 내용을 기입한다.

SET DEADLOCK_PRIORITY

 

반응형