직렬가능 스케쥴(Serializable Schedule)과 뷰 직렬가능 스케쥴(View Serializable Schedule)은 데이터베이스에서 트랜잭션들의 동시 실행을 다룰 때 사용되는 두 가지 중요한 개념입니다.
- 직렬가능 스케쥴 (Serializable Schedule):
- 직렬가능 스케쥴은 여러 트랜잭션의 병렬 실행이 마치 한 번에 직렬적으로 실행된 것처럼 보이도록 보장하는 스케쥴입니다.
- 트랜잭션들 간에 시간적인 겹침이 없고, 각 트랜잭션이 완전히 실행된 후에 다음 트랜잭션이 시작됩니다.
- 이는 트랜잭션들 간의 상호 간섭이 없고, 전체 스케쥴이 일관된 상태로 유지됨을 의미합니다.
- 뷰 직렬가능 스케쥴 (View Serializable Schedule):
- 뷰 직렬가능 스케쥴은 특정 뷰(또는 하위 집합)에 대해 직렬가능한 스케쥴입니다.
- 모든 뷰 직렬가능 스케쥴은 직렬가능 스케쥴이기도 합니다. 다시 말하면, 모든 뷰 직렬가능 스케쥴은 해당 뷰를 살펴봤을 때 직렬가능한 성질을 만족합니다.
- 일반적으로 뷰 직렬가능 스케쥴은 좀 더 유연한 동시성 제어를 제공합니다.
차이점:
- 범위 (Scope):
- 직렬가능 스케쥴: 전체 스케쥴이 직렬가능해야 합니다.
- 뷰 직렬가능 스케쥴: 특정 뷰에 대해 직렬가능하면서도 전체 스케쥴은 필요에 따라 더 유연하게 정의될 수 있습니다.
- 적용 대상 (Applicability):
- 직렬가능 스케쥴: 모든 트랜잭션 간의 상호 간섭이 없어야 하며, 전체 스케쥴이 일관된 상태를 유지해야 합니다.
- 뷰 직렬가능 스케쥴: 특정 뷰에 대해 직렬가능하면서도, 전체 스케쥴은 그것이 뷰 직렬가능성을 만족하면서도 좀 더 자유로운 상태를 갖을 수 있습니다.
뷰 직렬가능성은 일부 트랜잭션 간의 순서를 정의하면서도 전체적으로 동시성을 유지할 수 있는 유연성을 제공합니다.
예시 테이블: 고려할 테이블은 다음과 같이 두 개의 속성(A, B)을 갖는 하나의 테이블 R입니다.
| A | B |
| 1 | x |
| 2 | y |
| 3 | z |
트랜잭션 예시: 두 개의 트랜잭션 T1과 T2를 고려해 봅시다.
- T1:
- 트랜잭션 T1은 테이블 R에서 A=1인 행을 삭제합니다.
- 결과: 테이블 R에서 (1, x) 행이 삭제됨.
- 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)가 됩니다. 따라서 이 두 트랜잭션은 서로 다른 결과를 가집니다.
뷰 직렬가능성이 깨진 이유는 두 트랜잭션이 서로 다른 순서로 적용되었기 때문입니다. 이런 경우 뷰 직렬가능성을 만족시키기 위해서는 트랜잭션들 간의 순서를 정의하거나, 다른 동시성 제어 기법을 사용해야 합니다.
반응형