Database/SQL

Database - 교착상태 문제를 해결하는 방법!

JaeHoney 2022. 4. 20. 21:04
반응형

DB(데이터베이스)에서의 교착상태

운영체제에서 교착상태(Dead Lock)는 각각의 프로세스가 서로의 자원을 점유하기 위해 대기하면서 문제가 발생한다

 

DB(데이터베이스)에서 교착상태여러 개의 트랜잭션(Transaction)들이 실행을 하지 못하고 서로 무한정 기다리는 상태를 의미한다.

 

트랜잭션 1이 테이블 B에 insert하게 되면서 첫 번째 행의 Lock(잠금)을 얻는다. 트랜잭션 2도 테이블 A의 첫 번째 행의 Lock(잠금)을 얻는다.

Transaction 1> start transaction; insert into B values(1);
Transaction 2> start transaction; insert into A values(1);

여기서 트랜잭션을 commit 하지 않은채 서로의 첫번째 행에 대한 잠금을 요청하면 Deadlock이 발생한다.

Transaction 1> insert into A values(1);
Transaction 2> insert into B values(1);
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

 

교착 상태 해결 방안

DB(데이버베이스)에서 교착상태(Dead Lock)을 해결하기 위한 방법은 아래와 같다.

  • 예방 기법
  • 회피 기법
  • 낙관적 병행 제어 기법
  • 빈도 줄이기 기법

 

예방 기법

대표적인 예방 기법은 아래와 같다.

  • 각 트랜잭션이 실행되기 전에 필요한 모든 자원을 Lock(잠금)한다.
    • 필요한 모든 데이터를 Lock(잠금)해야 하므로 병행성이 떨어진다.
  • SET LOCK_TIMEOUT문을 통해 일정 시간이 지나면 쿼리를 취소한다.
    • 기존의 교착상태인 데이터가 있다면, 그 데이터에 접근하는 쿼리만 취소한다.
    • 즉, 근본적인 해결책이 될 수 없다.

 

회피 기법

회피 기법은 자원을 할당할 때 시간 스탬프(Time Stamp)를 활용해서 교착상태가 일어나지 않도록 회피하는 방법이다. 예방 기법의 단점 때문에 실제로는 회피 기법이 많이 사용된다.

 

회피 기법의 종류는 크게 2가지가 있다.

  • Wait-Die 방식
    • 트랜잭션 A가 트랜잭션 B에 의해 잠금된 데이터를 요청할 때 트랜잭션 A이 먼저 들어온 트랜잭션이라면 대기(Wait)한다.
    • 트랜잭션 A가 나중에 들어온 트랜잭션이라면, 포기(Die)하고 나중에 다시 요청한다.
  • Wound-Wait 방식
    • 트랜잭션 A가 트랜잭션 B보다 먼저 들어온 트랜잭션이라면, 데이터를 선점(Wound)한다.
    • 반면, 트랜잭션A가 트랜잭션 B보다 나중에 들어온 트랜잭션이라면 대기(Wait)한다.

 

낙관적 병행 제어 기법

낙관적 병행 제어 기법은 트랜잭션이 실행되는 동안에는 검사를 수행하지 않고, 트랜잭션이 커밋된 후에 데이터에 문제가 있다면 롤백(Rollback)하는 방법이다.

 

즉, 낙관적 병행 제어 기법은 판독->확인->기록 단계를 따른다. 확인 단계를 성공적으로 거친 트랜잭션만  기록 단계를 수행할 수 있다.

 

 

빈도 줄이기

교착상태의 빈도를 낮추는 방법은 아래와 같다.

  • 트랜잭션을 자주 커밋한다.
  • 정해진 순서로 테이블에 접근한다. (위에서는 트랜잭션 1은 B->A 순, 트랜잭션 2는 A->B순으로 접근했다.)
  • 읽기 잠금 (SELECT ~ FOR UPDATE)의 사용을 피한다.
  • 테이블 단위의 Lock(잠금)을 획득해 갱신을 직렬화한다. (테이블의 복수행을 복수의 연결에서 순서 없이 갱신하면 교착상태가 자주 발생하기 때문)
  • Index 설계 (Update시 Index를 타지 않으면 테이블 전체에 Lock이 걸릴 수 있다.)
  • Isolation level(고립 수준)을 낮춘다. (서비스 검토 필요)

 

 


 

 

Reference: https://blog.naver.com/ndb796/221243161017

 

반응형