Concurrency control - Recoverability

yurison·2023년 1월 15일
0

Unrecoverable schedule

  • 스케쥴 내에서 commit된 트랜잭션이, rollback된 트랜잭션이 write했던 데이터를 읽은 경우
  • rollback을 해도 이전 상태로 회복 불가능할 수 있기 때문에 이런 스케쥴은 DBMS가 허용하면 안 된다.

Recoverable schedule

  • 스케쥴 내에서 그 어떤 트랜잭션도 자신이 읽은 데이터를 write한 트랜잭션(의존하고 있는 트랜잭션)이 먼저 commit/rollback 되기 전까지는 commit하지 않는다.
  • rollback할 때 이전 상태로 온전히 돌아갈 수 있기 때문에 DBMS는 이런 스케쥴만 허용해야 한다.

Cascading rollback

  • 하나의 트랜잭션이 rollback하면 의존성이 있는 다른 트랜잭션도 rollback해야 한다.
  • 여러 트랜잭션의 rollback이 연쇄적으로 일어나면 처리하는 비용이 많이 든다.

⬇️

데이터를 write한 트랜잭션이 commit/rollback한 뒤에 데이터를 읽는 스케쥴만 허용하자!

⬇️

Cascadeless schedule

  • (avoid cascading rollback)
  • 스케쥴 내에서 어떤 트랜잭션도 commit되지 않은 트랜잭션들이 write한 데이터는 읽지 않는 경우

⬇️

Strict schedule

  • 스케쥴 내에서 어떤 트랜잭션도 commit되지 않은 트랜잭션들이 write한 데이터는 쓰지도, 읽지도 않는 경우
  • rollback할 때 recovery가 쉽다. 트랜잭션 이전 상태로 돌려놓기만 하면 된다.

0개의 댓글