오래 못 할 짓 하지 않기
[ 데이터베이스 ] 15. Concurrency control(2) - recoverability 본문
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
[ 수업 요약 ]
(출처)
유튜브 - 쉬운코드
'3학년 1학기 > 데이터베이스(DB)' 카테고리의 다른 글
[ 데이터베이스 ] 17. LOCK을 활용한 concurrency control ( 2PL protocol ) (0) | 2024.02.05 |
---|---|
[ 데이터베이스 ] 16. Isolation Level (0) | 2024.01.14 |
[ 데이터베이스 ] 14. Concurrency control (0) | 2024.01.12 |
[ 데이터베이스 ] 13. Transaction / ACID (0) | 2024.01.10 |
[ 데이터베이스 ] 12. Trigger (0) | 2024.01.09 |