직렬가능 스케쥴(Serializable Schedule)과 뷰 직렬가능 스케쥴(View Serializable Schedule)은 데이터베이스에서 트랜잭션들의 동시 실행을 다룰 때 사용되는 두 가지 중요한 개념입니다.

  1. 직렬가능 스케쥴 (Serializable Schedule):
    • 직렬가능 스케쥴은 여러 트랜잭션의 병렬 실행이 마치 한 번에 직렬적으로 실행된 것처럼 보이도록 보장하는 스케쥴입니다.
    • 트랜잭션들 간에 시간적인 겹침이 없고, 각 트랜잭션이 완전히 실행된 후에 다음 트랜잭션이 시작됩니다.
    • 이는 트랜잭션들 간의 상호 간섭이 없고, 전체 스케쥴이 일관된 상태로 유지됨을 의미합니다.
  2. 뷰 직렬가능 스케쥴 (View Serializable Schedule):
    • 뷰 직렬가능 스케쥴은 특정 뷰(또는 하위 집합)에 대해 직렬가능한 스케쥴입니다.
    • 모든 뷰 직렬가능 스케쥴은 직렬가능 스케쥴이기도 합니다. 다시 말하면, 모든 뷰 직렬가능 스케쥴은 해당 뷰를 살펴봤을 때 직렬가능한 성질을 만족합니다.
    • 일반적으로 뷰 직렬가능 스케쥴은 좀 더 유연한 동시성 제어를 제공합니다.

차이점:

  • 범위 (Scope):
    • 직렬가능 스케쥴: 전체 스케쥴이 직렬가능해야 합니다.
    • 뷰 직렬가능 스케쥴: 특정 뷰에 대해 직렬가능하면서도 전체 스케쥴은 필요에 따라 더 유연하게 정의될 수 있습니다.
  • 적용 대상 (Applicability):
    • 직렬가능 스케쥴: 모든 트랜잭션 간의 상호 간섭이 없어야 하며, 전체 스케쥴이 일관된 상태를 유지해야 합니다.
    • 뷰 직렬가능 스케쥴: 특정 뷰에 대해 직렬가능하면서도, 전체 스케쥴은 그것이 뷰 직렬가능성을 만족하면서도 좀 더 자유로운 상태를 갖을 수 있습니다.

뷰 직렬가능성은 일부 트랜잭션 간의 순서를 정의하면서도 전체적으로 동시성을 유지할 수 있는 유연성을 제공합니다.

 

 

 

 

예시 테이블: 고려할 테이블은 다음과 같이 두 개의 속성(A, B)을 갖는 하나의 테이블 R입니다.

 

 

| A | B |

| 1 | x |

| 2 | y |

| 3 | z |

 

트랜잭션 예시: 두 개의 트랜잭션 T1과 T2를 고려해 봅시다.

  1. T1:
    • 트랜잭션 T1은 테이블 R에서 A=1인 행을 삭제합니다.
    • 결과: 테이블 R에서 (1, x) 행이 삭제됨.
  2. T2:
    • 트랜잭션 T2는 테이블 R에서 B=x인 행을 추가합니다.
    • 결과: 테이블 R에 (1, x) 행이 추가됨.

뷰 직렬가능성 확인: 이제 두 트랜잭션을 고려하여 뷰 직렬가능성을 확인합니다.

  • 원래 테이블 R:
  • | A | B |
  • | 1 | x |
  • | 2 | y |
  • | 3 | z | 
  • T1 적용 후:
    | A | B |
  • | 2 | y |
  • | 3 | z | 
  • T2 적용 후:
  • | A | B |
  • | 1 | x |
  • | 2 | y |
  • | 3 | z |

여기서, 트랜잭션 T1을 먼저 적용하면 결과 테이블은 (2, y), (3, z)가 됩니다. 하지만 트랜잭션 T2를 먼저 적용하면 결과 테이블은 (1, x), (2, y), (3, z)가 됩니다. 따라서 이 두 트랜잭션은 서로 다른 결과를 가집니다.

 

뷰 직렬가능성이 깨진 이유는 두 트랜잭션이 서로 다른 순서로 적용되었기 때문입니다. 이런 경우 뷰 직렬가능성을 만족시키기 위해서는 트랜잭션들 간의 순서를 정의하거나, 다른 동시성 제어 기법을 사용해야 합니다.

반응형

+ Recent posts