Concurrency Control!: Q Q Q Q Q
Concurrency Control!: Q Q Q Q Q
" S X
"
S true false
X false false
T1! T2!
R(A)" "
W(A)" "
" R(A)"
" W(A)"
" R(B)"
" W(B)"
" Commit"
R(B)" "
W(B)"
Commit"
T1! T2!
R(A)" "
W(A)" "
" R(A)"
" W(A)"
" R(B)"
" W(B)"
" Commit"
Abort" "
T3! T4!
Lock-X(B)" Lock-S(A)" Lock-X(B)" "
Read(B)" Read(A)" R(B)" "
B=B-50" Lock-S(B)"
Write(B)" Read(B)"
B = B-50" "
Lock-X(A)" Display(A+B)" W(B)" "
Read(A)" Unlock(A)" " Lock-S(A)"
A=A+50" Unlock(B)" " R(A)"
Write(A)" " " Lock-S(B)"
Unlock(B)" T4" Lock-X(A)" "
Unlock(A)"
"
T3"
S1 region"
S3 region"
-- not conflict serializable"
-- conflict serializable"
-- not view serializable"
-- not recoverable"
-- not recoverable"
"
"
1912
q The lock table is usually
implemented as an in-memory hash
table indexed on the name of the
T23 data item being locked."
q Situations"
14
q a lock request arrives"
q an unlock message comes"
q transaction aborts"
T1 T23
q Keep a list of locks held by each
transaction, to implement this
144 efficiently"
granted
waiting
T8
Database Management Systems II, Huiping Cao! 14!
Pitfalls of Lock-Based Protocols!
q Consider the partial schedule"
Lock-X(B)" Lock-S(A)"
Read(B)" Read(A)"
B=B-50" Lock-S(B)" T3! T4!
Write(B)" Read(B)" Lock-X(B)" "
"
Display(A+B)" R(B)" "
"
Lock-X(A)" Unlock(A)"
B = B-50" "
Read(A)" Unlock(B)"
A=A+50" "
W(B)" "
Write(A)" T4" " Lock-S(A)"
"
" R(A)"
"
Unlock(B)" " Lock-S(B)"
Unlock(A)" Lock-X(A)" "
T3"
Example:"
"
T1: S(A), R(A), " S(B)"
T2: " " X(B),W(B) " " X(C)"
T3: " " " " S(C), R(C)" " X(A)"
T4: " " " " " " X(B)"
"
"
T1" T2" T1" T2"
Tables"
Tables"
contains"
Pages"
Pages"
Tuples"
Tuples"
q The compatibility matrix for all lock modes is: "
IS IX S SIX X
IS true true true true false
IX true true false false false
S true false true false false
SIX true false false false false
X false false false false false
T1 "T2"
----------------------"
W(A)"
R(A)"
W(B)"
Commit"
An Unrecoverable Schedule"