TIL

트랜잭션 Schedule, Recoverability

Schedule

{read인지 write인지} {트랜잭션 번호} {건드리는 레코드} img.png

Serial schedule

Nonserial schedule

고민거리

nonserial schedule로 실행해도 데이터 정합성을 맞출 수 있을까?

→ serial schedule과 동일한 nonserial shcedule을 실행하면 어떨까?

→ ‘schedule이 동일하다’는 무엇인가

Conflict of two operations

세 가지 조건을 모두 만족하면 conflict

  1. 서로 다른 트랜잭션에 소속
  2. 같은 데이터에 접근
  3. 최소 하나는 write operation
    • 한 스케줄에서 여러 conflict가 발생할 수 있다.
    • conflict operation은 순서가 바뀌면 결과도 바뀐다.

Conflict equivalent for two schedules

스케줄들이 두 조건 모두 만족하면 conflict equivalent (스케줄이 동일하다)

  1. 두 schedule은 같은 트랜잭션을 가진다.
  2. 어떤 conflicting operations의 순서도 양쪽 schedule 모두 동일하다.

Conflict serializable

두 schedule을 보자 sched.3과 sched.2는 다음의 모든 conflict의 순서가 동일하다. img.png

즉 Conflict equivalent하다고 볼 수 있는데 sched.2는 자세히 보면 serial schedule이다.

serial schedule과 conflict equivalent일 때 이를 Conflict serializable하다고 한다.

즉 sched.3는 nonserial shedule이였음에도 불구하고 이상한 결과가 나오지 않는다.

Recoverability

특정 트랜잭션을 롤백 했을 때 전체적인 작업이 정상적으로 원래 상태로 돌아갈 수 있다는 속성을 Recoverability라고 한다. 롤백 되면 당연한 거 아니야라고 생각할 수 있지만 격리 레벨이 uncommited_read인 상황을 생각해 보자. img.png

위 그림처럼 롤백 처리된 빨간 트랜잭션의 값을 초록 트랜잭션이 읽어서 그대로 커밋 한다면 정합성에 맞지 않는 결과가 커밋되게 된다. 이를 unrecoverable schedule이라고 한다.

이런 schedule은 DBMS가 허용하면 안 된다. 그렇다면 어떤 shedule이 recoverable한가?

Recoverable Schedule

Cascading rollback

Cascadeless schedule

Strict schedule

최종 정리

참고

https://www.youtube.com/watch?v=DwRN24nWbEc

https://www.youtube.com/watch?v=89TZbhmo8zk