트렌젝션 데드락

paduck·2023년 3월 29일
0

CS/데이터베이스

목록 보기
3/3

트랜잭션(Transaction) 과 데드락(Deadlock)

트랜잭션

트랜잭션이란 데이터베이스에서 일관성과 동시성 제어를 위해 필수적인 개념이고, 일련의 연산을 하나의 논리적 단위로 묶은 것을 의미한다.

데드락

하지만 여러 개의 트랜잭션이 동시에 수행되다보면 데드락(Deadlock)이 발생할 수 있다.
데드락은 둘 이상의 트랜잭션이 서로가 각자 가지고 있는 리소스(락, 세마포어 등)를 서로 기다리면서 무한정 대기하는 상태를 의미한다!

데드락이 발생하면 해당 트랜잭션은 롤백(Rollback)되고, 다른 트랜잭션들도 대가 상태에 놓이게 된다. 이러한 상황이 발생하면 트랜잭션을 완료할 수가 없어 데이터베이스 시스템 성능이 저하되고, 처리 시간이 지연되어 시스템이 멈추게 되는 치명적인 문제가 발생할 수 있다.

데드락 해결

  1. 트랜잭션 타임아웃 설정
    트랜잭션을 수행하는 시간이 지나면 자동으로 롤백 처리를 하도록 타임아웃을 설정하는 방법이다. 이를 통해 트랜잭션이 영원히 대기하는 것을 방지할 수 있게 된다.

  2. 교착 상태 탐지 및 해결
    데이터베이스 시스템은 데드락이 발생할 경우 이를 탐지하여 해결할 수 있는 기능을 제공한다. 이를 위해서는 트랜잭션 간의 대기 그래프를 분석하여 데드락을 발견하고, 롤백을 통해 이 상황을 해결할 수 있다. 그러나 이는 비용이 매우 큰 작업이므로, 대규모 시스템에서는 사용하기 어렵다고 한다.

  3. 트랜잭션 우선순위 설정
    트랜잭션에 우선순위를 부여하여, 우선순위가 높은 트랜잭션이 기다리는 경우 우선적으로 처리하도록 하는 방법이다. 이를 통해 특정 트랜잭션이 무한정 기다리는 상황을 방지할 수 있다.

  4. 트랜잭션 분할
    트랜잭션을 여러 작은 단위로 분할하여 처리하는 방법이다. 이를 통해 대기 시간을 줄이고, 데드락 발생 가능성을 줄일 수 있다. 그러나 이는 트랜잭션의 복잡도를 증가시키고, 롤백의 범위를 증가시킬 수 있으므로 적절한 분할 기준을 설정하는 것이 중요하다고 한다.

  5. 데드락 예방
    가장 이상적인 방법은 데드락이 발생하지 않도록 예방하는 것이다. 이를 위해서는 트랜잭션 간의 대기 상태를 만들지 않도록 주의 깊게 설계하여야 하는데, 이는 굉장히 어렵다는 것으로 알고 있다!

profile
끈질기게 들러붙기

0개의 댓글