본문 바로가기

데이터베이스(DB)

[DB] 9. 트랜잭션(Transaction) - (2) 트랜잭션 스케줄 & 충돌, 뷰 직렬

반응형

 

 

[목차]

 

1. 트랜잭션 스케줄

 

2. 충돌 직렬 가능

 

3. 뷰 직렬 가능

 

 

  1. 트랜잭션 스케줄

 

데이터베이스에서 여러 트랜잭션이 동시에 수행될 때, 수행되는 트랜잭션의 순서에 따라서 결과가 달라질 수 있다. 이때 처리하는 순서를 스케줄이라고 한다. 

트랜잭션 스케줄은 크게 3가지로 이루어져 있다. 

 

  • 직렬(Serial) 스케줄 : 트랜잭션 별로 연산을 순차적으로 수행하는 것
  • 비직렬(Non-serial) 스케줄 : 인터리빙(Interleaving) 방식을 이용하여 트랜잭션들을 병행하여 수행하는 것
  • 직렬 가능(Serializable) 스케줄 : 직렬성을 가진 스케줄. 트랜잭션이 동시에 수행되더라도 직렬 스케줄과 동일한 결과를 갖는 것

 

  2. 충돌 직렬 가능

 

스케줄에 따라 결과가 달라지는 이유는 충돌(Conflict)이 발생하기 때문이다.

둘 이상의 트랜잭션에서 동일한 데이터에 접근할 때, 쓰기(write)연산이 하나라도 발생하면 충돌이 발생한다. 연산의 순서를 바꾸면 결과가 달라질 수 있기 때문이다. 

만약 어떤 스케줄 S가 일련의 비충돌 명령어의 교환으로 스케줄 S'으로 변환될 수 있다면, S와 S'은 충돌 동등(Conflict equivalent)이라고 한다. 

그리고 S가 직렬 스케줄과 충돌 동등, 즉 동일한 결과를 갖는다면 S를 충돌 직렬 가능(Conflict serializable)이라고 한다. 

 

 

위 그림과 같이 왼쪽의 스케줄이 오른쪽의 직렬 스케줄과 동일한 결과를 가지면 충돌 직렬 가능이라고 한다. 

만약 아래처럼 스케줄이 구성된 경우, 직렬 스케줄인 <T1, T2> or <T2, T1> 어느 쪽과도 결과가 일치하지 않으므로 충돌 직렬 가능이라고 할 수 없다. 

 

 

  3. 뷰 직렬 가능

 

같은 트랜잭션 집합을 가진 두 스케줄 S와 S'이 다음 세 조건을 만족하면 S와 S'은 뷰 동등(View equivalent)이라고 한다. 

 

1) 데이터 x에 대하여 S에서 트랜잭션 Ti가 x의 초깃값을 읽는다면, S'에서도 Ti가 초깃값을 읽어야 한다. 

2) S에서 트랜잭션 Ti가 수행한 모든 read(x)의 연산 값이 Tj가 수행한 write(x)가 생성한 값이라면, S'에서 Ti가 수행한 모든 read(x)의 연산 값도 Tj가 수행한 write(x)가 생성한 값이어야 한다. 

3) S에서 Ti가 마지막 write(x)를 수행했다면, S'에서도 Ti가 마지막으로 write(x)를 수행해야 한다. 


즉, 동일한 데이터 x에 대해서 '최초 읽기', '쓰기/읽기', '마지막 쓰기'를 수행하는 트랜잭션의 순서가 동일해야 한다는 의미이다. 

그리고 마찬가지로 S가 직렬 스케줄과 뷰 동등이라면 S를 뷰 직렬 가능(View conflict serializable)이라고 한다. 

 

모든 충돌 직렬 가능 스케줄은 뷰 직렬 가능이며, 역은 성립하지 않는다. 아래가 예시이다.

이 스케줄은 <T1, T2, T3> 직렬 스케줄과 뷰 동등이다. 조건 1과 3을 만족하고, write 연산 후의 read 연산이 없기 때문에 조건 2 또한 만족한다. 

반면 충돌 직렬 가능은 만족하지 않는다. 

 

 

PC로 보시는 것을 권장합니다. 

피드백은 언제나 환영입니다. 댓글로 달아주세요 ^-^

 

 

반응형