Transaction Management in DBMS

 
Database Applications (15-415)
DBMS Internals- Part XII
Lecture 25, April 19, 2020
 
Mohammad Hammoud
 
Today…
 
Last Two Sessions:
DBMS Internals- Part XI
Transaction Management
 
 
Today’s Session:
Transaction Management 
 (
Continue
)
 
Announcement:
PS5 is now posted. It is due on Thursday, April 23
 
 
 
 
DBMS Layers
Query Optimization
and Execution
Relational Operators
Files and Access Methods
Buffer Management
Disk Space Management
DB
Queries
Transaction
Manager
Lock
Manager
Recovery
Manager
Outline
 
Locking Protocols
 
WR, RW and WW anomalies can be avoided using a
locking protocol
 
A locking protocol:
Is 
a set of rules 
to be followed by each transaction to ensure
that only serializable schedules are allowed (
extended later
)
Associates a 
lock
 with each database object, which could be of
different types (e.g., 
shared
 or 
exclusive
)
Grants and denies locks 
to transactions according to the
specified rules
 
The part of the DBMS that keeps track of locks is called the
lock manager
 
 
 
Lock Managers
 
Usually, a lock manager in a DBMS maintains three types of
data structures:
A queue, 
Q
, for each lock, 
L
,
to hold its pending requests
 
A lock table, which keeps for
each 
L
 associated with
each object, 
O
, a record 
R
that contains:
The type of 
L
 (e.g., shared or exclusive)
The number of transactions currently holding 
L
 on 
O
A pointer to 
Q
 
A transaction table, which maintains for each transaction, 
T
, a
pointer to a list of locks held by 
T
 
 
 
 
 
Lock Queue 1
(Q1)
 
Lock Table
 
Transaction List 1 (LS1)
 
Transaction Table
Two-Phase Locking
 
A widely used locking protocol, called 
Two-Phase
Locking
 (
2PL
), has two rules:
Rule 1
: if a transaction 
T
 wants to read (or write) an
object 
O
, it first requests the lock manager for a shared
(or exclusive) lock on 
O
 
 
 
 
T0
T1
T2
Lock
Manager
 
R
e
a
d
 
R
e
q
u
e
s
t
 
o
n
 
O
b
j
e
c
t
 
O
 
“Shared”
Lock Granted
 
Queue
T0
T1
T2
Lock
Manager
 
W
r
i
t
e
 
R
e
q
u
e
s
t
o
n
 
O
b
j
e
c
t
 
O
 
Lock Denied
 
Queue
T0
T1
T2
Lock
Manager
 
R
e
a
d
 
R
e
q
u
e
s
t
 
o
n
 
O
b
j
e
c
t
 
O
 
“Shared”
Lock Granted
 
Queue
2
 
Time
 
t0
 
t1
 
t2
Two-Phase Locking
A widely used locking protocol, called 
Two-Phase
Locking
 (
2PL
), has two rules:
 
Rule 1
: if a transaction 
T
 wants to read (or write) an
object 
O
, it first requests the lock manager for a shared
(or exclusive) lock on 
O
T0
T1
T2
Lock
Manager
 
R
e
l
e
a
s
e
 
L
o
c
k
o
n
 
O
b
j
e
c
t
 
O
Queue
T0
T1
T2
Lock
Manager
 
“Exclusive” Lock
Granted
Queue
T0
T1
T2
Lock
Manager
 
R
e
l
e
a
s
e
 
L
o
c
k
 
o
n
 
O
b
j
e
c
t
 
O
Queue
2
Time
 
t3
 
t4
 
t5
2
2
Two-Phase Locking
A widely used locking protocol, called 
Two-Phase
Locking
 (
2PL
), has two rules:
 
Rule 1
: if a transaction 
T
 wants to read (or write) an
object 
O
, it first requests the lock manager for a shared
(or exclusive) lock on 
O
T0
T1
T2
Lock
Manager
Queue
T0
T1
T2
Lock
Manager
Queue
T0
T1
T2
Lock
Manager
Queue
Time
 
R
e
a
d
 
R
e
q
u
e
s
t
 
o
n
 
O
b
j
e
c
t
 
O
 
Lock Denied
1
 
R
e
a
d
 
R
e
q
u
e
s
t
 
o
n
 
O
b
j
e
c
t
 
O
 
Lock Denied
0
 
R
e
l
e
a
s
e
 
L
o
c
k
 
o
n
 
O
b
j
e
c
t
 
O
 
t6
 
t7
 
t8
1
0
1
Two-Phase Locking
A widely used locking protocol, called 
Two-Phase
Locking
 (
2PL
), has two rules:
 
Rule 1
: if a transaction 
T
 wants to read (or write) an
object 
O
, it first requests the lock manager for a shared
(or exclusive) lock on 
O
T0
T1
T2
Lock
Manager
Queue
T0
T1
T2
Lock
Manager
Queue
T0
T1
T2
Lock
Manager
Queue
Time
1
0
 
“Shared”
Lock Granted
 
“Shared”
Lock Granted
 
t9
 
t9
 
W
r
i
t
e
 
R
e
q
u
e
s
t
o
n
 
O
b
j
e
c
t
 
O
 
Lock Denied
2
 
t10
0
Two-Phase Locking
 
A widely used locking protocol, called 
Two-Phase Locking
(
2PL
), has two rules:
Rule 2
: 
T
 can release locks before it 
commits
 or 
aborts
, and
cannot request additional locks once it releases 
any
 lock
 
Thus, every transaction has a “growing” phase in which it
acquires locks, followed by a “shrinking” phase in which it
releases locks
 
 
 
 
 
# locks
 
growing phase
 
shrinking phase
 
Two-Phase Locking
 
A widely used locking protocol, called 
Two-Phase Locking
(
2PL
), has two rules:
Rule 2
: 
T
 can release locks before it 
commits
 or 
aborts
, and
cannot request additional locks once it releases 
any
 lock
 
Thus, every transaction has a “growing” phase in which it
acquires locks, followed by a “shrinking” phase in which it
releases locks
 
 
 
 
 
# locks
violation of 2PL
Resolving RW Conflicts Using 2PL
 
Suppose that T1 and T2 actions are interleaved as follows:
T1 reads A
T2 reads A, decrements A and commits
T1 tries to decrement A
 
T1 and T2 can be represented by the following schedule:
 
T1
 
T2
 
R(A)
W(A)
Commit
 
R(A)
W(A)
Commit
Exposes RW Anomaly
 
T1
 
T2
 
EXCLUSIVE
(A)
R(A)
W(A)
Commit
 
EXCLUSIVE
(A)
R(A)
W(A)
Commit
 
Lock
(A)
 
Wait
RW
Conflict
Resolved!
 
Resolving RW Conflicts Using 2PL
 
Suppose that T1 and T2 actions are interleaved as follows:
T1 reads A
T2 reads A, decrements A and commits
T1 tries to decrement A
 
T1 and T2 can be represented by the following schedule:
 
T1
 
T2
 
R(A)
 
 
 
W(A)
Commit
 
 
R(A)
W(A)
Commit
Exposes RW Anomaly
 
T1
 
T2
 
EXCLUSIVE
(A)
R(A)
 
W(A)
Commit
 
Lock
(A)
 
Wait
But, it can
limit
parallelism!
 
 
EXCLUSIVE
(A)
R(A)
W(A)
Commit
Resolving WW Conflicts Using 2PL
 
Suppose that T1 and T2 actions are interleaved as follows:
T1 sets Mohammad’s Salary to $1000
T2 sets Ahmad’s Salary to $2000
T1 sets Ahmad’s Salary to $1000
T2 sets Mohammad’s Salary to $2000
 
T1 and T2 can be represented by the following schedule:
 
T1
 
T2
 
W(MS)
W(AS)
Commit
 
W(AS)
W(MS)
Commit
Exposes WW Anomaly 
(
assuming, MS & AS must be kept equal
)
 
T1
 
T2
 
EXCLUSIVE
(MS)
EXCLUSIVE
(AS)
W(MS)
W(AS)
Commit
 
EXCLUSIVE
(AS)
EXCLUSIVE
(MS)
W(AS)
W(MS)
Commit
 
Lock
(AS)
 
Wait
WW
Conflict
Resolved!
Resolving WW Conflicts Using 2PL
Suppose that T1 and T2 actions are interleaved as follows:
T1 sets Mohammad’s Salary to $1000
T2 sets Ahmad’s Salary to $2000
T1 sets Ahmad’s Salary to $1000
T2 sets Mohammad’s Salary to $2000
T1 and T2 can be represented by the following schedule:
T1
T2
W(MS)
W(AS)
Commit
W(AS)
W(MS)
Commit
Exposes WW Anomaly 
(
assuming, MS & AS must be kept equal
)
T1
T2
EXCLUSIVE
(MS)
W(MS)
Lock
(AS)
EXCLUSIVE
(AS)
W(AS)
Lock
(MS)
Wait
Deadlock!
Wait
Resolving WR Conflicts
 
Suppose that T1 and T2 actions are 
interleaved
 as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B
T1 credits $100 to account B
 
T1 and T2 can be represented by the following schedule:
 
T1
 
T2
 
R(A)
W(A)
R(B)
W(B)
Commit
 
R(A)
W(A)
R(B)
W(B)
Commit
Exposes WR Anomaly
 
T1
 
T2
 
EXCLUSIVE
(A)
EXCLUSIVE
(B)
R(A)
W(A)
R(B)
W(B)
Commit
 
EXCLUSIVE
(A)
EXCLUSIVE
(B)
R(A)
W(A)
R(B)
W(B)
Commit
 
Lock
(A)
 
Wait
 
Lock
(B)
WR
Conflict
Resolved!
Resolving WR Conflicts
Suppose that T1 and T2 actions are 
interleaved
 as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B
T1 credits $100 to account B
T1 and T2 can be represented by the following schedule:
T1
T2
R(A)
W(A)
R(B)
W(B)
Commit
R(A)
W(A)
R(B)
W(B)
Commit
Exposes WR Anomaly
T1
T2
EXCLUSIVE
(A)
EXCLUSIVE
(B)
R(A)
W(A)
RELEASE(A)
R(B)
W(B)
Commit
EXCLUSIVE
(A)
R(A)
W(A)
EXCLUSIVE
(B)
R(B)
W(B)
Commit
Lock
(A)
Wait
Lock
(B)
WR
Conflict is
NOT
Resolved!
How can
we solve
this?
Strict
 Two-Phase Locking
 
WR conflicts (as well as RW & WW) can be solved by
making 2PL 
stricter
 
In particular, 
Rule 2
 in 2PL can be modified
as follows:
Rule 2
: locks of a transaction 
T
 can only be released
after 
T
 completes (i.e., commits or aborts)
 
This version of 2PL is called 
Strict
 Two-Phase Locking
 
 
Resolving WR Conflicts: 
Revisit
Suppose that T1 and T2 actions are 
interleaved
 as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B
T1 credits $100 to account B
T1 and T2 can be represented by the following schedule:
T1
T2
R(A)
W(A)
R(B)
W(B)
Commit
R(A)
W(A)
R(B)
W(B)
Commit
Exposes WR Anomaly
T1
T2
EXCLUSIVE
(A)
EXCLUSIVE
(B)
R(A)
W(A)
RELEASE(A)
R(B)
W(B)
Commit
EXCLUSIVE
(A)
R(A)
W(A)
EXCLUSIVE
(B)
R(B)
W(B)
Commit
Lock
(A)
Wait
Lock
(B)
Not allowed with 
strict
 2PL
Resolving WR Conflicts: 
Revisit
Suppose that T1 and T2 actions are 
interleaved
 as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B
T1 credits $100 to account B
T1 and T2 can be represented by the following schedule:
T1
T2
R(A)
W(A)
R(B)
W(B)
Commit
R(A)
W(A)
R(B)
W(B)
Commit
Exposes WR Anomaly
T1
T2
EXCLUSIVE
(A)
EXCLUSIVE
(B)
R(A)
W(A)
R(B)
W(B)
Commit
EXCLUSIVE
(A)
EXCLUSIVE
(B)
R(A)
W(A)
R(B)
W(B)
Commit
Lock
(A)
Wait
Lock
(B)
WR Conflict
is Resolved!
But,
parallelism
is limited
more!
2PL vs. Strict 2PL
 
Two-Phase Locking (2PL):
Limits concurrency
May lead to deadlocks
May have ‘dirty reads’
 
Strict 2PL:
Limits concurrency more
(
but
, actions of different
transactions can still be interleaved)
May still lead to deadlocks
Avoids ‘dirty reads’
 
T1
 
T2
 
SHARED(A)
R(A)
EXCLUSIVE(C)
R(C)
W(C)
Commit
 
SHARED(A)
R(A)
EXECLUSIVE(B)
R(B)
W(B)
Commit
A Schedule with 
Strict 2PL
and 
Interleaved Actions
Performance of Locking
 
Locking comes with delays mainly from 
blocking
 
Usually, the first few transactions are unlikely to conflict
Throughput can rise in proportion to the number of active
transactions
 
As more transactions are executed concurrently, the
likelihood of blocking increases
Throughput will increase more slowly with the number of
active transactions
 
There comes a point when adding another active
transaction will actually decrease throughput
When the system 
thrashes
!
Performance of Locking (
Cont’d
)
 
If a database begins to 
thrash
, the DBA should
reduce the number of active transactions
 
Empirically, thrashing is seen to occur when
30% of active transactions are blocked!
# of Active Transactions
Throughput
Thrashing
Outline
 
Schedules with 
Aborted
 Transactions
 
Suppose that T1 and T2 actions are interleaved as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B, and commits
T1 is aborted
 
T1 and T2 can be represented by the following schedule:
 
T1
 
T2
 
R(A)
W(A)
Abort
 
R(A)
W(A)
R(B)
W(B)
Commit
T2 read a value for A that should have never been there!
How can we deal with the situation, assuming T2
had not yet committed
?
Schedules with 
Aborted
 Transactions
Suppose that T1 and T2 actions are interleaved as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B, and commits
T1 is aborted
T1 and T2 can be represented by the following schedule:
T1
T2
R(A)
W(A)
Abort
R(A)
W(A)
R(B)
W(B)
Commit
We can 
cascade
 the abort of T1 by aborting T2 as well!
This “cascading process” can be 
recursively
 applied to
any transaction that read A written by T1
T2 read a value for A that should have never been there!
Schedules with 
Aborted
 Transactions
Suppose that T1 and T2 actions are interleaved as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B, and commits
T1 is aborted
T1 and T2 can be represented by the following schedule:
T1
T2
R(A)
W(A)
Abort
R(A)
W(A)
R(B)
W(B)
Commit
How can we deal with the situation, assuming T2
had actually committed
?
The schedule is indeed 
unrecoverable
!
T2 read a value for A that should have never been there!
Schedules with 
Aborted
 Transactions
Suppose that T1 and T2 actions are interleaved as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B, and commits
T1 is aborted
T1 and T2 can be represented by the following schedule:
T1
T2
R(A)
W(A)
Abort
R(A)
W(A)
R(B)
W(B)
Commit
For a schedule to be 
recoverable
, transactions
should commit only after all transactions whose
changes they read commit!
Recoverable schedules
” avoid 
cascading aborts
!
T2 read a value for A that should have never been there!
Schedules with 
Aborted
 Transactions
Suppose that T1 and T2 actions are interleaved as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B, and commits
T1 is aborted
T1 and T2 can be represented by the following schedule:
T1
T2
R(A)
W(A)
Abort
R(A)
W(A)
R(B)
W(B)
Commit
How can we ensure “recoverable schedules”?
By using Strict 2PL!
T2 read a value for A that should have never been there!
Schedules with 
Aborted
 Transactions
Suppose that T1 and T2 actions are interleaved as follows:
T1 deducts $100 from account A
T2 adds 6% interest to accounts A and B, and commits
T1 is aborted
T1 and T2 can be represented by the following schedule:
T1
T2
R(A)
W(A)
Abort
R(A)
W(A)
R(B)
W(B)
Commit
 
T1
 
T2
 
EXCLUSIVE
(A)
R(A)
W(A)
Abort
UNDO(T1)
 
EXCLUSIVE
(A)
R(A)
W(A)
EXCLUSIVE
(B)
R(B)
W(B)
Commit
 
Lock
(A)
 
Wait
Cascaded
aborts are
avoided!
Serializable Schedules: 
Redefined
 
Two schedules are said to be 
equivalent
 if for any database
state, the effect of executing the 1st schedule is 
identical
 to
the effect of executing the 2nd schedule
 
Previously
: a 
serializable schedule 
is a schedule that is
equivalent to a serial schedule
 
Now
: a 
serializable schedule 
is a schedule that is equivalent
to a serial schedule 
over a set of committed transactions
 
This definition captures 
serializability
 as well as 
recoverability
 
 
Now…
 
Lock Conversions
 
A transaction may need to change the lock it
already acquires on an object
From Shared to Exclusive
This is referred to as 
lock upgrade
From Exclusive to Shared
This is referred to as 
lock downgrade
 
For example, an SQL update statement might
acquire a Shared lock 
on each row
, 
R
, in a table
and if 
R
 satisfies the condition (in the WHERE
clause), an Exclusive lock must be obtained for 
R
Lock Upgrades
 
A lock upgrade request from a transaction 
T
 on object 
O
must be handled specially by:
Granting an Exclusive lock to 
T
 immediately 
if no other
transaction holds a lock on 
O
Otherwise, queuing 
T
 at the 
front
 of 
O
’s queue
(i.e., 
T
 is favored
)
 
T
 is 
favored
 because it already holds a Shared lock on 
O
Queuing 
T 
in front of
 another transaction 
T’
 that holds no lock
on 
O
, but requested an Exclusive lock on 
O
 averts a deadlock!
However, if 
T
 and 
T’
 hold a Shared lock on 
O
, and both request
upgrades to an Exclusive lock, a deadlock will arise regardless!
 
Lock Downgrades
 
Lock upgrades can be entirely avoided by obtaining
Exclusive locks 
initially
, and downgrade them to Shared
locks once needed
 
Would this violate any 2PL requirement?
On the surface yes; since the transaction (say, 
T
) may need to
upgrade later
 
This is a special case as 
T
 
conservatively
 obtained an Exclusive
lock, and did nothing but read the object that it downgraded
 
2PL can be safely extended to allow lock downgrades in the
growing phase, 
provided that the transaction has not
modified the object
 
 
Outline
 
Deadlock Detection
 
The lock manager maintains a structure called a 
waits-for
graph 
to 
periodically
 detect deadlocks
 
In a waits-for graph:
The nodes correspond to active transactions
There is an edge from Ti to Tj 
if and only if
 Ti is waiting for Tj
to release a lock
 
The lock manager 
adds
 and 
removes
 edges to and from a
waits-for graph when it 
queues
 and 
grants
 lock requests,
respectively
 
A deadlock is detected when a 
cycle 
in the waits-for graph
is found
 
Deadlock Detection (
Cont’d
)
 
The following schedule is free of deadlocks:
 
 
T1
 
T2
 
S(A)
R(A)
S(B)
 
X(B)
W(B)
X(C)
 
S(C)
R(C)
 
X(B)
 
T3
 
T4
T1
T2
T4
T3
 
*
The nodes correspond to active transactions and there is an edge from Ti to Tj 
if and only
if
 Ti is waiting for Tj to release a lock
The Corresponding 
Waits-For Graph
*
A schedule 
without
 a deadlock
 
No cycles; hence, no deadlocks!
Deadlock Detection (
Cont’d
)
The following schedule is 
NOT
 free of deadlocks:
T1
T2
S(A)
R(A)
S(B)
X(B)
W(B)
X(C)
S(C)
R(C)
X(A)
X(B)
T3
T4
T1
T2
T4
T3
*
The nodes correspond to active transactions and there is an edge from Ti to Tj 
if and only
if
 Ti is waiting for Tj to release a lock
The Corresponding 
Waits-For Graph
*
A schedule 
with
 a deadlock
 
Deadlock Detection (
Cont’d
)
 
The following schedule is 
NOT
 free of deadlocks:
 
 
T1
 
T2
 
S(A)
R(A)
 
 
S(B)
 
 
 
X(B)
W(B)
 
 
 
X(C)
 
 
 
 
 
 
S(C)
R(C)
 
 
X(A)
 
 
 
 
 
 
 
 
 
X(B)
 
T3
 
T4
T1
T2
T4
T3
 
*
The nodes correspond to active transactions and there is an edge from Ti to Tj 
if and only
if
 Ti is waiting for Tj to release a lock
The Corresponding 
Waits-For Graph
*
A schedule 
with
 a deadlock
 
Cycle detected; hence, a deadlock!
Resolving Deadlocks
 
A deadlock is resolved by aborting a transaction that is
on a cycle and releasing its locks
This allows some of the waiting transactions to proceed
 
The choice of which transaction to abort can be made
using different criteria:
The one with the fewest locks
Or the one that has done the least work
Or the one that is farthest from completion (
more accurate
)
 
Caveat
: a transaction that was aborted in the past,
should be 
favored
 subsequently and not aborted upon
a deadlock detection!
 
 
Deadlock Prevention
 
Studies indicate that deadlocks are relatively infrequent
and 
detection-based schemes 
work well in practice
 
However, if there is a high level of 
contention
 for locks,
prevention-based schemes 
could perform better
 
Deadlocks can be averted by giving each transaction a
priority
 and ensuring that lower-priority transactions are
not allowed to wait for higher-priority ones
(or vice versa)
 
 
Deadlock Prevention (
Cont’d
)
 
One way to assign priorities is to give each
transaction a 
timestamp
 when it is started
Thus, the lower the timestamp, the higher is the
transaction’s priority
 
If a transaction 
Ti
 requests a lock and a transaction
Tj
 holds a conflicting lock, the lock manager can
use one of the following policies:
Wound-Wait
: If 
Ti
 has higher priority, 
Tj
 is aborted;
otherwise, 
Ti
 waits
Wait-Die
: If 
Ti
 has higher priority, it is allowed to wait;
otherwise, it is aborted
 
 
 
Reissuing Timestamps
 
A subtle point is that we must ensure that no
transaction is perennially aborted because it never had
a sufficiently high priority
 
To avoid that, when a transaction is aborted and
restarted, it should be given the same timestamp it
had originally
This policy is referred to as 
reissuing timestamps
 
Reissuing timestamps ensures that each transaction
will eventually become the oldest and accordingly get
all the locks it requires!
 
 
 
 
 
Outline
 
Dynamic Databases
 
Thus far, we have assumed 
static databases
 
We now relax that condition and assume 
dynamic
databases
 (i.e., databases that grow and shrink)
 
To study locking protocols for dynamic databases,
we consider the following:
A Sailors relation S
A transaction 
T1
 which 
only
 scans S to find the oldest
Sailor for specific rating levels
A transaction 
T2
 which updates Sailor while T1 is running
A Possible Scenario
 
Assume a scenario whereby the actions of 
T1
 and 
T2 
are
interleaved
 
as follows:
T1
 identifies all 
pages
 containing Sailors with rating 1 (say,
pages 
A
 and 
B
)
T1
 finds the age of the oldest Sailor with rating 1 (say, 71)
T2
 inserts a new Sailor with rating 1 and age 96 (perhaps
into page 
C
 which does not contain any Sailor with rating 1)
T2
 locates the page containing the oldest Sailor with rating 2
(say, page 
D
) and deletes this Sailor (whose age is, say, 80)
T2
 commits
T1
 identifies all pages containing Sailors with rating 2 (say
pages 
D
 and 
E
), and finds the age of the oldest such Sailor
(which is, say, 63)
T1
 commits
 
A Possible Scenario (
Cont’d
)
 
We can apply strict 2PL to the given interleaved actions
of 
T1
 and 
T2
 as follows (
S
 = Shared; 
X
 = Exclusive):
 
 
T1
 
T2
 
R(A)
R(B)
R(D)
R(E)
Commit
 
R(C)
W(C)
R(D)
W(D)
Commit
 
T1
 
T2
 
S(A)
R(A)
S(B)
R(B)
S(D)
R(D)
S(E)
R(E)
Commit
 
E(C)
R(C)
W(C)
E(D)
R(D)
W(D)
Commit
A Possible Scenario (
Cont’d
)
We can apply strict 2PL to the given interleaved actions
of 
T1
 and 
T2
 as follows (
S
 = Shared; 
X
 = Exclusive):
T1
T2
R(A)
R(B)
R(D)
R(E)
Commit
R(C)
W(C)
R(D)
W(D)
Commit
T1
T2
S(A)
R(A)
S(B)
R(B)
S(D)
R(D)
S(E)
R(E)
Commit
E(C)
R(C)
W(C)
E(D)
R(D)
W(D)
Commit
A tuple with 
rating 1 and 
age 71 is 
returned
A tuple with rating 1 
and age 96 is inserted
A tuple with rating 2 
and age 80 is deleted
A tuple with 
rating 2 and 
age 63 is 
returned
A Possible Scenario (
Cont’d
)
 
One possible 
serial execution
 of 
T1
 and 
T2
 is as follows
(
S
 = Shared; 
X
 = Exclusive):
 
 
T1
 
T2
 
R(A)
R(B)
R(D)
R(E)
Commit
 
R(C)
W(C)
R(D)
W(D)
Commit
 
T1
 
T2
 
S(A)
R(A)
S(B)
R(B)
S(D)
R(D)
S(E)
R(E)
Commit
 
E(C)
R(C)
W(C)
E(D)
R(D)
W(D)
Commit
A tuple with 
rating 1 and 
age 71 is 
returned
A tuple with rating 1 
and age 96 is inserted
A tuple with rating 2 
and age 80 is deleted
A tuple with 
rating 2 and 
age 80 is 
returned
A Possible Scenario (
Cont’d
)
 
Another possible 
serial execution
 of T1 and T2 is as
follows (
S
 = Shared; 
X
 = Exclusive):
 
 
T1
 
T2
 
R(A)
R(B)
R(D)
R(E)
Commit
 
R(C)
W(C)
R(D)
W(D)
Commit
 
T1
 
T2
 
S(A)
R(A)
S(B)
R(B)
S(C)
R(C)
S(D)
R(D)
S(E)
R(E)
Commit
 
E(C)
R(C)
W(C)
E(D)
R(D)
W(D)
Commit
A tuple with 
rating 1 and 
age 96 is 
returned
A tuple with rating 1 
and age 96 is inserted
A tuple with rating 2 
and age 80 is deleted
A tuple with 
rating 2 and 
age 63 is 
returned
A Possible Scenario: 
Revisit
We can apply strict 2PL to the given interleaved actions
of 
T1
 and 
T2
 as follows (
S
 = Shared; 
X
 = Exclusive):
T1
T2
R(A)
R(B)
R(D)
R(E)
Commit
R(C)
W(C)
R(D)
W(D)
Commit
T1
T2
S(A)
R(A)
S(B)
R(B)
S(D)
R(D)
S(E)
R(E)
Commit
E(C)
R(C)
W(C)
E(D)
R(D)
W(D)
Commit
A tuple with 
rating 1 and 
age 71 is 
returned
A tuple with rating 1 
and age 96 is inserted
A tuple with rating 2 
and age 80 is deleted
A tuple with 
rating 2 and 
age 63 is 
returned
This schedule is not
identical to any serial
execution of T1 and T2!
The Phantom Problem
 
The problem is that 
T1 
assumes that it has locked “all” the
pages which contain Sailors records with rating 1
 
This assumption is violated when 
T2
 inserts a new Sailor
record with rating 1 on a 
different
 page
 
Hence, locking pages at any given time does not prevent
new 
phantom
 records from being added on other pages!
This is commonly known as the
Phantom Problem
 
The Phantom Problem is caused, not because of a flaw in
the Strict 2PL protocol, but because of 
T1
’s unrealistic
assumptions
 
How Can We Solve the
Phantom Problem?
 
If there is 
no index 
on rating
 
and all pages in Sailors
must be scanned, 
T1
 should somehow ensure that no
new
 pages are inserted to the Sailors relation
This has to do with the 
locking granularity
 
If there is an 
index
 on rating, 
T1
 can lock the index
entries and the data pages which involve the targeted
ratings, and accordingly prevent new insertions
This technique is known as 
index locking
 
 
 
Next Class
Query Optimization
and Execution
Relational Operators
Files and Access Methods
Buffer Management
Disk Space Management
DB
Queries
Transaction
Manager
Lock
Manager
Recovery
Manager
Continue…
Slide Note
Embed
Share

In this lecture, Mohammad Hammoud covers the key aspects of transaction management in database management systems (DBMS). Topics include locking protocols, anomaly avoidance, lock managers, and two-phase locking. The session delves into the rules, data structures, and processes involved in maintaining transaction integrity within a DBMS environment.

  • DBMS
  • Transaction Management
  • Locking Protocols
  • Two-Phase Locking
  • Mohammad Hammoud

Uploaded on Jul 18, 2024 | 2 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Database Applications (15-415) DBMS Internals- Part XII Lecture 25, April 19, 2020 Mohammad Hammoud

  2. Today Last Two Sessions: DBMS Internals- Part XI Transaction Management Today s Session: Transaction Management (Continue) Announcement: PS5 is now posted. It is due on Thursday, April 23

  3. DBMS Layers Queries Query Optimization and Execution Relational Operators Files and Access Methods Transaction Manager Recovery Manager Buffer Management Lock Manager Disk Space Management DB

  4. Outline A Brief Primer on Transaction Management Anomalies Due to Concurrency 2PL and Strict 2PL Locking Protocols Schedules with Aborted Transactions

  5. Locking Protocols WR, RW and WW anomalies can be avoided using a locking protocol A locking protocol: Is a set of rules to be followed by each transaction to ensure that only serializable schedules are allowed (extended later) Associates a lock with each database object, which could be of different types (e.g., shared or exclusive) Grants and denies locks to transactions according to the specified rules The part of the DBMS that keeps track of locks is called the lock manager

  6. Lock Managers Usually, a lock manager in a DBMS maintains three types of data structures: A queue, Q, for each lock, L, to hold its pending requests Transaction Table Transaction List 1 (LS1) Trx List T1 LS1 Lock Queue 1 (Q1) Lock Table A lock table, which keeps for each L associated with each object, O, a record R that contains: The type of L (e.g., shared or exclusive) The number of transactions currently holding L on O A pointer to Q Object Lock # Type # of Trx Q O L S 1 Q1 A transaction table, which maintains for each transaction, T, a pointer to a list of locks held by T

  7. Two-Phase Locking A widely used locking protocol, called Two-Phase Locking (2PL), has two rules: Rule 1: if a transaction T wants to read (or write) an object O, it first requests the lock manager for a shared (or exclusive) lock on O T0 T1 T2 T0 T1 T2 T0 T1 T2 Write Request on Object O Shared Lock Granted Lock Denied Read Request on Object O Read Request on Object O Shared Lock Granted Queue 2 Queue Lock Manager Queue Lock Manager Lock Manager t2 t0 t1 Time

  8. Two-Phase Locking A widely used locking protocol, called Two-Phase Locking (2PL), has two rules: Rule 1: if a transaction T wants to read (or write) an object O, it first requests the lock manager for a shared (or exclusive) lock on O T0 T1 T2 T0 T1 T2 T0 T1 T2 Exclusive Lock Granted Release Lock on Object O Release Lock on Object O Queue 2 Queue 2 2 Lock Manager Queue Lock Manager Lock Manager t5 t3 t4 Time

  9. Two-Phase Locking A widely used locking protocol, called Two-Phase Locking (2PL), has two rules: Rule 1: if a transaction T wants to read (or write) an object O, it first requests the lock manager for a shared (or exclusive) lock on O T0 T1 T2 T0 T1 T2 T0 T1 T2 Release Lock on Object O Read Request on Object O Lock Denied Read Request on Object O Lock Denied Queue 1 1 Queue 1 Lock Manager Queue Lock Manager Lock Manager 0 0 t8 t6 t7 Time

  10. Two-Phase Locking A widely used locking protocol, called Two-Phase Locking (2PL), has two rules: Rule 1: if a transaction T wants to read (or write) an object O, it first requests the lock manager for a shared (or exclusive) lock on O T0 T1 T2 T0 T1 T2 T0 T1 T2 Write Request on Object O Shared Lock Granted Lock Denied Shared Lock Granted Queue 2 1 Queue Lock Manager Queue 0 Lock Manager Lock Manager 0 t10 t9 t9 Time

  11. Two-Phase Locking A widely used locking protocol, called Two-Phase Locking (2PL), has two rules: Rule 2: T can release locks before it commits or aborts, and cannot request additional locks once it releases any lock Thus, every transaction has a growing phase in which it acquires locks, followed by a shrinking phase in which it releases locks # locks shrinking phase growing phase

  12. Two-Phase Locking A widely used locking protocol, called Two-Phase Locking (2PL), has two rules: Rule 2: T can release locks before it commits or aborts, and cannot request additional locks once it releases any lock Thus, every transaction has a growing phase in which it acquires locks, followed by a shrinking phase in which it releases locks # locks violation of 2PL

  13. Resolving RW Conflicts Using 2PL Suppose that T1 and T2 actions are interleaved as follows: T1 reads A T2 reads A, decrements A and commits T1 tries to decrement A T1 and T2 can be represented by the following schedule: T1 T2 T1 T2 EXCLUSIVE(A) R(A) R(A) RW R(A) W(A) Commit Lock(A) Conflict Resolved! W(A) Commit Wait W(A) Commit EXCLUSIVE(A) R(A) W(A) Commit Exposes RW Anomaly

  14. Resolving RW Conflicts Using 2PL Suppose that T1 and T2 actions are interleaved as follows: T1 reads A T2 reads A, decrements A and commits T1 tries to decrement A T1 and T2 can be represented by the following schedule: T1 T2 T1 T2 EXCLUSIVE(A) R(A) R(A) But, it can limit parallelism! R(A) W(A) Commit Lock(A) W(A) Commit Wait W(A) Commit EXCLUSIVE(A) R(A) W(A) Commit Exposes RW Anomaly

  15. Resolving WW Conflicts Using 2PL Suppose that T1 and T2 actions are interleaved as follows: T1 sets Mohammad s Salary to $1000 T2 sets Ahmad s Salary to $2000 T1 sets Ahmad s Salary to $1000 T2 sets Mohammad s Salary to $2000 T1 and T2 can be represented by the following schedule: T1 T2 T1 T2 EXCLUSIVE(MS) EXCLUSIVE(AS) W(MS) W(AS) Commit WW Conflict Resolved! W(MS) Lock(AS) W(AS) W(AS) Commit Wait W(MS) Commit EXCLUSIVE(AS) EXCLUSIVE(MS) W(AS) W(MS) Commit Exposes WW Anomaly (assuming, MS & AS must be kept equal)

  16. Resolving WW Conflicts Using 2PL Suppose that T1 and T2 actions are interleaved as follows: T1 sets Mohammad s Salary to $1000 T2 sets Ahmad s Salary to $2000 T1 sets Ahmad s Salary to $1000 T2 sets Mohammad s Salary to $2000 T1 and T2 can be represented by the following schedule: T1 T2 T1 T2 EXCLUSIVE(MS) W(MS) Lock(AS) W(MS) EXCLUSIVE(AS) W(AS) Lock(MS) W(AS) W(AS) Commit W(MS) Commit Wait Wait Exposes WW Anomaly (assuming, MS & AS must be kept equal) Deadlock!

  17. Resolving WR Conflicts Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B T1 credits $100 to account B T1 and T2 can be represented by the following schedule: T1 T2 R(A) W(A) R(A) W(A) R(B) W(B) Commit T1 T2 EXCLUSIVE(A) EXCLUSIVE(B) R(A) W(A) R(B) W(B) Commit WR Lock(A) Lock(B) Conflict Resolved! Wait EXCLUSIVE(A) EXCLUSIVE(B) R(A) W(A) R(B) W(B) Commit R(B) W(B) Commit Exposes WR Anomaly

  18. Resolving WR Conflicts Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B T1 credits $100 to account B T1 and T2 can be represented by the following schedule: T1 T2 R(A) W(A) R(A) W(A) R(B) W(B) Commit T1 T2 EXCLUSIVE(A) EXCLUSIVE(B) R(A) W(A) RELEASE(A) R(B) W(B) Commit Lock(A) Lock(B) WR Conflict is NOT Resolved! Wait EXCLUSIVE(A) R(A) W(A) EXCLUSIVE(B) R(B) W(B) Commit R(B) W(B) Commit How can we solve this? Exposes WR Anomaly

  19. Strict Two-Phase Locking WR conflicts (as well as RW & WW) can be solved by making 2PL stricter In particular, Rule 2 in 2PL can be modified as follows: Rule 2: locks of a transaction T can only be released after T completes (i.e., commits or aborts) This version of 2PL is called Strict Two-Phase Locking

  20. Resolving WR Conflicts: Revisit Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B T1 credits $100 to account B T1 and T2 can be represented by the following schedule: T1 T2 R(A) W(A) R(A) W(A) R(B) W(B) Commit T1 T2 EXCLUSIVE(A) EXCLUSIVE(B) R(A) W(A) RELEASE(A) R(B) W(B) Commit Lock(A) Lock(B) Wait EXCLUSIVE(A) R(A) W(A) EXCLUSIVE(B) R(B) W(B) Commit R(B) W(B) Commit Exposes WR Anomaly Not allowed with strict 2PL

  21. Resolving WR Conflicts: Revisit Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B T1 credits $100 to account B T1 and T2 can be represented by the following schedule: T1 T2 R(A) W(A) R(A) W(A) R(B) W(B) Commit T1 T2 EXCLUSIVE(A) EXCLUSIVE(B) R(A) W(A) R(B) W(B) Commit WR Conflict is Resolved! Lock(A) Lock(B) Wait But, EXCLUSIVE(A) EXCLUSIVE(B) R(A) W(A) R(B) W(B) Commit R(B) W(B) Commit parallelism is limited more! Exposes WR Anomaly

  22. 2PL vs. Strict 2PL T1 T2 Two-Phase Locking (2PL): Limits concurrency May lead to deadlocks May have dirty reads SHARED(A) R(A) SHARED(A) R(A) EXECLUSIVE(B) R(B) W(B) Commit EXCLUSIVE(C) R(C) W(C) Commit Strict 2PL: Limits concurrency more (but, actions of different transactions can still be interleaved) May still lead to deadlocks Avoids dirty reads A Schedule with Strict 2PL and Interleaved Actions

  23. Performance of Locking Locking comes with delays mainly from blocking Usually, the first few transactions are unlikely to conflict Throughput can rise in proportion to the number of active transactions As more transactions are executed concurrently, the likelihood of blocking increases Throughput will increase more slowly with the number of active transactions There comes a point when adding another active transaction will actually decrease throughput When the system thrashes!

  24. Performance of Locking (Contd) Throughput Thrashing # of Active Transactions If a database begins to thrash, the DBA should reduce the number of active transactions Empirically, thrashing is seen to occur when 30% of active transactions are blocked!

  25. Outline A Brief Primer on Transaction Management Anomalies Due to Concurrency 2PL and Strict 2PL Locking Protocols Schedules with Aborted Transactions

  26. Schedules with Aborted Transactions Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B, and commits T1 is aborted T1 and T2 can be represented by the following schedule: T1 T2 R(A) W(A) T2 read a value for A that should have never been there! R(A) W(A) R(B) W(B) Commit How can we deal with the situation, assuming T2 had not yet committed? Abort

  27. Schedules with Aborted Transactions Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B, and commits T1 is aborted T1 and T2 can be represented by the following schedule: T1 T2 R(A) W(A) T2 read a value for A that should have never been there! R(A) W(A) R(B) W(B) Commit We can cascade the abort of T1 by aborting T2 as well! This cascading process can be recursively applied to any transaction that read A written by T1 Abort

  28. Schedules with Aborted Transactions Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B, and commits T1 is aborted T1 and T2 can be represented by the following schedule: T1 T2 R(A) W(A) T2 read a value for A that should have never been there! R(A) W(A) R(B) W(B) Commit How can we deal with the situation, assuming T2 had actually committed? The schedule is indeed unrecoverable! Abort

  29. Schedules with Aborted Transactions Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B, and commits T1 is aborted T1 and T2 can be represented by the following schedule: T1 T2 R(A) W(A) T2 read a value for A that should have never been there! R(A) W(A) R(B) W(B) Commit For a schedule to be recoverable, transactions should commit only after all transactions whose changes they read commit! Abort Recoverable schedules avoid cascading aborts!

  30. Schedules with Aborted Transactions Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B, and commits T1 is aborted T1 and T2 can be represented by the following schedule: T1 T2 R(A) W(A) T2 read a value for A that should have never been there! R(A) W(A) R(B) W(B) Commit How can we ensure recoverable schedules ? By using Strict 2PL! Abort

  31. Schedules with Aborted Transactions Suppose that T1 and T2 actions are interleaved as follows: T1 deducts $100 from account A T2 adds 6% interest to accounts A and B, and commits T1 is aborted T1 and T2 can be represented by the following schedule: T1 T2 EXCLUSIVE(A) R(A) W(A) T1 T2 Cascaded aborts are avoided! R(A) W(A) Lock(A) Wait Abort UNDO(T1) R(A) W(A) R(B) W(B) Commit EXCLUSIVE(A) R(A) W(A) EXCLUSIVE(B) R(B) W(B) Commit Abort

  32. Serializable Schedules: Redefined Two schedules are said to be equivalent if for any database state, the effect of executing the 1st schedule is identical to the effect of executing the 2nd schedule Previously: a serializable schedule is a schedule that is equivalent to a serial schedule Now: a serializable schedule is a schedule that is equivalent to a serial schedule over a set of committed transactions This definition captures serializability as well as recoverability

  33. Now Lock Conversions Dealing with Deadlocks Dynamic Databases and the Phantom Problem Concurrency Control in B+ Trees

  34. Lock Conversions A transaction may need to change the lock it already acquires on an object From Shared to Exclusive This is referred to as lock upgrade From Exclusive to Shared This is referred to as lock downgrade For example, an SQL update statement might acquire a Shared lock on each row, R, in a table and if R satisfies the condition (in the WHERE clause), an Exclusive lock must be obtained for R

  35. Lock Upgrades A lock upgrade request from a transaction T on object O must be handled specially by: Granting an Exclusive lock to T immediately if no other transaction holds a lock on O Otherwise, queuing T at the front of O s queue (i.e., T is favored) T is favored because it already holds a Shared lock on O Queuing T in front of another transaction T that holds no lock on O, but requested an Exclusive lock on O averts a deadlock! However, if T and T hold a Shared lock on O, and both request upgrades to an Exclusive lock, a deadlock will arise regardless!

  36. Lock Downgrades Lock upgrades can be entirely avoided by obtaining Exclusive locks initially, and downgrade them to Shared locks once needed Would this violate any 2PL requirement? On the surface yes; since the transaction (say, T) may need to upgrade later This is a special case as Tconservatively obtained an Exclusive lock, and did nothing but read the object that it downgraded 2PL can be safely extended to allow lock downgrades in the growing phase, provided that the transaction has not modified the object

  37. Outline Lock Conversions Dealing with Deadlocks Dynamic Databases and the Phantom Problem Concurrency Control in B+ Trees

  38. Deadlock Detection The lock manager maintains a structure called a waits-for graph to periodically detect deadlocks In a waits-for graph: The nodes correspond to active transactions There is an edge from Ti to Tj if and only if Ti is waiting for Tj to release a lock The lock manager adds and removes edges to and from a waits-for graph when it queues and grants lock requests, respectively A deadlock is detected when a cycle in the waits-for graph is found

  39. Deadlock Detection (Contd) The following schedule is free of deadlocks: T3 T4 T1 T2 S(A) R(A) T1 T2 X(B) W(B) S(B) S(C) R(C) T4 T3 X(C) X(B) No cycles; hence, no deadlocks! The Corresponding Waits-For Graph* A schedule without a deadlock *The nodes correspond to active transactions and there is an edge from Ti to Tj if and only if Ti is waiting for Tj to release a lock

  40. Deadlock Detection (Contd) The following schedule is NOT free of deadlocks: T3 T4 T1 T2 S(A) R(A) T1 T2 X(B) W(B) S(B) S(C) R(C) T4 T3 X(C) X(B) X(A) The Corresponding Waits-For Graph* A schedule with a deadlock *The nodes correspond to active transactions and there is an edge from Ti to Tj if and only if Ti is waiting for Tj to release a lock

  41. Deadlock Detection (Contd) The following schedule is NOT free of deadlocks: T3 T4 T1 T2 S(A) R(A) T1 T2 X(B) W(B) S(B) S(C) R(C) T4 T3 X(C) X(B) X(A) Cycle detected; hence, a deadlock! The Corresponding Waits-For Graph* A schedule with a deadlock *The nodes correspond to active transactions and there is an edge from Ti to Tj if and only if Ti is waiting for Tj to release a lock

  42. Resolving Deadlocks A deadlock is resolved by aborting a transaction that is on a cycle and releasing its locks This allows some of the waiting transactions to proceed The choice of which transaction to abort can be made using different criteria: The one with the fewest locks Or the one that has done the least work Or the one that is farthest from completion (more accurate) Caveat: a transaction that was aborted in the past, should be favored subsequently and not aborted upon a deadlock detection!

  43. Deadlock Prevention Studies indicate that deadlocks are relatively infrequent and detection-based schemes work well in practice However, if there is a high level of contention for locks, prevention-based schemes could perform better Deadlocks can be averted by giving each transaction a priority and ensuring that lower-priority transactions are not allowed to wait for higher-priority ones (or vice versa)

  44. Deadlock Prevention (Contd) One way to assign priorities is to give each transaction a timestamp when it is started Thus, the lower the timestamp, the higher is the transaction s priority If a transaction Ti requests a lock and a transaction Tj holds a conflicting lock, the lock manager can use one of the following policies: Wound-Wait: If Ti has higher priority, Tj is aborted; otherwise, Ti waits Wait-Die: If Ti has higher priority, it is allowed to wait; otherwise, it is aborted

  45. Reissuing Timestamps A subtle point is that we must ensure that no transaction is perennially aborted because it never had a sufficiently high priority To avoid that, when a transaction is aborted and restarted, it should be given the same timestamp it had originally This policy is referred to as reissuing timestamps Reissuing timestamps ensures that each transaction will eventually become the oldest and accordingly get all the locks it requires!

  46. Outline Lock Conversions Dealing with Deadlocks Dynamic Databases and the Phantom Problem Concurrency Control in B+ Trees

  47. Dynamic Databases Thus far, we have assumed static databases We now relax that condition and assume dynamic databases (i.e., databases that grow and shrink) To study locking protocols for dynamic databases, we consider the following: A Sailors relation S A transaction T1 which only scans S to find the oldest Sailor for specific rating levels A transaction T2 which updates Sailor while T1 is running

  48. A Possible Scenario Assume a scenario whereby the actions of T1 and T2 are interleavedas follows: T1 identifies all pages containing Sailors with rating 1 (say, pages A and B) T1 finds the age of the oldest Sailor with rating 1 (say, 71) T2 inserts a new Sailor with rating 1 and age 96 (perhaps into page C which does not contain any Sailor with rating 1) T2 locates the page containing the oldest Sailor with rating 2 (say, page D) and deletes this Sailor (whose age is, say, 80) T2 commits T1 identifies all pages containing Sailors with rating 2 (say pages D and E), and finds the age of the oldest such Sailor (which is, say, 63) T1 commits

  49. A Possible Scenario (Contd) We can apply strict 2PL to the given interleaved actions of T1 and T2 as follows (S = Shared; X = Exclusive): T1 T2 T1 T2 S(A) R(A) S(B) R(B) R(A) R(B) R(C) W(C) R(D) W(D) Commit E(C) R(C) W(C) E(D) R(D) W(D) Commit R(D) R(E) Commit S(D) R(D) S(E) R(E) Commit

  50. A Possible Scenario (Contd) We can apply strict 2PL to the given interleaved actions of T1 and T2 as follows (S = Shared; X = Exclusive): T1 T2 T1 T2 S(A) R(A) S(B) R(B) R(A) R(B) R(C) W(C) R(D) W(D) Commit E(C) R(C) W(C) E(D) R(D) W(D) Commit A tuple with rating 1 and age 71 is returned R(D) R(E) Commit A tuple with rating 1 and age 96 is inserted A tuple with rating 2 and age 63 is returned S(D) R(D) S(E) R(E) Commit A tuple with rating 2 and age 80 is deleted

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#