Computer Science 모아보기 👉🏻 https://github.com/seoul-developer/CS
💋 Schedule의 분류
- schedule이란?
- 여러 트랜잭션들이 동시에 실행될 때, 각 트랜잭션이 속한 operation들의 실행 순서
스케줄은 recoverablility에 따라 아래 3가지로 분류할 수 있다.
💋 unrecoverable schedule
- Tx1이 write했던 데이터를 Tx2에서 읽고 Tx2가 commit되었는데, 이후에 Tx1이 rollback되는 경우
- 스케줄 내에서 commit된 트랜잭션이 rollback된 트랜잭션에서 write했던 데이터를 읽은 경우
위 그림에서 T2는 커밋되지 않은 T1의 write 데이터를 읽어버린다. 그 뒤 먼저 커밋해 버린다.
이후에 T1이 롤백된다. 이렇게 되면, T1의 작업은 더이상 유효하지 않으므로, T1이 write한 R(A) ⇒ 6
을 읽은 T2도 롤백되어야 한다.
하지만, T2는 이미 커밋된 상황이므로, ACID 중 Durability 속성에 따라서 롤백할 수가 없다.
unrecoverable schedule에서는, 롤백을 하더라도 이전 상태로 회복 불가능할 수 있어서, 이런 스케줄은 DBMS 차원에서 금지해야 한다.
💋 recoverable schedule (cascading rollback)
앞서 unrecoverable schedule은 dbms에서 금지했다고 했으니, recoverable schedule은 dbms에서 지원하는 스케줄이다.
- 확정되지 않은 데이터(=commit/rollback이 결정되지 않은 데이터)를 읽었다면, 그 데이터가 확정나기 전까지는 현재 트랜잭션을 커밋하지 않는 경우
- 스케줄 내에서 그 어떤 트랜잭션도 자신이 읽은 데이터를 write한 트랜잭션이 먼저 commit/rollback하기 전까지는 commit하지 않는 경우
이렇게 하면 내가 읽은 데이터가 미확정 상태에서 rollback되더라도, 현재 트랜잭션까지 rollback 시킨다면 이전 상태로 돌아갈 수 있어서, recoverable schedule이 된다.
위의 그림에서처럼, 하나의 트랜잭션(T1)이 롤백한다면, 의존성 있는 다른 트랜잭션들(T2, T3)도 함께 롤백해야 한다.
여러 트랜잭션의 롤백이 연쇄적으로 일어나면 처리 비용이 많이 드는데, 이런 경우를 cascading rollback
이라고 한다.
처리 비용이 많이 든다는 단점을 보완하기 위해서 cascadeless schedule이 등장했다.
💋 cascadeless schedule (avoid cascading rollback)
- 확정된 데이터(=commit/rollback)만을
읽는
경우 - 스케줄 내에서 어떤 트랜잭션도 commit되지 않은 트랜잭션들이 write한 데이터는
읽지
않는 경우 - 데이터를 write한 트랜잭션이 commit/rollback을 한 뒤에 데이터를
읽는
스케줄만을 허용하는 경우
이 경우에도 문제는 발생한다.
확정되지 않은 데이터를 읽지 않는다고 했지 쓰지 않는다고는 안했다.
아래 그림에서 Tx2는 커밋되었음에도 불구하고, Tx1이 롤백되면서 Tx2의 결과는 사라지게 된다.
💋 strict schedule
- 확정된 데이터(=commit/rollback)만을
읽고 쓰는
경우 - 스케줄 내에서 어떤 트랜잭션도 commit되지 않은 트랜잭션들이 write한 데이터는
쓰지도 읽지도
않는 경우 - 데이터를 write한 트랜잭션이 commit/rollback을 한 뒤에 데이터를
읽고 쓰는
스케줄만을 허용하는 경우
strict schedule에서는 Tx2는 Tx1이 write를 한 후 commit/rollback 둘 중 하나를 통해서 데이터를 확정한 후에야 그 데이터를 읽고 쓸 수 있어진다.
strict schedule은 롤백할 때 recovery가 쉽고, 롤백 시 현재 트랜잭션 이전의 상태로만 되돌려놓으면 된다는 장점이 있다.
💋 schedule의 포함관계
💋 참고자료
- https://www.geeksforgeeks.org/types-of-schedules-based-recoverability-in-dbms/
- https://levelup.gitconnected.com/the-schedule-in-the-dbms-2d8c6f19720d
- https://www.youtube.com/watch?v=89TZbhmo8zk&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=16
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!