Concurrency Control
Download
Report
Transcript Concurrency Control
Concurrency Control
Nate Nystrom
CS 632
February 6, 2001
Papers
Berenson, Bernstein, Gray, et al., "A
Critique of ANSI SQL Isolation Levels",
SIGMOD'95
Kung and Robinson, "On Optimistic
Methods for Concurrency Control",
TODS June 1981
Agrawal, Carey, and Livny, "Models for
Studying Concurrency Control
Performance: Alternatives and
Implications", SIGMOD'85
Concurrency control methods
Locking
By far, the most popular method
Deadlock, starvation
Optimistic
High abort rates
Immediate restart
Isolation Levels
Serializability is expensive to enforce
Trade correctness for performance
Transactions can run at lower isolation
levels
Repeatable read
Read committed
Read uncommitted
Basics
History: sequence of operations
Ex: r1(x) r2(y) w1(y) c1 w2(x) a2
Dependencies: wr (true), rw (anti), ww
(output)
H and H' equivalent if H' is reordering of H
and H' has same dependencies as H
H serializable if $ serial H' s.t. H H'
Concurrent T and T' conflict if both access
same item and one writes
ANSI SQL Isolation Levels
Defined in terms of proscribed
anomalies
Read Uncommitted - everything allowed
Read Committed - dirty reads
Repeatable Read - dirty reads, fuzzy reads
Serializable - dirty reads, fuzzy reads,
phantoms
Problems
Anomalies are ambiguous
w1(x) ... r2(x) ... (a1 & c2 in any order)
w1(x) ... r2(x) ... ((c1 | a1) & (c2 | a2) in any order)
First case is strict interpretation (an anomaly),
second is loose interpretation (a phenomenon)
Anomalies don't prevent some undesirable
behavior
Ex: Phantom defined to include inserts and
updates, but not deletes
Locking
T has well-formed writes (reads) if it
requests a write lock before writing
T has two-phase locking if it does not
request any lock after releasing a lock
Locks are long duration if held until
abort, else short duration
Theorem: well-formed two-phase
locking guarantees serializability
Locking Isolation Levels
0 has well-formed (i.e., short) writes
1 (read committed) - long duration write
locks
2 (read uncommitted) - short read locks,
long write locks
repeatable read - short predicate read locks,
long item read locks, long write locks
3 (serializable) - long read locks, long write
locks
Dirty Writes
ANSI definitions lack prohibition of
dirty writes
w1(x) ... w2(x) ... ((c1 | a1) & (c2 | a2) in
any order)
With dirty writes allowed, rollback is
difficult to implement (with locking CC)
Prohibiting dirty writes serializes txns
in write order (all ww dependencys go
forward)
New Definitions
Use loose interpretation
Fix definition of phantom to prevent deletes
Prohibit dirty writes
Read Uncommitted - dirty writes
Read Committed - dirty writes, dirty reads
Repeatable Read - dirty writes, dirty reads, fuzzy
reads
Serializable - dirty writes, dirty reads, fuzzy reads,
phantoms
More Problems
New definitions are too strong
Prohibits some serializable histories
r1(x) w1(x) r1(y) w1(y) r2(x) r2(y) c1 c2
T2 has dirty reads according to the
proposed new definitions
Prohibiting dirty writes useful for
recovery with locking CC, but not
helpful for optimistic CC
Other Isolation Levels
Cursor stability
Prevent lost updates by adding cursor reads
Stronger than read committed
Weaker than repeatable read
Snapshot isolation
Read from/write to a snapshot of the committed
data as of the time the transaction started
Stronger than read committed
Incomparable to repeatable read
Optimistic Concurrency Control
Divide transaction into read, validate, and
write phases
Validation checks if transaction can be
inserted into a serializable history
Why: lower message cost, little blocking in
low contention environments, no deadlock
Why not: abort rates can be high, not
suitable for interactive, non-restartable,
transactions
Validation
Assign transaction i a unique number
t(i).
Validation condition:
For all i and for all j with t(i) < t(j), one of
the following must hold:
i completes write phase before j starts read phase
2 i completes write phase before j starts write phase
and WS(i) RS(j) =
3 i completes read phase before j completes read
phase and WS(i) (RS(j) WS(j)) =
1
Validation
i
j
1.
read
validate
i
read
3.
i
j
read
validate
read
validate
validate
write
write
j
2.
read
read
write
validate
write
validate
write
WS(i) RS(j) =
write
WS(i) (RS(j) WS(j)) =
Transaction numbers
What should t(i) be?
Unique timestamp assigned at beginning of
validation phase
Guarantees that i completes read phase
before j completes read phase if t(i) < t(j)
Serial Implementation
Ensure one of conditions (1) or (2) holds
At transaction begin, record start tn
At transaction end, record finish tn
Validate against all t in [start tn+1, finish tn]
by checking if RS intersects WS(t)
(2) requires concurrent transactions write
phases are serial: put validation, assignment
of tn, and write phase in a critical section
Various optimizations to reduce size of
critical section
Parallel Implementation
Ensure one of (1), (2), and (3) hold
At transaction end, take snapshot of active
set, then add tid to active set
Validate outside CS against:
All t in [start tn+1, finish tn] by checking if RS
intersects WS(t)
All t in our snapshot of active by checking if RS or
WS intersects WS(t)
If valid, perform writes outside CS, assign
tn, and remove from active set
Performance
Agrawal: previous studies flawed
Different performance models
contradictions
Flawed assumptions
Infinite resources
Transactions progress at a rate independent of
number of concurrent transactions
Need a more complete, more realistic
model
Logical Queuing Model
COMMIT
terminals
delay
RESTART
update
update Q
UPDATE
ready Q
ACCESS
CC
blocked Q
BLOCK
think
object
more?
think?
object Q
Experiments
Compare locking, optimistic, and
immediate-restart CC
Low contention (large database)
Infinite resources
Limited resources (small database)
Multiple resources
Interactive workloads
Throughput
Large Database (1 CPU, 2 Disks)
6
Throughput
5
4
3
2
1
0
0
50
100
150
Multiprogramming Level
Blocking
Restart
Optimistic
200
Throughput
Small Database (1 CPU, 2 Disks)
6
Throughput
5
4
3
2
1
0
0
50
100
150
Multiprogramming Level
Blocking
Restart
Optimistic
200
Limited Resources
Correspondence between disk
utilization and throughput when low
contention
When high contention, correspondence
between useful disk utilization and
throughput
High contention aborts and restarts
Response Time
Small Database (1 CPU, 2 Disks)
Response Time
90
80
70
60
50
40
30
20
10
0
0
50
100
150
Multiprogramming Level
Blocking
Restart
Optimistic
200
Multiple Resources
Throughput
Small Database (10 CPUs, 20 Disks)
35
30
25
20
15
10
5
0
0
50
100
150
Multiprogramming Level
Blocking
Restart
Optimistic
200
Multiple Resources
Small Database (25 CPUs, 50 Disks)
50
45
Throughput
40
35
30
25
20
15
10
5
0
0
50
100
150
200
Multiprogramming Level
Blocking
Restart
Optimistic
Multiple Resources
As resources increase, non-blocking CC
scales better than blocking
Blocking CC thrashes waiting for locks
Optimistic CC thrashes on restarts
Immediate-restart CC reaches a
plateau due to adaptive restart delay
Conclusions
Locking has better throughput for
medium to high contention
environments
If resource utilization low enough that
waste can be tolerated, immediaterestart and optimistic CC have better
throughput
Limit multiprogramming level to avoid
thrashing due to blocking and restarts