Computer Science 모아보기 👉🏻 https://github.com/seoul-developer/CS
💋 serial schedule VS nonserial schedule
✔️ Schedule
- 여러 트랜잭션들이 동시에 실행될 때, 각 트랜잭션이 속한 operation들의 실행 순서
- 각 트랜잭션 내 operation들의 순서는 바뀌지 않는다.
✔️ Serial Schedule
- 각 트랜잭션들이 겹치지 않고
한 번에 하나씩
실행되는 스케줄 - 하나씩 차례대로 수행되므로 이상한 결과가 나오지 않는다.
- 한 번에 하나의 트랜잭션만 실행되고, 따라서 i/o 작업 때마다 cpu가 놀고 있기 때문에 성능은 구리고 현실적으로 사용할 수 없다.
✔️ Nonserial Schedule
- 트랜잭션들이
겹쳐서
실행되는 스케줄 - 동시성이 높아져서 같은 시간 동안 더 많은 트랜잭션들을 처리할 수 있다.
- 하지만, 트랜잭션들이 어떻게 순서가 얽혀 있느냐에 따라서 이상한 결과가 나올 수도 있다.
성능 때문에 nonserial schedule을 실행하면셔도, 이상한 결과가 나오는 것을 막기 위해서는 어떻게 할까?
nonserial schedule의 결과가 serial schedule의 결과와 같도록 하면 된다.
그러기 위해서는 순서에 따라서 결과가 달라지게 하는 것이 무엇인지 알아봐야 하는데, conflict다.
💋 conflict
✔️ 개념
- 서로 다른 트랜잭션 소속이
- 같은 데이터에 접근하면서
- 최소한 하나는 write operation인 경우
⇒ conflict
라고 한다.
위에서 conflicting operation은 총 3쌍이다.
- conflict operation은
순서가 바뀌면 결과가 바뀐다.
✔️ conflict equivalent
- 두 스케줄이
같은 트랜잭션
을 가지면서 - 모든 confliting operation의
순서
가 동일하면,
⇒ 두 스케줄은 conflict equivalent
하다.
위 스케줄에는 3가지 conflict가 있다.
스케줄 3, 스케줄 2에서 conflict 순서가 모두 같다.
- r2(H) ⇒ w1(H)
- w2(H) ⇒ r1(H)
- w2(H) ⇒ w1(H)
그중 스케줄 2는 serial schedule이므로 이상한 결과가 나오지는 않는다.
그런데 결과를 이상하게 할 수 있는 conflict 3가지에 대해서 스케줄 3도 모두 serial schedule인 스케줄 2와 순서가 동일하다.
스케줄 2와 스케줄 3의 결과는 같다.
⇒ 스케줄 3과 스케줄 2는 conflict equivalent하다.
✔️ conflict serializable
serial schedule과 conflict equivalent한 nonserial schedule은 conflict serializable하다!
성능 때문에 nonserial schedule을 실행하면셔도, 이상한 결과가 나오는 것이 싫다면,
⇒ conflict serializable한 nonserial schedule을 허용하면 된다!
💋 참고자료
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!