-
동시성 제어데이터베이스/트랜젝션, 동시성 제어, 회복 2018. 1. 29. 22:30
동시성 제어 : 트랜잭션이 동시에 수행될 때, 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 DBMS의 기능
갱신손실 문제
두 개의 트랜잭션이 한 개의 데이터를 동시에 갱신할 때 발생 (데이터베이스에서 절대 발생해서는 안됨)
락
자신이 데이터를 수정 중이라는 사실을 알리는 방법
락의 개념
락은 트랜잭션이 데이터를 읽거나 수정할 때 표시하는 잠금장치이다.
자신이 데이터를 락으로 잠그면 다른 트랜잭션은 잠금이 풀릴 때까지 기다려야 한다.
락을 사용하면 데이터에 대한 갱신을 순차적으로 진행할 수 있기 때문에 갱신손실 문제를 해결할 수 있다.
락의 유형
락은 트랜잭션이 읽기를 할 때 사용하는 공유락, 읽고 쓰기를 할 때 사용하는 배타락으로 나뉜다.
트랜잭션이 공유락과 배타락을 사용하는 규칙
데이터에 락이 걸려있지 않으면 트랜잭션은 데이터에 락을 걸 수 있음
트랜잭션이 데이터 X를 읽기만 할 경우 LS(X)를 요청하고, 읽거나 쓰기를 할 경우 LX(X)를 요청
다른 트랜잭션이 데이터에 LS(X)을 걸어둔 경우, LS(X)의 요청은 허용하고 LX(X)는 허용하지 않음
다른 트랜잭션이 데이터에 LX(X)을 걸어둔 경우, LS(X)와 LX(X) 모두 허용하지 않음
트랜잭션이 락을 허용받지 못하면 대기 상태가 됨
2단계 락킹
락을 걸고 해제하는 시점에 제한을 두지 않을 경우 두 개의 트랜잭션이 동시에 실행될 때 데이터의 일관성이 깨질 수 있다.
확장단계 : 트랜잭션이 필요한 락을 획득하는 단계로, 이 단계에서는 이미 획득한 락을 해제하지 않는다.
수축단계 : 트랜잭션이 락을 해제하는 단계로, 이 단계에서는 새로운 락을 획득하지 않는다.
데드락 (교착상태)
두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방의 데이터에 대해 락을 요청하면 무한 대기에 빠지는 현상
'데이터베이스 > 트랜젝션, 동시성 제어, 회복' 카테고리의 다른 글
트랜잭션 (0) 2018.01.29 댓글