Lect-Transactions-1-Week 12 (TEL)
Lect-Transactions-1-Week 12 (TEL)
DATABASE
SYSTEM PRINCIPLES
TRANSACTION MANAGEMENT
LOCKING-BASED CONCURRENCY CONTROL
T1 T2
time
• WRITE(A)
• READ(A)
• ABORT(A)
ADDRESSING INCONSISTENT READ
T1 T2
A := 20; B := 20;
time
WRITE(A)
READ(A)
READ(B)
WRITE(B)
ADDRESSING UNREPEATABLE READ
T1 T2
time
READ(A)
WRITE(A)
READ(A)
ADDRESSING LOST UPDATE
T1 T2
READ(A) time
READ(A)
A:= A + 5
A:= A* 1.3
WRITE(A)
WRITE(A);
TIMESTAMP ORDERING (T/O)
Idea
Overview
Timestamp
Implementation Strategies
Requirement
RT(X) WT(X)
Idea
Problems
Else
U writes X
• Allow T to read X.
T reads X
• Update RT(X) to
max(RT(X), TS(T)).
• Have to make a local
copy of X to ensure
repeatable reads for T.
T start U start
T/O RULES - WRITES
Else
U read X
• Allow T to write X and
T writes X
update WT(X).
• Also have to make a
local copy of X to
ensure repeatable
reads for T.
T start U start
EXAMPLE 1
Schedule Database
T1 T2 Object RT() WT()
TS(T1) = 1 TS(T2) = 2 A 0 0
r1(B); B 0 0
r2(B);
w2(B);
r1(A);
r2(A);
w2(A);
Commit; Commit;
r1(B); B 1 0
r2(B);
w2(B);
r1(A);
r2(A);
w2(A);
Commit; Commit;
r1(B); B 2 0
r2(B); Database
w2(B);
Object RT() WT()
r1(A); A 0 0
r2(A); B 2 2
w2(A);
Commit; Commit;
r1(B); B 2 2
r2(B);
Database
w2(B);
Object RT() WT()
r1(A);
A 1 0
r2(A);
B 2 2
w2(A);
Commit; Commit;
r1(B); B 2 2
r2(B); Database
w2(B);
Object RT() WT()
r1(A);
A 2 0
r2(A);
B 2 2
w2(A);
Commit; Commit;
r1(A); B 0 0
w2(A);
Commit;
w1(A);
r1(A);
Commit;
r1(A); B 0 0
w2(A);
Commit;
w1(A);
r1(A);
Commit;
r1(A); B 0 0
w2(A);
Commit;
Violation:
w1(A);
TS(T1) < WT(A)
r1(A);
Commit;
T1 cannot overwrite
update by T2, so the
DBMS has to abort it!
Else
• Allow T to write X and update WT(X).
EXAMPLE 2
Schedule Database
r1(A); B 0 0
w2(A);
Commit;
w1(A);
r1(A);
Commit;
r1(A); B 0 0
w2(A);
Commit;
w1(A);
r1(A);
Commit;
r1(A); B 0 0
w2(A);
Commit;
w1(A);
r1(A);
• Ignore the write and allow T1 to continue
Commit;
• T1’s write doesn’t matter! Serial schedule:
T1 -> T2
Not recoverable
Recoverable Schedule
T2 is allowed to read
the writes of T1
RECOVERABLE SCHEDULES
Schedule
T1 T2 This is not
TS(T1) = 1 TS(T2) = 2 recoverable as we
w1(A); cannot restart T1
r2(A);
w2(B);
Commit;
Abort;
T1 aborts after T2
has committed
DIRTY READ REVISITED
T1 T2
WT(A) = 1
• WRITE(A)
• READ(A)
• ABORT(A)
T1 T2
RT(B) = 2
A := 20; B := 20;
TS(T1) = 1
WRITE(A)
READ(A)
READ(B)
WRITE(B)
T1 T2
RT(A) = 2
TS(T1) = 1
READ(A)
WRITE(A)
READ(A)
T1 T2
RT(A) = 2
READ(A) TS(T1) = 1
READ(A)
A:= A + 5
A:= A* 1.3
WRITE(A)
WRITE(A);
High Overhead
Starvation
Locks TS
ONE-PASS ALGORITHMS
Timestamp Ordering-based Concurrency Control
Maintain conflict-serializability using timestamps