Concurrency Control and Transaction Recovery
Introduction:
Interactions among
transactions can cause the database to become inconsistent, even when the transactions
individually preserve correctness of the state, and there is no system failure.
Thus the order in which the individual steps of different transactions occur
needs to be regulated in some manner. The function of controlling these steps
is given to the scheduler component of the DBMS, and the general process of
assuring that transactions preserve consistency when executing simultaneous sly
is called concurrency control.
This project discusses
two topics: (1) The topic of concurrency control in relational database
management systems and how transaction journaling can be used to recover lost
data or restore an inconsistent database to a consistent state. (2) The topic
of transaction processing.
Concurrency Control and
Transaction Recovery
1. What’s concurrency
control?
Concurrency control deals
with preventing concurrently running processes from improperly inserting,
deleting, or updating the same data. Concurrency control is maintained through
two mechanisms: Transactions and Locks.
2. What’s transactions?
Transactions are a
mandatory facility for maintaining the integrity of a database while running
multiple concurrent operations. A transaction is a logical unit of work. It is
both the unit of work and the unit of recovery. The statements nested within a
transaction must either all happen or none happen. Transactions are atomic:
there is no such thing as a partial transaction. A set of transactions is said
to be serializable if and only if it produces the same result as some arbitrary serial execution of those same transactions for arbitrary input. A set of
transactions can be correct only if it is serializable.
The Teradata RDBMS
supports both ANSI transaction semantics and Teradata Transaction semantics.
All ANSI transactions are implicit while Teradata mode transactions can be
either implicit or explicit. Multi-statement requests and macros are examples
of implicit transactions. The type of transactions passed by embedded SQL
applications are examples of explicit transactions.
In ANSI mode the entire
transaction is rolled back if the current request:
l Results in a deadlock
l Performs a DDL
statement that aborts
l Executes an explicit
ROLLBACK or ABORT statement.
The ABORT and ROLLBACK
statements are accepted in ANSI mode, including conditional forms of those
statements. If an error is detected for either a single or multi-statement
request, only that request is rolled back, and the transaction remains open,
except in special circumstances. Application-initiated asynchronous aborts also
cause full transaction rollback in the ANSI environment.
Consider the following
COBOL program with embedded SQL and transactions (no COBOL code is shown, but
the embedded SQL code is of the type required by COBOL SQL programs).
EXEC SQL
BEGIN TRANSACTION
END-EXEC
EXEC SQL
DELETE FROM Employee
WHERE Name = ‘Smith T’
END-EXEC
EXEC SQL
UPDATE Department
SET EmpCount=EmpCount-1
WHERE DeptNo=500
END-EXEC
EXEC SQL
END TRANSACTION
END-EXEC
If an error were to occur
during the processing of either the DELETE or UPDATE statement within the BEGIN
TRANSACTION and END TRANSACTION statements, both Employee and Department tables
would be restored to their states before the transaction began.
When an error occurs
during a Teradata transaction, the entire transaction is rolled back.
3.What’s lock?
A lock is a means of
claiming usage rights on some resource. There can be several different types of
resources that can be locked and several different ways of locking those
resources. Most locks used on Teradata resources are locked automatically by
default. The Teradata lock manager implicitly locks the following objects:
Database, Table, View and Row hash. User can apply four different levels of
locking on Teradata resources: Exclusive, Write, Read and Access. The Teradata
R DBMS applies most of its locks automatically.
The Teradata lock manager
implicitly locks the following objects:
Object Locked
|
Description
|
Database
|
Locks rows of all tables in the database
|
Table
|
Locks all rows in the table and any index and
fallback subtables
|
View
|
Locks all underlying tables in the view
|
Row hash
|
Locks the primary copy of a row (all rows that
share the same hash code)
|
Users can apply four
different levels of locking on Teradata resources. The following table explains
these levels.
Lock Type
|
Description
|
Execlusive
|
The requester has exclusive rights to the locked
resource. No other process can read from, write to, or access the locked
resource in any way. Exclusive locks are generally only necessary when
structural changes are being made to the database.
|
Write
|
The requester has exclusive rights to the locked
resource except for readers not concerned with data consistency.
|
Read
|
The requester has exclusive rights to the locked
resource while it is reading that resource.
Read locks ensure consistency during read
operations such as those that occur during a SELECT statement. Several users
can hold Read locks on a resource, during which no modification of that
resource is permitted.
|
Access
|
The requester does not care about the consistency
of the data while it is accessing the database.
An access lock permits modifications on the
underlying data while the SELECT operation is in progress.
|
The following table
illustrates how the different locks are applied for various types of SQL
statements:
Type of SQL Statement
|
Lock
Level by
|
Access Type
|
Locking
Mode
|
UPI/NUPI/USI
|
NUSI/Full
Table Scan
|
||
SELECT
|
Row
Hash
|
Table
|
Read
|
UPDATE
|
Row
Hash
|
Table
|
Write
|
DELETE
|
Row
Hash
|
Table
|
Write
|
INSERT
|
Row
Hash
|
Not
applicable
|
Write
|
CREATE DATABASE
DROP DATABASE
MONIFY DATABASE
|
Not
applicable
|
Database
|
Exclusive
|
CREATE TABLE
DROP TABLE
ALTER TABLE
|
Not
applicable
|
Table
|
Exclusive
|
4.What’s deadlock?
A deadlock occurs when
transaction 1 places a lock on resources A, then needs to lock resources B. But
resource B has already been locked by transaction 2, which in turn needs to
place a lock on resource A. This state of affairs is called a deadlock or a
deadly embrace.
The Teradata RDBMS
resolves deadlocks by aborting one of the transactions. If the transaction
originated from BTEQ, then BTEQ resubmits it. Any other client software may pr
may not resubmit the transaction.
5. Transaction Recovery
Unscheduled restarts
occur for one of the following reasons:
l AMP or disk failure
l Software failure
l Parity error
Transaction recovery
describes how the Teradata RDBMS restarts itself after a system or media
failure.Two types of automatic
recovery of transactions can occur when an unscheduled restart occurs:
l Single transaction
recovery
l RDBMS recovery
The following table details
when these two automatic recovery mechanisms take place:
This Recovery Type
|
Happens When
|
Single transaction
|
The RDBMS aborted a single transaction because
of:
l Transaction deadlock timeout
l User error
l User-initiated abort command
l An inconsistent data table
l Unavailable resources for parsing
Single transaction recovery uses the transient
journal to effect its data restoration
|
RDBMS
|
A RDBMS restart is caused by:
l Hardware failure
l Software failure
l User command
|
6. Two-Phase Commit
Protocol
Two-phase commit (2PC) is
a protocol for assuring concurrency of data in multiple databases in which each
participant database manager votes to either commit or abort the changes. The
participants wait before committing the chan ge until it is known that all
participants can commit. By voting to commit, the participant guarantees that
it can either commit or rollback its part of the transaction, even if it
crashes before receiving the result of the vote. The 2PC protocol allows C ICS
and IMS applications to be developed that can update one or more Teradata RDBMS
databases and/or databases under some other DBMS in a synchronized manner. The
result is that all updates requested in a defined unit of work will either
succeed or fail.< /P>
Transaction Processing
This topic discusses how
the Teradata RDBMS processes transactions.
Topics discussed include:
l Lock Manager
Locking Modes
l DDL Statements, DCL
Statements, and Locks
l DML Statements and
Locks
l Blocked Requests
l Deadlock Detection and
Resolution
l Preventing Deadlocks
l Transaction Semantics:
Operating in ANSI or Teradata Mode
1.Lock Manager
Introduction
5
Any number of users and
applications can simultaneously access data stored in a Teradata RDBMS. The
Teradata Lock Manager imposes concurrency control by locking the data being
accessed by each transaction and unlocking the data when the transaction
completes. This control ensures that the data remains consistent for all users.The Lock Manager
implicitly locks an object at the following levels: Database, Table, View And Row.
When determining whether
to grant a lock, the Lock Manager takes into consideration both the requested
locking mode and the object to be locked. It is possible to exhaust Lock
Manager resources; any transaction that requests a lock when the Lo ck Manager
resources are exhausted will be aborted. In such
cases, row-hash locking for DDL statements can be disabled.
Locks and Concurrency
5
Ordinarily, a SELECT
statement that requests a READ lock against a table cannot run FALLBACK
statement for the same table. You can specify a READ lock for the CREATE INDEX
or ALTER TABLE statement to allow concurrency. If the CREATE INDEX or ALTER
TABLE . . .FALLBACK locking modifier specifies WRITE (or if there is no locking
modifier), specify an ACCESS lock in your SELECT statement to allow
concurrency.
Note that the ALTER TABLE operation can be to add FALLBACK only;
if other attributes are added, it cannot run concurrently with SELECT.
The following example
shows two transactions, with the first transaction starting before the second
transaction.
Consider the following
table definition.
CREATE TABLE T1 (C1 INT,
C2 INT, C3 INT, C4 INT)
PRIMARY INDEX (C1);
The following two
transactions are running simultaneously.
LOCKING T1 FOR READ CREATE
INDEX (C3, C4) ON T1;
SELECT * FROM T1 WHERE C3
= 124 and C4=93;
Each transaction places a
table-level READ lock on table T1. The transactions obtain access to table T1
and run concurrently. Note that the SELECT statement does not recognize the
index being created by the CREATE INDEX statement.To eliminate concurrency,
do the following:
LOCKING T1 FOR EXCLUSIVE
CREATE INDEX (C3, C4) ON T1;
SELECT * FROM T1 WHERE C3
= 124 and C4=93;
The LOCKING modifier in
the first transaction blocks the table-level READ lock request on table T1 in
the second transaction.
2.Locking Modes
5
Introduction
5
Depending on the request
being processed, a certain mode of lock is placed on the object of the request;
that is, on the database, table, view, or row. The locking mode determines
whether other users can access the target object.
Locking modes, from most
to least restrictive, are as follows: EXCLUSIVE, WRITE, READ, CHECKSUM and
ACCESS.
The action taken when a
requested locking mode is in competition with an existing locking mode is
summarized in the following table.
Lock Mode Requested
|
Locking
Mode Held
|
||||
None
|
Access
|
Read
|
Write
|
Exclusive
|
|
Access or Checksum
|
Lock
Granted
|
Lock
Granted
|
Lock
Granted
|
Lock
Granted
|
Request Queued*
|
Read
|
Lock
Granted
|
Lock
Granted
|
Lock
Granted
|
Request Queued*
|
Request Queued*
|
Write
|
Lock
Granted
|
Lock
Granted
|
Request Queued*
|
Request Queued*
|
Request Queued*
|
Exclusive
|
Lock
Granted
|
Request Queued*
|
Request Queued*
|
Request Queued*
|
Request Queued*
|
* If NOWAIT is specified, the transaction aborts
instead of queueing.
|
When Are Locks Released?
5
Locks are released upon
completion of an implicit or two-phase commit transaction, and upon completion
of the outermost END TRANSACTION statement of an explicit transaction, or the COMMIT or ROLLBACK of an
ANSI mode transaction. This occurs regardless of when the user receives the
data (because the spool file may exist beyond the end of the transaction).
3.DDL Statements, DCL
Statements, and Locks
5
A DDL or DCL statement
(for example, GRANT and CREATE, ALTER, or DROP TABLE) causes the Data
Dictionary to be updated, and appropriate locks to be placed on system tables
while the statement is processing. To improve co ncurrency, DDL and DCL
processing uses the finest granularity of locking that is practical, and delays
the placing of such locks for as long as possible.
4.DML Statements and
Locks
5
In processing DML
statements (for example, INSERT, UPDATE), the parser accesses necessary
information from the Data Dictionary tables via internal express-request
transactions that place Read locks on rows. These locks are released when the
data is returned to the parser.Locks applied as a result
of DML statement processing are listed in the following table.
DML Request
|
Updated Fields
|
Selection Criteria
|
Object Locked
|
Locking Mode
|
SELECT
|
UPI or USI
|
Row
|
Read
|
|
NUPI
|
Set of rows
|
Read
|
||
Any other
|
Table
|
Read
|
||
INSERT…
[VALUES]…
|
|
|
Primary row
Write
|
|
INSERT…
SELECT…
|
Select table
|
|||
UPI or USI
|
Row
|
Read
|
||
NUPI
|
Set of rows
|
Read
|
||
Any other
|
Table
|
Read
|
||
Insert table
|
Write
|
|||
UPDATE
|
Neither UPI nor USI
|
UPI or USI
|
Row
|
Write
|
Neither NUPI nor USI
|
NUPI
|
Set of Rows
|
Write
|
|
Any other
|
Table
|
Write
|
||
DELETE
|
UPI or USI
|
Row
|
Write
|
|
NUPI
|
Set of Rows
|
Write
|
||
Any other
|
Table
|
Write
|
5.Single-Statement
Transactions
5
When several requests
that compete for the same table are submitted as separate, single-statement
transactions, the lock manager resolves the locking requirements as follows:
Stage
|
Process
|
1
|
Job1 requires a Read lock on Table A. Table A is
free, so the lock is granted and Job1 begins.
|
2
|
While Job1 is still running, Job2 requires a
Write lock. This conflicts with the active Read lock, so the Write lock is
denied and Job2 is queued.
|
3
|
Job3 requires an Access lock. An Access lock is
compatible with both Read and Write locks (i.e., if Job1 completes, releasing
the Read lock, Job2 can begin whether or not Job3 still holds the Access
lock), so the Acces s lock is granted, and Job3 is allowed to run
concurrently with Job1.
|
4
|
Job4 requires a Read lock. This conflicts with
the queued Write lock, so Job4 is queued behind Job2.
|
5
|
Job5 requires an Exclusive lock. An Exclusive
lock conflicts with all other locks, so Job5 is queued behind Job4.
|
6
|
Job6 requires an Access lock. This conflicts with
the queued Exclusive lock, so Job6 is queued behind Job5.
|
6.Multi-Statement
Transactions
5
Explicit multi-statement
transactions also should be reviewed for any scheduling concerns. When
competing locks are needed by multiple requests in a single transaction, the
lock manager automatically upgrades the mode fo r each request, in turn, until
the transaction is completed.
7.Deadlock Detection and
Resolution
5
Introduction
5
When two or more
transactions are competing for locks on the same data, a deadlock may occur in
which none of the deadlocked transactions can proceed.A local deadlock is
detected by using information from the AMP lock table, local to each AMP. The
deadlock is resolved by aborting the most recent of the deadlocked transactions.
l Locates a deadlock on
local to each AMP
l Selects a transaction
that is participating in the deadlock (usually, the more recent)
l Aborts and rolls back
that transaction
l Notifies the user whose
transaction was aborted
5
Detecting and resolving
global deadlocks are more complex operations, and are coordinated by a PE. The
coordinating PE initiates global deadlock detection on a timed
basis. The frequency of
global deadlock detection is based on a system-wide, deadlock-detection time
parameter that is set in the user-definable DeadlockTimeOut field of the DBS
Control Record.Global deadlock detection
performs the following:
l Locates the deadlock on
a system wide basis
l Selects a transaction
that is participating in the deadlock (usually, the more recent)
l Aborts and rolls back
that transaction
l Notifies the user whose
transaction was aborted
8.Preventing Deadlocks
5Introduction
5
For particular types of
transactions, or for very large or urgent applications, users can reduce or
prevent the chance of a deadlock by including the LOCK[ING] modifier in the
statement syntax. The LOCKING modifier can b e used to improve performance and
reduce conflicts in the
following ways:
l With the NOWAIT option,
to abort a transaction if a lock cannot be granted immediately
l With LOCK ROW FOR
WRITE, to eliminate the chance of a deadlock during upgrading, when multiple
transactions select and then update the same row
l To apply a higher mode
of lock than that normally applied by the lock manager
l To apply a lock at a
different level than that normally applied by the lock manager
Example1.
5
The possibility of an
inconsistent return is especially high when an ACCESS request uses a secondary
index value in a conditional expression, because satisfied index constraints
are not always rechecked against the ret rieved data row. For example, assuming
that "QualifyAccnt" is defined as a secondary index, the following
request:
LOCKING TABLE AccntRec
FOR ACCESS
SELECT AccntNo,
QualifyAccnt FROM AccntRec
WHERE QualifyAccnt =
1587;
could return the
following:
AccntNo QualifyAccnt
------- ------------
1761 4214
In this case, the value
"1587" was found in the secondary index subtable, and the
corresponding data row was selected and returned. However, the data for account
1761 had been changed by the other user while this se lection was in progress.
Returns such as this are possible even if the data is changed or deleted only
momentarily by a transaction that is subsequently aborted. This type of
inconsistency can occur even if the data is changed only momentarily by a
transaction that is later backed out.
Example2. LOCKING ROW
LOCKING ROW is
appropriate only for single table selects that are based on a primary index or
unique secondary index constraint, as shown in the following example:
User A:
BEGIN TRANSACTION;
LOCK ROW FOR WRITE SELECT
y FROM tableA
WHERE usi=1; UPDATE
tableA
SET y=0 WHERE usi=1;
END TRANSACTION;
User B:
BEGIN TRANSACTION;
LOCK ROW WRITE SELECT z
FROM tableA
WHERE usi=1; UPDATE
tableA
SET z=0 WHERE usi=1;
END TRANSACTION;
In this example, the
User A request for a row hash Write lock is granted, which blocks the User B
request for a Write lock on that row. The User B transaction is queued until the
User A lock is released. The User A lock is held until the entire transaction is
complete. Thus, the User B ’LOCK ROW ...’ request is granted only after the
User A END TRANSACTION statement has been processed.
9.Transaction Semantics:
Operating in ANSI or Teradata Mode
5
Introduction
5
You can operate in either
of the following modes: ANSI mode and Teradata mode. The system default mode is
Teradata mode.
The following rules hold
in ANSI mode:
l A transaction
initiation is always implicit.
l A transaction is opened
by the first SQL statement executed in a session or by the first statement
executed following the close of a transaction.
l A transaction is
initiated when no transaction is currently active, and a SQL statement is
executed.
l The COMMIT [WORK] or
ROLLBACK [WORK] statements close a transaction.
The following rules hold
in Teradata mode:
l Transactions can be
implicit.
l Transactions can be
explicit (BT/ET).
l Statement failures roll
back the entire transaction.
l An error result rolls
back the entire transaction.
l Control of character
truncation causes no error.
l The default in
character comparison is NOT CASESPECIFIC.
l SET is the default in
the CREATE TABLE statement, i.e. by default, duplicate rows are not allowed
when creating tables in Teradata mode.
Changing Mode
To change to ANSI from
Teradata mode (or vice versa), carry out the following:
For this software
|
USE these commands or
options
|
TO switch to this mode
|
BETQ
|
.[SET] SESSION TRANSACTION ANSI
|
ANSI
|
.[SET] SESSION TRANSACTION BTET
|
Teradata
|
|
Log off prior to entering this command.
The command does not take effect until the next
logon.
Refer to the Teradata BTEQ Reference for
more detail on using BTEQ commands.
|
||
Preprocessor2
|
TRANSACT(ANSI)
|
ANSI
|
TRANSACT(BTET)
TRANSACT(2PC)
TRANSACT(COMMIT)
|
Teradata
|
|
Refer to Teradata Application Programming With
Embedded
SQL for C, COBOL, and PL/I for
more detail on setting
Preprocessor options.
|
||
CLI
|
Set tx_semantics = ‘A’
Set tx_smantics to ‘A’
|
ANSI
|
Set tx_semantics = ‘T’
|
Teradata
|
|
Set tx_semantics = ‘D’
|
Server default
|
|
Refer to Teradata Call-Level Interface
Version 2 for more detail on setting the tx_semantics field.
|
No comments:
Post a Comment