오래 못 할 짓 하지 않기

[ 데이터베이스 ] 15. Concurrency control(2) - recoverability 본문

3학년 1학기/데이터베이스(DB)

[ 데이터베이스 ] 15. Concurrency control(2) - recoverability

쫑알bot 2024. 1. 13. 16:36
728x90

Uncoverable Schedule

다음과 같이 schedule을 짰다고 해보자

 

이렇게 commit까지 한 상황에서 rollback을 하려고 한다고 생각해보자.

 

Transaction 2번을 rollback을 하여, Transaction2가 실행되기 이전 상태인 200만원으로 돌려둔다.

 

▶ 그럼 Tx 2번은 더 이상 유효하지 않다.

     따라서 이것과  Tx2에서 Write한 후 그 값을 읽은 Tx1도 Rollback해야한다.

 

▶ 하지만 Tx은 이미 commit된 상태이기 때문에 durability 속성에 의해 Rollback X

 

 

[ Unrecoverable schedule ]

Schedule 내에서 commit 된 Transaction이 

Rollback된 Transaction이 write한 데이터읽은 경우

 

- Rollback을 해도 이전 상태로 돌아갈 수 없기 때문에, 이러한 schedule은 DBMS가 허용X


 

Recoverable Schedule

Recoverable 하게 scheduling 하기 위해서는

Tx2 를 먼저 commit하고, Tx1을 commit한다.

 

만약 absort가 발생하여 rollback을 한다고 해도

Tx2 먼저 rollback을 하고, Tx1를 먼저 rollback한다.

 

→ 위와 같이 의존성이 있는 경우에는

의존하고 있는 Transaction이 먼저 Commit/Rollback 하기 전까지는

먼저 Commit/Rollback하지 않는다.

 

= (다른 표현) Schdule 내에서 그 어떤 Transaction도

 자신이 읽은 데이터write한 Transaction이 먼저 Commit / Rollback 전까지는 Commit / Rollback 하지 않는 경우

 

이런 Recoverabel한 경우에는 Rollback으로 이전 상태로 돌아갈 수 있다



Cascading Schedule

● Cascading Rollback

: 하나의 Transaction이 Rollback →  의존성이 있는 다른 Transaction도 Rollback 해야한다.

 

- 단점 : 여러 transaction의 rollback이 연쇄적으로 일어나면 처리하는 비용이 많이 든다.

- 해결법  데이터를 write한 transaction이 Commit / Rollback  한 뒤에는

                    데이터를 읽는 Schedule만 허용하자

 

 

● Cascadeless Schedule

Schedule 내에서 어떤 Transaction도 [ Commit되지 않은 Transaction들이 write한 데이터 ] 를 읽지 않는 경우

 



Strict Schedule

● Strict Schedule

Schedule 내에서 어떤 Transaction도 [ Commit되지 않은 Transaction들이 write한 데이터 ] 를 읽지도 쓰지도 않는 경우

 

Cascading + Write X = Strict




[ 수업 요약 ] 

 

 

 

 

 

(출처)

유튜브 - 쉬운코드