Title: Transaction Management Overview
1Transaction Management Overview
2Objects, transections
- Database objects' are the units in which
programs read or write information - Pages, records
- A transaction is seen by the DBMS as a series, or
list of actions. The actions that can be executed
by a transaction include reads and writes of
database objects
3(No Transcript)
4(No Transcript)
5(No Transcript)
6(No Transcript)
7(No Transcript)
8(No Transcript)
9Transactions
- Concurrent execution of user programs is
essential for good DBMS performance. - Because disk accesses are frequent, and
relatively slow, it is important to keep the cpu
humming by working on several user programs
concurrently. - A users program may carry out many operations on
the data retrieved from the database, but the
DBMS is only concerned about what data is
read/written from/to the database. - A transaction is the DBMSs abstract view of a
user program a sequence of reads and writes.
10Concurrency in a DBMS
- Users submit transactions, and can think of each
transaction as executing by itself. - Concurrency is achieved by the DBMS, which
interleaves actions (reads/writes of DB objects)
of various transactions. - Each transaction must leave the database in a
consistent state if the DB is consistent when the
transaction begins. - DBMS will enforce some ICs, depending on the ICs
declared in CREATE TABLE statements. - Beyond this, the DBMS does not really understand
the semantics of the data. (e.g., it does not
understand how the interest on a bank account is
computed). - Issues Effect of interleaving transactions, and
crashes.
11ACID four important properties of transactions
- Users should be able to regard the execution of
each transaction as Atomic - must preserve the consistency of the database
- even if the DBMS interleaves the actions of
several transactions for performance reason
without considering the effect of other
concurrently executing transactions isolation - Once the DBMS informs the user that a transaction
has been successfully completed, its effects
should persist even if the system crashes before
all its changes are re?ected on disk. durability.
12Consistency and Isolation
- Users are responsible for ensuring transaction
consistency - Transection will leave DB in Consistent state
- 100 depit acount A
- 99 credit acount B, 1 difference ins users logic
problem - isolation ensured by guaranteeing that even
though actions of several transactions might be
interleaved, the net effect is identical to
executing all transactions one after the other in
some serial order.
13Atomicity of Transactions
- A transeciton can be incomplete for
- Being ABORTED, or terminated due to some kind of
anomaly DBMS - If terminated by DBMS it is restarted
- System crash
- Unexpected stuation (access some disk )
- a transaction that is interrupted in the middle
may leave the database in an inconsistent state .
- either all of a transaction's actions are carried
out, or none are.DMBS undo actions from logs
14Atomicity of Transactions
- A transaction might commit after completing all
its actions, or it could abort (or be aborted by
the DBMS) after executing some actions. - A very important property guaranteed by the DBMS
for all transactions is that they are atomic.
That is, a user can think of a Xact as always
executing all its actions in one step, or not
executing any actions at all. - DBMS logs all actions so that it can undo the
actions of aborted transactions.
15- http//www.vbdotnetheaven.com/blogs/4995/transacti
on-processing-concept-in-ado-net
16Example
- Consider two transactions (Xacts)
T1 BEGIN AA100, BB-100 END T2 BEGIN
A1.06A, B1.06B END
- Intuitively, the first transaction is
transferring 100 from Bs account to As
account. The second is crediting both accounts
with a 6 interest payment. - There is no guarantee that T1 will execute before
T2 or vice-versa, if both are submitted together.
However, the net effect must be equivalent to
these two transactions running serially in some
order.
17Example (Contd.)
- Consider a possible interleaving (schedule)
T1 AA100, BB-100 T2
A1.06A, B1.06B
- This is OK. But what about
T1 AA100, BB-100 T2
A1.06A, B1.06B
- The DBMSs view of the second schedule
T1 R(A), W(A), R(B), W(B) T2
R(A), W(A), R(B), W(B)
18Scheduling Transactions
- a schedule represents an actual or potential
execution sequence. - DBMS interleaves the actions of different
transactions to improve performance
19Scheduling Transactions
- Ensuring transaction isolation while permitting
such concurrent execution is difficult, but is
necessary for performance reasons - I/O activity can be done in parallel with CPU
activity in a computer. - Over-lapping I/O and CPU activity,
- Reduce
- i/o , cpu idle time
- Increase
- system throughput
20Scheduling Transactions
- Serial schedule Schedule that does not
interleave the actions of different transactions. - Equivalent schedules For any database state,
the effect (on the set of objects in the
database) of executing the first schedule is
identical to the effect of executing the second
schedule. - Serializable schedule A schedule that is
equivalent to some serial execution of the
transactions. - (Note If each transaction preserves consistency,
every serializable schedule preserves
consistency. )
21Anomalies with Interleaved Execution
- Two actions on the same data object con?ict if at
least one of them is a write - Write-Read WR conflict T1 ?T2 dirty read
- Read-Write RW conflict
- Write-Write WW conflict
22Anomalies with Interleaved Execution
- Reading Uncommitted Data (WR Conflicts, dirty
reads) - Unrepeatable Reads (RW Conflicts)
T1 R(A), W(A), R(B), W(B),
Abort T2 R(A), W(A), C
T1 R(A), R(A), W(A), C T2 R(A),
W(A), C
23Anomalies (Continued)
- Overwriting Uncommitted Data (WW Conflicts)
- if transaction does not reads object before
writing it such a write is called a blind write
T1 W(A), W(B), C T2 W(A), W(B), C
24Schedules Involving Aborted Transactions
- Intuitively, all actions of aborted transactions
are to be undone. - if T2 had not been committed, cascading abort of
T1 and T2, also releated transection - But T2 is committed, thus it is Unrecoverable
Schedule - recoverable schedule is one in which transactions
commit only after (and if !) all transactions
whose changes they read commit.
25avoid cascading aborts schedule
- If transactions read only the changes of
committed transactions, not only is the schedule
recoverable, but also aborting a transaction can
be accomplished without cascading the abort to
other transactions. Such a schedule is said to
avoid cascading aborts
26Aborting a Transaction
- If a transaction Ti is aborted, all its actions
have to be undone. Not only that, if Tj reads an
object last written by Ti, Tj must be aborted as
well! - Most systems avoid such cascading aborts by
releasing a transactions locks only at commit
time. - If Ti writes an object, Tj can read this only
after Ti commits. - In order to undo the actions of an aborted
transaction, the DBMS maintains a log in which
every write is recorded. This mechanism is also
used to recover from system crashes all active
Xacts at the time of the crash are aborted when
the system comes back up.
27Lock-Based Concurrency Control
- Strict Two-phase Locking (Strict 2PL) Protocol
- Each Xact must obtain a S (shared) lock on object
before reading, and an X (exclusive) lock on
object before writing. - All locks held by a transaction are released when
the transaction completes - (Non-strict) 2PL Variant Release locks anytime,
but cannot acquire locks after releasing any
lock. - If an Xact holds an X lock on an object, no
other Xact can get a lock (S or X) on that
object. - Strict 2PL allows only serializable schedules.
- Additionally, it simplifies transaction aborts
- (Non-strict) 2PL also allows only serializable
schedules, but involves more complex abort
processing
28(No Transcript)
29(No Transcript)
30Deadlock
- Consider the following example
- transaction T1 gets an exclusive lock on object
A, T2 gets an exclusive lock on B, T1 requests an
exclusive lock on B and is queued, and T2
requests an exclusive lock on A and is queued.
Now, T1 is waiting for T2 to release its lock and
T2 is waiting for T1 to release its lock! Such a
cycle of transactions waiting for locks to be
released is called a deadlock
31Deadlock Prevention
- giving each transaction a priority and ensuring
that lower priority transactions are not allowed
to wait for higher priority transactions (or vice
versa). - Timestamp priority.
- Ti requests a lock and transaction Tj holds a
con?icting lock - Wait die
- lower priority transactions can never wait for
higher priority transactions. - Wound-wait
- higher priority transactions never wait for
lower priority transactions
32Deadlock Detection
- Deadlocks tend to be rare and typically involve
very few transactions - The lock manager maintains a structure called a
waits-for graph to detect deadlock cycle - The nodes correspond to active transactions, and
there is an arc from Ti to Tj if (and only if) Ti
is waiting for Tj to release a lock. The lock
manager adds edges to this graph when it queues
lock requests and removes edges when it grants
lock requests
33(No Transcript)
34 CRASH RECOVERY
- recovery manager of a DBMS is responsible for
ensuring transaction atomicity and durability - atomicity by undoing the actions of transactions
that do not commit - durability by making sure that all actions of
committed transactions survive system crashes and
media failures
35after crashes
- recovery manager is given control
- responsible
- for bringing the database to a consistent state
- for undoing the actions of an aborted transaction.
36The Log
- The following actions are recorded in the log
- Ti writes an object the old value and the new
value. - Log record must go to disk before the changed
page! - Ti commits/aborts a log record indicating this
action. - Log records are chained together by Xact id, so
its easy to undo a specific Xact. - Log is often duplexed and archived on stable
storage. - All log related activities (and in fact, all CC
related activities such as lock/unlock, dealing
with deadlocks etc.) are handled transparently by
the DBMS.
37Recovering From a Crash
- There are 3 phases in the Aries recovery
algorithm - Analysis Scan the log forward (from the most
recent checkpoint) to identify all Xacts that
were active, and all dirty pages in the buffer
pool at the time of the crash. - Redo Redoes all updates to dirty pages in the
buffer pool, as needed, to ensure that all logged
updates are in fact carried out and written to
disk. - Undo The writes of all Xacts that were active
at the crash are undone (by restoring the before
value of the update, which is in the log record
for the update), working backwards in the log.
(Some care must be taken to handle the case of a
crash occurring during the recovery process!)
38Summary
- Concurrency control and recovery are among the
most important functions provided by a DBMS. - Users need not worry about concurrency.
- System automatically inserts lock/unlock requests
and schedules actions of different Xacts in such
a way as to ensure that the resulting execution
is equivalent to executing the Xacts one after
the other in some order. - Write-ahead logging (WAL) is used to undo the
actions of aborted transactions and to restore
the system to a consistent state after a crash. - Consistent state Only the effects of commited
Xacts seen.
39Sql server Transection isolation
- Dirty Reads occur when one transaction reads data
written by another, uncommitted, transaction. The
danger with dirty reads is that the other
transaction might never commit, leaving the
original transaction with "dirty" data. - Non-repeatable Reads occur when one transaction
attempts to access the same data twice and a
second transaction modifies the data between the
first transaction's read attempts. This may cause
the first transaction to read two different
values for the same data, causing the original
read to be non-repeatable - Phantom Reads occur when one transaction accesses
a range of data more than once and a second
transaction inserts or deletes rows that fall
within that range between the first transaction's
read attempts. This can cause "phantom" rows to
appear or disappear from the first transaction's
perspective.
40- SQL Server's isolation models each attempt to
conquer a subset of these problems, providing
database administrators with a way to balance
transaction isolation and business requirements.
The five SQL Server isolation models are - The Read Committed Isolation Model is SQL
Servers default behavior. In this model, the
database does not allow transactions to read data
written to a table by an uncommitted transaction.
This model protects against dirty reads, but
provides no protection against phantom reads or
non-repeatable reads.
41- The Read Uncommitted Isolation Model offers
essentially no isolation between transactions.
Any transaction can read data written by an
uncommitted transaction. This leaves the
transactions vulnerable to dirty reads, phantom
reads and non-repeatable reads. - The Repeatable Read Isolation Model goes a step
further than the Read Committed model by
preventing transactions from writing data that
was read by another transaction until the reading
transaction completes. This isolation model
protect against both dirty reads and
non-repeatable reads.
42- The Serializable Isolation Model uses range locks
to prevent transactions from inserting or
deleting rows in a range being read by another
transaction. The Serializable model protects
against all three concurrency problems. - The Snapshot Isolation Model also protects
against all three concurrency problems, but does
so in a different manner. It provides each
transaction with a "snapshot" of the data it
requests. The transaction may then access that
snapshot for all future references, eliminating
the need to return to the source table for
potentially dirty data.
43- If you need to change the isolation model in use
by SQL Server, simply issue the command - SET TRANSACTION ISOLATION LEVEL ltlevelgt
- where ltlevelgt is replaced with any of the
following keywords - READ COMMITTED
- READ UNCOMMITTED
- REPEATABLE READ
- SERIALIZABLE
- SNAPSHOT
44BEGIN TRAN UPDATE authors SET au_fname
'John' WHERE au_id '172-32-1176' UPDATE
authors SET au_fname 'Marg' WHERE au_id
'213-46-8915' COMMIT TRAN
45BEGIN TRAN UPDATE authors SET au_fname
'John' WHERE au_id '172-32-1176' UPDATE
authors SET au_fname 'JohnY' WHERE city
'Lawrence' IF _at__at_ROWCOUNT 5 COMMIT TRAN ELSE
ROLLBACK TRAN
46Create Proc TranTest1 AS BEGIN TRAN INSERT INTO
authors(au_id, au_lname, au_fname,
phone, contract) VALUES ('172-32-1176',
'Gates', 'Bill', ' 800-BUY-MSFT',
1) UPDATE authors SET au_fname
'Johnzzz' WHERE au_id '172-32-1176' COMMIT
TRAN GO
47Create Proc TranTest2 AS BEGIN TRAN INSERT INTO
authors(au_id, au_lname, au_fname,
phone, contract) VALUES ('172-32-1176',
'Gates', 'Bill', ' 800-BUY-MSFT', 1) IF
_at__at_ERROR ltgt 0 BEGIN ROLLBACK TRAN return 10
END UPDATE authors SET au_fname
'Johnzzz' WHERE au_id '172-32-1176' IF _at__at_ERROR
ltgt 0 BEGIN ROLLBACK TRAN return 11
END COMMIT TRAN GO
48USE pubs DECLARE _at_intErrorCode INT BEGIN TRAN
UPDATE Authors SET Phone '415 354-9866'
WHERE au_id '724-80-9391' SELECT
_at_intErrorCode _at__at_ERROR IF (_at_intErrorCode ltgt
0) GOTO PROBLEM UPDATE Publishers SET
city 'Calcutta', country 'India' WHERE
pub_id '9999' SELECT _at_intErrorCode
_at__at_ERROR IF (_at_intErrorCode ltgt 0) GOTO
PROBLEM COMMIT TRAN PROBLEM IF (_at_intErrorCode
ltgt 0) BEGIN PRINT 'Unexpected error occurred!'
ROLLBACK TRAN END
49Nested trasnection
Figure 1 A COMMIT always balances a BEGIN
TRANSACTION by reducing the transaction count by
one.
Figure 2 A single ROLLBACK always rolls back the
entire transaction
50USE pubs SELECT 'Before BEGIN TRAN', _at__at_TRANCOUNT
-- The value of _at__at_TRANCOUNT is 0 BEGIN TRAN
SELECT 'After BEGIN TRAN', _at__at_TRANCOUNT -- The
value of _at__at_TRANCOUNT is 1 DELETE sales
BEGIN TRAN nested SELECT 'After BEGIN
TRAN nested', _at__at_TRANCOUNT --
The value of _at__at_TRANCOUNT is 2 DELETE
titleauthor COMMIT TRAN nested
-- Does nothing except decrement the value of
_at__at_TRANCOUNT SELECT 'After COMMIT TRAN
nested', _at__at_TRANCOUNT -- The
value of _at__at_TRANCOUNT is 1 ROLLBACK TRAN SELECT
'After ROLLBACK TRAN', _at__at_TRANCOUNT -- The value
of _at__at_TRANCOUNT is 0 -- because ROLLBACK TRAN
always rolls back all transactions and sets --
_at__at_TRANCOUNT to 0. SELECT TOP 5 au_id FROM
titleauthor
51USE pubs SELECT 'Before BEGIN TRAN', _at__at_TRANCOUNT
-- The value of _at__at_TRANCOUNT is 0 BEGIN TRAN
SELECT 'After BEGIN TRAN', _at__at_TRANCOUNT -- The
value of _at__at_TRANCOUNT is 1 DELETE sales
BEGIN TRAN nested SELECT 'After BEGIN
TRAN nested', _at__at_TRANCOUNT -- The
value of _at__at_TRANCOUNT is 2 DELETE
titleauthor ROLLBACK TRAN SELECT
'After COMMIT TRAN nested', _at__at_TRANCOUNT --
The value of _at__at_TRANCOUNT is 0 because --
ROLLBACK TRAN always rolls back all transactions
and sets _at__at_TRANCOUNT -- to 0. IF
(_at__at_TRANCOUNT gt 0) BEGIN COMMIT TRAN -- Never
makes it here cause of the ROLLBACK SELECT
'After COMMIT TRAN', _at__at_TRANCOUNT END SELECT TOP
5 au_id FROM titleauthor
52USE pubs SELECT 'Before BEGIN TRAN main',
_at__at_TRANCOUNT -- The value of _at__at_TRANCOUNT is
0 BEGIN TRAN main SELECT 'After BEGIN TRAN
main', _at__at_TRANCOUNT -- The value of _at__at_TRANCOUNT
is 1 DELETE sales SAVE TRAN sales --
Mark a save point SELECT 'After SAVE TRAN
sales', _at__at_TRANCOUNT -- The value of
_at__at_TRANCOUNT is still 1 BEGIN TRAN nested
SELECT 'After BEGIN TRAN nested',
_at__at_TRANCOUNT -- The value of _at__at_TRANCOUNT
is 2 DELETE titleauthor SAVE TRAN
titleauthor -- Mark a save point SELECT
'After SAVE TRAN titleauthor', _at__at_TRANCOUNT
-- The value of _at__at_TRANCOUNT is still 2
ROLLBACK TRAN sales SELECT 'After ROLLBACK
TRAN sales', _at__at_TRANCOUNT -- The value of
_at__at_TRANCOUNT is still 2 SELECT TOP 5 au_id
FROM titleauthor IF (_at__at_TRANCOUNT gt 0) BEGIN
ROLLBACK TRAN SELECT 'AFTER ROLLBACK TRAN',
_at__at_TRANCOUNT -- The value of _at__at_TRANCOUNT is 0
because -- ROLLBACK TRAN always rolls back
all transactions and sets _at__at_TRANCOUNT -- to
0. END SELECT TOP 5 au_id FROM titleauthor
53CREATE PROCEDURE addTitle(_at_title_id VARCHAR(6),
_at_au_id VARCHAR(11),
_at_title VARCHAR(20), _at_title_type
CHAR(12)) AS BEGIN TRAN INSERT
titles(title_id, title, type) VALUES
(_at_title_id, _at_title, _at_title_type) IF (_at__at_ERROR
ltgt 0) BEGIN PRINT 'Unexpected error
occurred!' ROLLBACK TRAN RETURN
1 END INSERT titleauthor(au_id,
title_id) VALUES (_at_au_id, _at_title_id) IF
(_at__at_ERROR ltgt 0) BEGIN PRINT 'Unexpected
error occurred!' ROLLBACK TRAN
RETURN 1 END COMMIT TRAN RETURN 0
IF _at__at_ERROR ltgt 0 BEGIN
RAISERROR('error occured while recording
purchase', 16, 1) ROLLBACK END
54 string connectionString "........." SqlConnec
tion myConnection new SqlConnection(connectionSt
ring) myConnection.Open() // Start
transaction. SqlTransaction myTransaction
myConnection.BeginTransaction() // Assign
command in the current transaction. SqlCommand
myCommand new SqlCommand() myCommand.Transacti
on myTransaction try ......................
...Database operations........................ my
Transaction.Commit() Console.WriteLine("Records
are modified in the database.")
catch(Exception e) myTransaction.Rollba
ck() Console.WriteLine(e.ToString()) Console.W
riteLine("Neither record was written to
database.") finally myConnection.Close
()
55SET XACT_ABORT ON BEGIN TRY BEGIN
TRANSACTION -- Code goes here COMMIT
TRANSACTION END TRY BEGIN CATCH IF
_at__at_TRANCOUNT gt 0 ROLLBACK TRANSACTION
DECLARE _at_ERROR_SEVERITY INT,
_at_ERROR_STATE INT, _at_ERROR_NUMBER INT,
_at_ERROR_LINE INT, _at_ERROR_MESSAGE NVARCHAR(40
00) SELECT _at_ERROR_SEVERITY
ERROR_SEVERITY(), _at_ERROR_STATE
ERROR_STATE(), _at_ERROR_NUMBER
ERROR_NUMBER(), _at_ERROR_LINE
ERROR_LINE(), _at_ERROR_MESSAGE
ERROR_MESSAGE() RAISERROR('Msg d, Line d,
s', _at_ERROR_SEVERITY, _at_ERROR_STATE,
_at_ERROR_NUMBER, _at_ERROR_LINE,
_at_ERROR_MESSAGE) END CATCH
56(No Transcript)