DB

Recoverability

아뵹젼 2022. 4. 19.

Recoverable Schedules

동시에 실행중인 트랜잭션 중 하나에 failure 이 발생할 때의 영향을 고려해야 한다.

Recoverable schedule - 트랜잭션 Tj 가 Ti 에 의해 Write 된 데이터를 읽는다면, Ti 가 commit 하기 이전에 Tj 가 먼저 commit 을 해야한다.

-> 값을 write 하는 트랜잭션은 반드시 값을 Read하는 트랜잭션보다 먼저 commit 되어야 한다.

T8 에서 rollback 이 일어나면, T8 이 commit 을 하기 전에 T9 가 먼저 commit 을 한 상태이므로 복구가능하지 않다. 

-> database inconsistent 

 

Cascading Rollbacks

하나의 트랜잭션이 failure 하게 된다면, 연속된 트랜잭션의 rollback 이 일어나게 되는 것이다. 

-> undo 작업은 상당히 많은 시스템 작업량을 요구한다.

T10 트랜잭션에서 failure 이 일어나면 T11과 T12는 Rollback이 되어야 한다. 이것이 Cascading rollback이다.

-> 모든 트랜잭션이 commit 되지 않은 상태이므로 스케줄은 recoverable 하다.

 

Cascadeless schedule (avoid cascading aborts, ACA)

cascading rollback 이 발생할 수 없는 스케줄이다.

Ti 가 먼저 write 한 데이터를 이후에 Tj 가 읽는다면, Tj 가 데이터를 읽기 전에 Ti 는 commit 연산을 한다.

-> 트랜잭션은 항상 commit 된 데이터만을 읽게 된다.

Cascadeless schedule은 모두 Recoverable하다.

 

Relationship Between Histories

write(x) 혹은 read(x) 연산 이전에 write(x) 가 수행된다면, 그 사이에는 반드시 abort 나 commit 이 존재해야 한다.

이를 strict(ST) 라고 한다.

database 에서 요구되는 바람직한 schedule 은 serializable schedule 이면서 ACA, RC 인 스케줄이다.

SR, ST 는 너무 엄격하다.

 

ex) ACA 이지만 ST 가 아닌 스케줄

-> read 이전에 write 를 한다면 반드시 commit 을 해야함. 

ST 를 만족시키려면, T2 가 Write(X) 를 하기 전에 T1 이 commit 을 해야 했다.

 

Concurrency Control

데이터베이스가 동시성 제어를 하려면 다음과 같은 메커니즘을 제공해야 한다.

- conflict serializable
- view serializable

- 하나의 트랜잭션 만이 한 시점에서 실행될 수 있다는 정책은 serial schedule 을 생성하지만, concurrency 차원에서 성능이 좋지 않다.

- 스케쥴을 실행한 뒤에 serializability 를 테스트 하는 것은 너무 늦다. 따라서 Concurrency control protocol 이 존재한다.

 

Concurrency control protocol 은 동시에 실행되는 트랜잭션 스케줄을 허용한다.

그러나 그 스케줄들은 conflict/view serializable 을 보장해야 한다. 또한 recoverable, cascadeless 해야 한다.

'DB' 카테고리의 다른 글

Deadlock  (0) 2022.04.20
Multiple Granularity Locking  (0) 2022.04.20
Lock-based Protocols  (0) 2022.04.20
Serializability  (0) 2022.04.19
Transaction  (0) 2022.04.19

댓글