여러 개의 트랜잭션들이 실행을 하지못하고 서로 무한정으로 기다리는 상태
로킹(locking)
트랜잭션들의 '동시성'을 제어하기 위한 기법
로킹(locking)이 데이터가 엉망이 되는 것을 막아주는 반면, 부작용으로 교착 상태를 일으킬 수 있다.
트랜잭션
여러개의 작업을 하나의 논리적 단위로 묶어 반영과 원상복귀를 조정할 수 있기 위해 사용
논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우엔
원상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어 주는 기능
트랜잭션이 실행되기 전에 필요한 데이터를 모두 로킹(locking) 해주는 방법
데이터가 많이 필요하면 사실상 모든 데이터를 전부 로킹 해주어야 하여 트랜잭션의 '병행성'을 보장하지 못한다. 뿐만 아니라 몇몇 트랜잭션은 계속해서 처리를 못하게 되는 기아 상태가 발생할 수 있다.
ex)
자원을 할당할 때 시간 스탬프(Time Stamp)를 사용하여 교착상태가 일어나지 않도록 회피하는 방법
이런 회피기법으론 Wait-Die 방식, Wound-Wait 방식이 있다.
트랜잭션 Ti가 Tj에 의해 로킹된 데이터를 요청할 때 Ti가 먼저 들어온 트랜잭션이라면 기다리는 반면, Ti가 나중에 들어온 트랜잭션이라면 포기(Die)하고, 나중에 다시 요청
즉, 다른 트랜잭션이 데이터를 점유하고 있을 때 기다리거나(Wait) 포기(Die)하는 방식
트랜잭션 Ti가 Tj에 의해 로킹된 데이터를 요청할 때 Ti가 먼저 들어온 트랜잭션이라면 데이터를 선점(Wound)하는 반면, Ti가 나중에 들어온 트랜잭션이라면 기다린다.(Wait)
즉, 다른 트랜잭션이 데이터를 점유하고 있을 때 빼앗거나(Wound) 기다리는(Wait) 방식
트랜잭션이 실행되는 동안에는 아무런 검사를 하지 않고,
트랜잭션이 다 실행된 이후에 검사 후 문제가 있다면 되돌리는 방법
판독->확인->기록 단계를 따른다.
확인 단계를 성공적으로 거친 트랜잭션만 기록 단계를 수행할 수 있다.