개요
트랜잭션이 동시에 실행될 때 발생할 수 있는 다양한 문제를 해결하기 위해 스케줄링 기법이 활용된다.
이 중에서도 Recoverability Schedule은 시스템 장애 발생 시 트랜잭션의 복구 가능성을 보장하기 위한 중요한 개념이다. 본 글에서는 Recoverability Schedule의 개념과 관련된 다양한 유형들에 대해 알아보고자 한다.
Unrecoverable Schedule
Unrecoverable Schedule은 한 트랜잭션이 다른 트랜잭션의 결과를 읽는 경우, 이후 읽은 트랜잭션이 롤백될 때 읽은 트랜잭션도 함께 복구할 수 없는 스케줄을 말한다. 이러한 스케줄에서는 트랜잭션 간의 의존성이 복잡하게 얽혀 있어 시스템 장애 발생 시 데이터의 무결성을 보장하기 어렵다. 예를 들어, 트랜잭션 T1이 트랜잭션 T2의 데이터를 읽은 후 T2가 실패하여 롤백되면, T1은 잘못된 데이터를 기반으로 동작하게 되어 전체 시스템의 일관성이 깨질 수 있다. (즉, Dirty Read 상태에서만 발생 가능한 스케줄이다)
Recoverable Schedule
Recoverable Schedule은 한 트랜잭션이 다른 트랜잭션의 결과를 읽더라도, 그 결과를 기록한 트랜잭션이 커밋된 후에만 자신의 작업을 커밋할 수 있는 스케줄을 의미한다. 이를 통해 시스템 장애 시 트랜잭션의 복구 가능성을 높인다. Recoverable Schedule에서는 트랜잭션 간의 의존성이 명확하게 관리되므로, 롤백 시에도 데이터의 일관성을 유지할 수 있다. 이러한 스케줄링은 데이터베이스의 무결성을 보장하는 데 중요한 역할을 한다.
Cascading Rollback
Cascading Rollback은 한 트랜잭션의 롤백이 다른 여러 트랜잭션의 롤백을 유발하는 상황을 말한다. 이는 주로 Unrecoverable Schedule에서 발생하며, 한 트랜잭션이 실패하면 이를 참조한 다른 트랜잭션들도 연쇄적으로 롤백되어야 한다. Cascading Rollback은 시스템 복구 과정을 복잡하게 만들고, 복구 시간과 자원 소모를 증가시킨다. 따라서 이러한 상황을 방지하기 위해 Recoverable Schedule이나 Cascaedless Schedule과 같은 스케줄링 기법이 필요하다.
Cascadeless Schedule
Cascadeless Schedule은 트랜잭션이 다른 트랜잭션의 결과를 읽더라도, 해당 트랜잭션이 커밋된 후에만 자신의 작업을 커밋할 수 있는 스케줄을 의미한다. 이를 통해 Cascading Rollback의 발생 가능성을 제거한다. Cascadeless Schedule에서는 트랜잭션 간의 의존성이 명확하게 관리되므로, 한 트랜잭션의 실패가 다른 트랜잭션에 직접적인 영향을 미치지 않는다. 이로 인해 시스템의 복구 과정이 단순화되고, 데이터의 일관성이 보다 효과적으로 유지된다.
Strict Schedule
Strict Schedule은 Recoverable Schedule의 조건을 만족하면서, 트랜잭션이 다른 트랜잭션의 데이터를 수정하는 경우, 해당 데이터를 수정한 트랜잭션이 커밋된 후에만 다른 트랜잭션이 그 데이터를 수정할 수 있는 스케줄을 의미한다. Strict Schedule은 트랜잭션 간의 충돌을 완벽하게 관리하여 데이터의 무결성을 최대한 보장한다. 또한, 이 스케줄링 기법은 트랜잭션의 동시성을 높이면서도 복구 가능성을 유지하므로, 실제 데이터베이스 시스템에서 널리 사용된다.
참고 문서
'컴퓨터 공학 > DB' 카테고리의 다른 글
(RDB) 트랜젝션이 동시에 실행될 때 isolation을 보장하는 기본 이론 (feat: schedule, serializability) (0) | 2025.01.04 |
---|