C.C = Concurrency Control
38*을 찾는다고하면 처음 A (20)을 lock하고 그다음 B만 필요하다는 것을 안다. 그다음 B를 lock하고 A를 release한다. 그다음 C가 필요하다는 것을 알고 C를 lock 하고 B를 release한다. 그다음 D를 lock하고 C를 release한다.
45*를 insert한다고 생각하면 A를 xlock한다. 그다음 B를 lock하고 B가 full 하지 않으므로 A를 release한다. 그다음 C를 xlock하고 full 하므로 B를 release하지 않는다. 그다음 E를 lock하는데 full 하지 않으므로 B와 C를 release한다.
Chapter 18
Strict 2PL은 Consistency와 Isolation을 보장해준다.
why abort? deadlock이 생겼을 때. or computation error (0으로 나눴을때) 같은 경우들
power lost 같은 경우.
buffer-pool이라는 것은 메모리에 바뀐다는 것이다.
steal을 허용하지 않는 것은 current transaction이 frame을 release할 때까지 기다리는 것이다. steal은 buffer frame을 stael하고 dirty page를 disk에 쓰는 것을 의미한다.
저 정책 때문에 commit이 disk에 write하는 것을 꼭 의미하지는 않는다.
STEAL에서 old value도 저장하기 때문에 각 page는 두 개의 value를 가지게 된다.
steal에 대한 보충 설명
만약 buffer에 4칸이 있고, 각각 T1, T1, T2, T3에 의해 변경되었다고 생각해보자. T4가 작업하려고하는데 공간이 없다. 따라서 commit 하지 않았다하더라도 1을 disk에 써서 공간을 확보해주고, T4가 작업할 수 있다. 만약 crash가 발생하면 UNDO 해야한다. 왜냐면 commit을 하지 않았는데 한거여서.
UNDO와 REDO의 차이를 STEAL과 NO FORCE에서 old value vs new value 차이점 봐라
단지 diff만 기록하는 것이므로 용량이 작다.