솜은 코튼

[DB] 병행 제어 (동시 공용 문제점) 본문

DB

[DB] 병행 제어 (동시 공용 문제점)

솜.코 2023. 6. 2. 17:43

 

병행 제어

.

 

 

복수 사용자 DBMS는 병행성을 지원하며, 병행성은 몇 개의 트랜잭션들을 동시에 실행시키는 것이다.

동시에 사용할 수 있는 이유는 복수의 프로그램 또는 트랜잭션을 동시에 처리할 수 있는 다중프로그래밍 때문이다.

 

그러나 병행실행을 제어하지 않는다면 정확성이 없는 데이터가 만들어질 수 있다.

 

 

문제점

.

 

1. 갱신 분실

 

 

위에서 T1이 레코드 x를 판독하고 x의 값을 100만큼 증가시킨 뒤

T2가 다시 레코드 x를 판독하여 x의 값을 두 배로 변경하였다.

 

그 뒤에 T1은 자기가 변경시킨 값 x를 재기록 하였고

T2도 자기가 변경시킨 값 x를 재기록 하였다.

 

여기서 T1의 갱신 연산은 T2가 겹쳐 기록하여 분실되었다.

즉, T2만 갱신한 결과가 되고 T1의 갱신 연산은 무효가 된 것이다.

 

 

2. 모순성

 

 

위의 그림은 레코드 x와 y에 트랜잭션 T1과 T2가 동시에 접근할 때 일어나는 모순성이다.

T1은 레코드 x와 y를 각각 100씩 증가하는 것이고,

T2는 레코드 x와 y를 각각 2배씩 증가시키는 것이다.

 

T2는 x에 대한 연산만 끝났을 때 자기의 모든 연산을 실행시켰다.

T1은 다시 T2가 연산을 모두 실행시켜 끝낸 뒤에 나머지 y에 대한 연산을 마쳤다.

 

이는 데이터베이스 자체가 일관성이 없는 모순된 상태로 남게 되는 문제가 생긴다.

 

 

3. 연쇄 복귀

 

 

 

위의 그림은 T1과 T2가 레코드 x와 y를 동시에 접근할 때 일어나는 연쇄 복귀 문제이다.

 

T1이 갱신해야 될 레코드가 x와 y라 가정하면

T1은 이 중 먼저 x를 판독해서 갱신하였고

그 뒤에 T2가 x를 접근하여 갱신을 완료하였다.

 

이때 T1이 y를 판독하여 갱신하려다 문제가 발생하여

갱신을 취소하고 원래 상태로 복귀해야 되는 상황이 발생하였다고 하자

 

이렇게 되면 잘못된 데이터를 접근한 T2도 복귀해야만 된다.

그러나 T2는 이미 갱신 작업을 성공적으로 완료하고 시스템을 떠나

복귀할 수 없는 문제가 발생한 것이다.

 

 

 

 

 

 

 

 

* 해당 글은 '데이터베이스 시스템' 책을 참고하여 작성하였습니다. 출처: 데이터베이스 시스템 (이석호)