• No results found

Distributed Transactions

N/A
N/A
Protected

Academic year: 2021

Share "Distributed Transactions"

Copied!
52
0
0

Loading.... (view fulltext now)

Full text

(1)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

1

Chapter 6: Transaction Processing

(2)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

2

Chapter 6: Transaction Processing

Transactions

Concept of transactions is strongly related to Mutual Exclusion: • Mutual exclusion

Shared resources (data, servers, ...) are controlled in a way, that not more than one process is allowed to access it at a time

• Transactions

Protect shared data against simultaneous access by concurrent processes to ensure a consistent state

Avoid 'faulty accesses' caused e.g. by process failures

Atomic operations, i.e. the steps of a sequence in a transaction are finished all or none. After starting a transaction, all involved processes can perform operations (create, delete, modify). Sometime, the initiator asks them all to commit their work. If all do so, the changes became permanent. Otherwise (only one process refuses or crashes), the state before beginning with the operations is reloaded.

That means: A transaction is a sequence of operations that is guaranteed to be atomic, even in presence of multiple concurrent clients and process crashes.

(3)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

3

Chapter 6: Transaction Processing

Simple World

• 1960s: all data were held on magnetic tape; simple transaction management • Example supermarket with automatic inventory system:

One tape for yesterday's inventory, one for today's changes; the output is the new inventory

In case of a failure: rewind tapes and restart job

• Modern transaction concept originates from database management systems (1980) • Transactions for distributed objects: late 1980s and 1990s

(4)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

4

Chapter 6: Transaction Processing

Problem today

Example banking application using a PC (an account is a remote object)

1. Withdraw amount x from account a 2. Deposit amount x to account b

• But... When there is a connection loss after the first step, the money is lost. • Thus: group the operations belonging together in a transaction.

Key issue: rolling back to the initial state

deposit(amount)

deposit amount in the account

withdraw(amount)

withdraw amount from the account

getBalance() amount

return the balance of the account

setBalance(amount)

set the balance of the account to amount

create(name) account

create a new account with a given name

lookUp(name) account

return a reference to the account with the given name

branchTotal() amount

return the total of all the balances at the branch Transaction T: a.withdraw(100); b.deposit(100); c.withdraw(200); b.deposit(200);

(5)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

5

Chapter 6: Transaction Processing

Transaction Primitives

Write data to a file, a table, … WRITE

Read data from a file, a table, … READ

Kill the transaction and restore the old values ABORT_TRANSACTION

Terminate the transaction and try to commit

END_TRANSACTION

Start of a new transaction

BEGIN_TRANSACTION

Description Primitive

• Programming with transactions: special primitives are required • Typical example:

(6)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

6

Chapter 6: Transaction Processing

Transaction Example

Simple example: booking a stop-over flight

Transaction to reserve three flights commits: BEGIN_TRANSACTION

reserve WP -> JFK; reserve JFK -> Nairobi; reserve Nairobi -> Malindi; END_TRANSACTION

Transaction aborts when third flight is unavailable: BEGIN_TRANSACTION

reserve WP -> JFK; reserve JFK -> Nairobi;

reserve Nairobi -> Malindi full =>

ABORT_TRANSACTION

Now the bookings for the first two flights have to be undone.

(7)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

7

Chapter 6: Transaction Processing

Characteristics of Transactions

Each transaction has to fulfil the ACID properties:

A – Atomic. From 'outside', all operations of a transaction seem to be a single unit

C – Consistent. The transaction does not violate system invariants. When starting in a consistent state, the transaction has to end in a consistent state, even in the presence of concurrent transactions

I – Isolated. Concurrent transactions do not interfere with each other.

Intermediate effects of a transactions must not be visible to other transactions D – Durable. When a transaction is permitted, all changes are saved in a

permanent storage

That means:

1. Either all of the operations must be completed successfully or they must have no effect at all even in the presence of server crashes (A, D)

2. Transactions are free from interference by operations performed on behalf of other concurrent clients (I, C)

(8)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

8

Chapter 6: Transaction Processing

Classification of Transactions

Flat transactions

• Simply a series of operations (in a single machine) that satisfy the ACID properties • Simplest type of transactions, most often used

• Limitations:

• Partial results cannot be committed or aborted

• What to do with transactions distributed across several machines? • Better approaches

• Nested transactions

Transactions can fork into sub-transactions

• Distributed transactions

Basing on flat or nested transactions, but dealing with transaction operations distributed over several machines

(9)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

9

Chapter 6: Transaction Processing

Nested Transactions

Nested transactions allow more concurrency:

• a transaction is divided into a number of sub-transactions

• Top-level transaction forks off children which run (independently) in parallel • Hierarchies of sub-transactions are allowed

• Considerable amount of administration!

T : top-level transaction

T1= openSubTransaction T2= openSubTransaction openSubTransaction openSubTransaction openSubTransaction

openSubTransaction T1: T2 : T11: T12: T211: T21: prov.commit prov. commit abort prov.commit prov.commit prov. commit commit

(10)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

10

Chapter 6: Transaction Processing

Sub-Transactions

• Logical division of the work of the top-level transaction

• When a (sub-)transaction starts, it gets a private copy of all data. This makes rollbacks simple

• To a parent, a sub-transaction is atomic with respect to failures and concurrent access

• Transactions at the same level (e.g. T1 and T2) can run concurrently but access to common objects is controlled

• A sub-transaction can fail independently of its parent and other sub-transactions, but its

parent decides, what to do

(give up, start another sub-transaction, ...) • Only the top-level transaction has

permanence; when it commits, all

(successful) sub-transactions become permanent

(11)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

11

Chapter 6: Transaction Processing

Distributed Transactions

• Problem with flat and nested transactions: transactions cannot be distributed across multiple machines

• Solution: distributed transactions - flat or nested transactions that operate on distributed data

• Problem now: need for distributed algorithms to guarantee the ACID properties

Client X Y Z Flat transaction

T

T X Y M N T 1 T 2 T11 Client P T T 12 T 21 T 22 Nested transaction

(12)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

12

Chapter 6: Transaction Processing

Distributed Transactions

.. BranchZ BranchX participant participant C D Client BranchY B A participant join join join T a.withdraw(4); c.deposit(4); b.withdraw(3); d.deposit(3); BEGIN_TRANSACTION b.withdraw(T, 3); END_TRANSACTION T = BEGIN_TRANSACTION a.withdraw(4); c.deposit(4); b.withdraw(3); d.deposit(3); END_TRANSACTION

Note: the coordinator is in one of the servers, e.g. BranchX

Distributed transactions usually have a coordinator which coordinates all transaction operations at the involved machines:

(13)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

13

Chapter 6: Transaction Processing

Coordination of Distributed

Transactions

T A Y Z B C D X join join join Coordinator Participant Participant Participant T Coordinator Open Transaction TID Close Transaction Abort Transaction Participant A

a.method (TID, ref) 1

2

Join (TID, ref) 3

(14)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

14

Chapter 6: Transaction Processing

Transaction Management

T

1

T

1

T

T

22

T

T

33

Clients

T

T

nn

Transaction Manager

Transaction Manager

Scheduler

Scheduler

Log

DB

Data (Recovery) Manager

Data (Recovery) Manager

Operation sequences

Operation sequences with TIDs

Serialized operations

read/write

operations operationsread/write

Transaction Manager (Coordinator)

• Allocation of transaction IDs (TIDs)

• Assigning TIDs with operations

• Coordination of commitments,

aborts, and recovery

• BEGIN_TRANSACTION, END_TRANSACTION

Transaction Manager (Coordinator)

• Allocation of transaction IDs (TIDs)

• Assigning TIDs with operations

• Coordination of commitments,

aborts, and recovery

• BEGIN_TRANSACTION, END_TRANSACTION

Scheduler

• Concurrency control

• Lock control (LOCK/RELEASE)

• Timestamp operations

• Deadlock detection

Scheduler

• Concurrency control

• Lock control (LOCK/RELEASE)

• Timestamp operations

• Deadlock detection

Atomicity: manager transforms transaction primitives into scheduling requests

Isolation and consistency: guaranteed by scheduler

Durability: realized by the data manager

Data (Recovery) Manager

• Logging operations

• Make transactions permanent

• Undo transactions

• Recover after a crash

• Execute read/write operations

Data (Recovery) Manager

• Logging operations

• Make transactions permanent

• Undo transactions

• Recover after a crash

(15)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

15

Chapter 6: Transaction Processing

Distributed Transaction Management

T

1

T

1

T

T

22

T

T

33

Clients

T

T

nn

TM

TM

TM

TM

TM

TM

Distributed

TM

TM

TM

Resource

Scheduler

Scheduler

Data

Manager

Data

Manager

Log DB

Resource

Scheduler

Scheduler

Data

Manager

Data

Manager

Log DB

Resource

Scheduler

Scheduler

Data

Manager

Data

Manager

Log DB

Distributed Tranaction Manager

• Allocation of transaction IDs (TIDs)

• Assigning TIDs with operations

• Coordination of commitments,

aborts, and recovery

• BEGIN_TRANSACTION, END_TRANSACTION

Distributed Tranaction Manager

• Allocation of transaction IDs (TIDs)

• Assigning TIDs with operations

• Coordination of commitments,

aborts, and recovery

• BEGIN_TRANSACTION, END_TRANSACTION

Local Scheduler

• Local concurrency control

• Local lock control (LOCK/RELEASE)

• Local timestamp operations

• Cooperative deadlock detection

Local Scheduler

• Local concurrency control

• Local lock control (LOCK/RELEASE)

• Local timestamp operations

• Cooperative deadlock detection

Local Data (Recovery) Manager

• Manage local log

• Make local transactions permanent

• Undo local transactions

• Local recovery after a crash

• Execute local read/write operations

Local Data (Recovery) Manager

• Manage local log

• Make local transactions permanent

• Undo local transactions

• Local recovery after a crash

• Execute local read/write operations

Distributed transactions are similar to centralised ones. The problem is to coordinate

(16)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

16

Chapter 6: Transaction Processing

Most work: Concurrency Control

T

1

T

1

T

T

22

T

T

33

Clients

T

T

nn

Transaction Manager

Transaction Manager

Scheduler

Scheduler

Log

DB

Data (Recovery) Manager

Data (Recovery) Manager

Operation sequences

Operation sequences with TIDs

Serialized operations

read/write

operations read/writeoperations

Transaction Manager (Coordinator)

• Allocation of transaction IDs (TIDs)

• Assigning TIDs with operations

• Coordination of commitments,

aborts, and recovery

• BEGIN_TRANSACTION, END_TRANSACTION

Transaction Manager (Coordinator)

• Allocation of transaction IDs (TIDs)

• Assigning TIDs with operations

• Coordination of commitments,

aborts, and recovery

• BEGIN_TRANSACTION, END_TRANSACTION

Scheduler

• Concurrency control

• Lock control (LOCK/RELEASE)

• Timestamp operations

• Deadlock detection

Scheduler

• Concurrency control

• Lock control (LOCK/RELEASE)

• Timestamp operations

• Deadlock detection

Data (Recovery) Manager

• Logging operations

• Make transactions permanent

• Undo transactions

• Recover after a crash

• Execute read/write operations

Data (Recovery) Manager

• Logging operations

• Make transactions permanent

• Undo transactions

• Recover after a crash

(17)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

17

Chapter 6: Transaction Processing

Concurrency Control

Problem for the scheduler: guarantee consistency and isolation

• Controlling the execution of concurrent transactions working on shared data at the same time

• Achieved by giving concurrent transactions access to data in a specific order. The final result must be the same as if all transactions would have been executed

sequentially

Concurrency Control

• If there would be no concurrency control, two problems with concurrent transactions would arise:

1.) Lost update problem: two transactions both read the same old value of a variable and use it to calculate a new value

2.) Inconsistent retrievals problem: a retrieval transaction observes values that are involved in an ongoing updating transaction

(18)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

18

Chapter 6: Transaction Processing

The Lost Update Problem

• The initial balances of accounts A, B, C are $100, $200, $300

• Both transfer transactions increase B’s balance by 10% - the final result should be $242.

• Finally, B only gets to $220 - T had worked with a wrong value, thus the update made by U gets lost

Transaction T: balance = b.getBalance(); b.setBalance(balance*1.1); a.withdraw(balance/10) Transaction U: balance = b.getBalance(); b.setBalance(balance*1.1); c.withdraw(balance/10) balance = b.getBalance(); $200 balance = b.getBalance(); $200 b.setBalance(balance*1.1);$220 b.setBalance(balance*1.1);$220 a.withdraw(balance/10) $80 c.withdraw(balance/10) $280

(19)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

19

Chapter 6: Transaction Processing

The Inconsistent Retrievals Problem

• A and B both initially have $200.

• V transfers $100 from A to B while W calculates branch total (which should be $400 for A and B together)

• It occurs an inconsistent retrieval because V has only done the withdraw part when W sums the balances of A and B

Transaction V: a.withdraw(100) b.deposit(100) Transaction W: aBranch.branchTotal() a.withdraw(100); $100 total = a.getBalance() $100 total = total+b.getBalance() $300 total = total+c.getBalance() b.deposit(100) $300

(20)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

20

Chapter 6: Transaction Processing

Serialization

The sketched problems can be avoided:

• Two operations are in conflict, if their combined effect depends on the order they are executed

• The transactions have to be scheduled to avoid overlapping access to the accounts accessed by both of them

• Solution: serially equivalence. Two transactions are serially equivalent, if all pairs of conflicting operations are executed in the same order for all objects they

access.

• We have to find a serially equivalent interleaving to achieve that the combined effect is the same as if the transactions had been done one at a time in some order

• The same effect means

– The read operations return the same values

– The instance variables of the objects have the same values at the end • Serial equivalence is the basis for concurrency control protocols for transactions

(21)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

21

Chapter 6: Transaction Processing

Serially Equivalent Interleaving of T

and U (Lost Updates)

• If one of T and U runs before the other, they can’t get a lost update • The same is true if they are run in a serially equivalent ordering

Transaction T: balance = b.getBalance() b.setBalance(balance*1.1) a.withdraw(balance/10) Transaction U: balance = b.getBalance() b.setBalance(balance*1.1) c.withdraw(balance/10) balance = b.getBalance() $200 b.setBalance(balance*1.1) $220 balance = b.getBalance() $220 b.setBalance(balance*1.1) $242 a.withdraw(balance/10) $80 c.withdraw(balance/10) $278

(22)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

22

Chapter 6: Transaction Processing

Serially Equivalent Interleaving of V

and W (Inconsistent Retrievals)

• If W is run before or after V, the problem will not occur

• Therefore it will not occur in a serially equivalent ordering of V and W • The illustration is serial, but it need not to be

Transaction V: a.withdraw(100); b.deposit(100) Transaction W: aBranch.branchTotal() a.withdraw(100); $100 b.deposit(100) $300 total = a.getBalance() $100 total = total+b.getBalance() $400 total = total+c.getBalance() ...

(23)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

23

Chapter 6: Transaction Processing

Serialization

BEGIN_TRANSACTION x = 0; x = x + 3; END_TRANSACTION BEGIN_TRANSACTION x = 0; x = x + 2; END_TRANSACTION BEGIN_TRANSACTION x = 0; x = x + 1; END_TRANSACTION Illegal x = 0; x = 0; x = x + 1; x = 0; x = x + 2; x = x + 3; Schedule 3 Legal x = 0; x = 0; x = x + 1; x = x + 2; x = 0; x = x + 3; Schedule 2 Legal x = 0; x = x + 1; x = 0; x = x + 2; x = 0; x = x + 3 Schedule 1 • Schedule 1 is serialized

• Schedule 2 is not serialized, but produces no illegal results • Schedule 3 is illegal: conflicting write operations!

Three transactions working on the same data item. Possible schedules would be:

(24)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

24

Chapter 6: Transaction Processing

Serialization

• Representation of transactions is a series of read and write operations

• Example: T: x = 0; x = x+1

write(T, x); read(T, x); write(T, x)

• Concurrency control schedules conflicting operations to serialize them

• Conflict: two operations operate on the same data item, at least one is a write operation

• For two transactions to be serially equivalent, it is necessary and sufficient that all pairs of conflicting operations of the two transactions are executed in the same order at all of the objects they both access

(25)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

25

Chapter 6: Transaction Processing

Non-serially Equivalent Interleaving of

Operations

• Each transaction’s access to i and j is serialized with respect to one another, but – T makes all accesses to i before U does

– U makes all accesses to j before T does • Therefore this interleaving is not serially equivalent

Transaction T: Transaction U: x = read(i) write(i, 10) y = read(j) write(j, 30) write(j, 20) z = read (i)

T: x = read(i); write(i, 10); write(j, 20);U: y = read(j); write(j, 30); z = read (i); Consider

(26)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

26

Chapter 6: Transaction Processing

read and write Operation Conflict

Rules

• Conflicting operations

• A pair of operations conflicts if their combined effect depends on the order in which they were performed

– e.g. read and write (whose effects are the result returned by read and the value set by write)

Operations of different transactions

conflicting Reason

read read No Because the effect of a pair of read operations does not depend on the order in which they are executed

read write Yes Because the effect of a read and a write operation depends on the order of their execution

write write Yes Because the effect of a pair of write operations depends on the order of their execution

(27)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

27

Chapter 6: Transaction Processing

Concurrency Control Algorithms

Three categories of algorithms:

• Locking:

A transaction is granted the exclusive access by setting locks

Most used practice for concurrency control

• Timestamp:

Operations are ordered by using timestamps before they are carried out

No conflicts can happen

• Optimistic:

No control while executing operations

Synchronisation takes place at the end of a transaction

(28)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

28

Chapter 6: Transaction Processing

Locking

Oldest and most widely used algorithm is locking:

• When a process needs to read/write on a data item, it requests the scheduler to grant it a lock for this data item

• After performing read/write, the scheduler is asked to release the lock • The scheduler is responsible to make valid schedules from all requests;

it must be provided with an algorithm that produces only serialized schedules

(29)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

29

Chapter 6: Transaction Processing

Transactions with Exclusive Locks

Transaction T: balance = b.getBalance() b.setBalance(bal*1.1) a.withdraw(bal/10) Transaction U: balance = b.getBalance() b.setBalance(bal*1.1) c.withdraw(bal/10)

Operations Locks Operations Locks

BEGIN_TRANSACTION

bal = b.getBalance() lock B

b.setBalance(bal*1.1) BEGIN_TRANSACTION

a.withdraw(bal/10) lock A bal = b.getBalance() waits for T's lock on B

END_TRANSACTION

unlock A,B lock B

b.setBalance(bal*1.1)

c.withdraw(bal/10) lock C

END_TRANSACTION unlock B,C when T is about to use b, it is locked for T

when U is about to use b, it is still locked for T, and U waits

when T commits, it unlocks B

U can now continue

(30)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

30

Chapter 6: Transaction Processing

Algorithm: Two-Phase Locking

Steps in two-phase locking (2PL):

1. When the scheduler receives a request op(T, x) from the transaction manager, it tests, if the operation conflicts with any other operation already granted a lock.

• Yes: the operation is delayed

• No: a lock is granted for data item x; the operation is passed on to the data manager

2. When the data manager acknowledges the execution of the operation, the belonging lock is released by the scheduler

3. When a lock for T is released, no more locks are granted for T, no matter for which data item T is requesting a lock

(31)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

31

Chapter 6: Transaction Processing

Locks held by a Transaction

Growing phase: locks are requested by the transaction when needed

(32)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

32

Chapter 6: Transaction Processing

Strict Two-Phase Locking

In many systems, locks are released only if the transaction commits or aborts (delaying read and write operations)

Main advantage:

• If T2 reads a data item formerly modified by T1, it can be sure that the value is already committed and no rollback is made after its reading operation

(33)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

33

Chapter 6: Transaction Processing

Types of Locks

• Concurrency control protocols are designed to deal with conflicts between operations in different transactions on the same object

• Describe protocols in terms of read and write operations, which are assumed to be atomic

• read operations of different transactions do not conflict, therefore exclusive locks

reduce concurrency more than necessary

• The ‘many reader/single writer’ scheme allows several transactions to read an object or a single transaction to write it (but not both)

• It uses read locks (sometimes called shared locks) and write locks

For one object Lock requested

read write

Lock already set none OK OK

read OK wait

(34)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

34

Chapter 6: Transaction Processing

Implementation of Lock Manager

• The granting of locks will be implemented by a separate object in a server that is called lock manager.

• The lock manager holds a set of locks, for example in a hash table.

• Each lock is an instance of the class Lock and is associated with a particular object – its variables refer to the object, the holder(s) of the lock and its type • The lock manager code uses wait (when an object is locked) and notify when

the lock is released

• The lock manager provides setLock and unLock operations for use by the server

(35)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

35

Chapter 6: Transaction Processing

Lock Class

public class Lock {

private Object object; // the object being protected by the lock private Vector holders; // the TIDs of current holders

private LockType lockType; // the current type

public synchronized void acquire(TransID trans, LockType aLockType ){ while(/*another transaction holds the lock in conflicting mode*/) {

try {

wait();

}catch ( InterruptedException e){/*...*/ } }

if(holders.isEmpty()) { // no TIDs hold lock holders.addElement(trans);

lockType = aLockType;

} else if(/*another transaction holds the lock, share it*/ ) ){

if(/* this transaction not a holder*/) holders.addElement(trans); } else if (/* this transaction is a holder but needs a more exclusive lock*/)

lockType.promote(); }

}

Wait for lock to be released

Get lock

Get shared lock

Make shared lock to exclusive lock No interference between threads

(36)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

36

Chapter 6: Transaction Processing

Lock Class

public synchronized void release(TransID trans ){

holders.removeElement(trans); // remove this holder

// set locktype to none

notifyAll(); }

} Release lock; all waiting

(37)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

37

Chapter 6: Transaction Processing

LockManager Class

public class LockManager { private Hashtable theLocks;

public void setLock(Object object, TransID trans, LockType lockType){ Lock foundLock;

synchronized(this){

// find the lock associated with object

// if there isn’t one, create it and add to the hash table }

foundLock.acquire(trans, lockType); }

// synchronize this one because we want to remove all entries public synchronized void unLock(TransID trans) {

Enumeration e = theLocks.elements(); while(e.hasMoreElements()){

Lock aLock = (Lock)(e.nextElement());

if(/* trans is a holder of this lock*/ ) aLock.release(trans); }

} }

(38)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

38

Chapter 6: Transaction Processing

Locking of Nested Transactions

• Each set of nested transactions with the same parent is a single entity that must not access partial effects of other sub-transaction sets

Any lock obtained or inherited by a sub-transaction is inherited by its parent upon provisional commit of the sub-transaction

• Each transaction in a set of sub-transactions must not access partial effects of others in the set

Parent transactions cannot run concurrently with their children.

If a parent transaction has a lock on an object, it retains the lock during the time that its child transaction is executing. That is, children

transactions can obtain temporary access of their parent’s locks.

Sub-transactions at the same level can run concurrently, but when they access the same objects, the locking scheme must serialize the access.

(39)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

39

Chapter 6: Transaction Processing

Lock Acquisition and Release in

Nested Transactions

• For a sub-transaction to acquire a read lock,

– no other active transaction can have a write lock on the object, and the only retainers of a write lock are its ancestors.

• For a sub-transaction to acquire a write lock,

– no other active transaction can have a read/write lock on that object, and the only retainers of read/write locks on that object are its

ancestors.

• When a sub-transaction commits, its locks are inherited by its parent, allowing the parent to retain the locks in the same mode as the child. • When a sub-transaction aborts, its locks are discarded. If the parent

(40)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

40

Chapter 6: Transaction Processing

Two-phase Locking in Distributed

Systems

Several ways for implementation in distributed systems: • Centralized 2PL

A single site (lock manager) is responsible for granting and releasing locks. Each transaction manager communicates with it to get its locks. If a lock is granted, the transaction manager communicates directly with the responsible data managers (notice: data can be replicated over several machines). After finishing all

operations, the lock is given back to the lock manager. • Primary 2PL

Each data item is assigned a primary copy. The lock manager on that copy's

machine is responsible for granting and releasing locks. By this, centralized 2PL is enhanced by distributing the locking across multiple machines.

• Distributed 2PL

Data may be replicated across multiple machines. The schedulers on each machine now are not only granting and releasing local locks, but also forward operations to the (local) data manager.

(41)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

41

Chapter 6: Transaction Processing

Deadlocks when using Locks

Transaction T Transaction U

Operations Locks Operations Locks

a.deposit(100); write lock A

b.deposit(200) write lock B

b.withdraw(100) waits for U's

lock on B a.withdraw(200);

• When locks are used, each of T and U acquires a lock on one account and then gets blocked when it tries to access the account the other one has locked. • We have a deadlock.

• The lock manager must be designed to deal with deadlocks.

Notice: locking can lead to deadlocks: if two processes acquire the same two locks in opposite order, a deadlock may result

waits for T's lock on A

(42)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

42

Chapter 6: Transaction Processing

Deadlocks

Definition of deadlock:

– Deadlock is a state in which each member of a group of

transactions is waiting for some other member to release a lock – A wait-for graph can be used to represent the waiting relationships

between current transactions (nodes = transactions, edges = wait-for relationships between transactions)

T U B A Waits for Held by Held by U T Waits for means:

(43)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

43

Chapter 6: Transaction Processing

More complex wait-for Graph

• T, U and V share a read lock on C and

• W holds write lock on B (which V is waiting for)

• T and W then request write locks on C and a deadlock occurs e.g. V is in two cycles - look on the left

C T U V Held by Held by Held by T U V W W B Held by Waits for

(44)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

44

Chapter 6: Transaction Processing

Deadlock Prevention

... is unrealistic:

• E.g. lock all of the objects used by a transaction when it starts – Unnecessarily restricts access to shared resources.

– It is sometimes impossible to predict at the start of a transaction which objects will be used.

• Deadlocks can also be prevented by requesting locks on objects in a predefined order

– But this can result in premature locking and a reduction in concurrency

(45)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

45

Chapter 6: Transaction Processing

Deadlock Detection

...by finding cycles in the wait-for graph

– After detecting a deadlock, a transaction must be selected to be aborted to break the cycle

– The software for deadlock detection can be part of the lock manager – The lock manager holds a representation of the wait-for graph so

that it can check it for cycles from time to time

– Edges are added to the graph and removed from the graph by the lock manager’s setLock and unLock operations

– When a cycle is detected, choose a transaction to be aborted and then remove from the graph all the edges belonging to it

– it is hard to choose a victim - e.g. choose the oldest transaction or the one in the most cycles

(46)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

46

Chapter 6: Transaction Processing

Timeouts on Locks

Alternative for deadlock detection by analyzing the wait-for graph:

Lock timeouts can be used (are commonly used) to resolve deadlocks

Each lock is given a limited period in which it is invulnerable

After this time, a lock becomes vulnerable

Provided that no other transaction is competing for the locked object, the vulnerable lock is allowed to remain

But if any other transaction is waiting to access the object protected by a vulnerable lock, the lock is broken (that is, the object is unlocked) and the waiting transaction resumes

The transaction whose lock has been broken is normally aborted

Problems with lock timeouts

Locks may be broken when there is no deadlock

If the system is overloaded, lock timeouts will happen more often and long transactions will be penalized

(47)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

47

Chapter 6: Transaction Processing

Distributed Deadlocks

Distributed transactions lead to distributed deadlocks

– In theory a global wait-for graph can be constructed from local ones

– One server is the global deadlock detector and collects local wait-for graphs in certain intervals

– A cycle in a global wait-for graph that is not in local ones is a distributed deadlock

D Waits for Waits for Held by Held by B Waits for Held by X Y Z Held by W U V A C W V U

But a centralized solution has poor availability, no fault tolerance, bad scalability, and causes high communication costs. Furthermore: Phantom Deadlocks

(48)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

48

Chapter 6: Transaction Processing

Phantom Deadlocks

X T U Y V T T U V

local wait-for graph local wait-for graph global deadlock detector • A ‘deadlock’ that is detected, but is not really one

• Happens when there appears to be a cycle, but one of the transactions has released a lock, due to time lags in distributing graphs

• In the figure suppose U releases the object at X then waits for V at Y

– and the global detector gets Y’s graph before X’s (TUVT)

(49)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

49

Chapter 6: Transaction Processing

Edge Chasing - a Distributed

Approach to Deadlock Detection

No global graph is constructed, but each server knows about some of the edges – Servers try to find cycles by sending probes which follow the edges of the

graph through the distributed system

– Send a probe for an edge T1T2 when T2 is waiting for some time – By forwarding probes along a waiting chain, cycles can be found

– Each coordinator records whether its transactions are active or waiting • The local lock manager tells coordinators if transactions start/stop

waiting

• When a transaction is aborted to break a deadlock, the coordinator tells the participants, locks are removed and edges taken from wait-for

(50)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

50

Chapter 6: Transaction Processing

Edge-Chasing Algorithm

Three steps: – Initiation:

• When a server notes that T starts waiting for U, where U is waiting at another server, it initiates detection by sending a probe containing the edge < TU > to the server where U is blocked.

• If U is sharing a lock, probes are sent to all the holders of the lock.

– Detection:

• Detection consists of receiving probes and deciding whether a deadlock has occurred and whether to forward the probes.

– E.g. when a server receives probe < TU > it checks if U is waiting, e.g. UV, if so it forwards < TUV > to server where V waits

– When a server adds a new edge, it checks whether a cycle is created

– Resolution:

• When a cycle is detected, a transaction in the cycle is aborted to break the deadlock.

(51)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

51

Chapter 6: Transaction Processing

Probes Transmitted to Detect Deadlocks

V Held by W Waits for Held by Waits for Waits for Deadlock detected U C A B Initiation WU V W WU WU V Z Y X Example of edge chasing starts with X sending <WU>, then Y sends

<WUV >, then Z sends <WUVW>

(52)

Lehrstuhl für Informatik 4

Kommunikation und verteilte Systeme

52

Chapter 6: Transaction Processing

Edge Chasing Conclusion

• Probe to detect a cycle with N transactions will require 2(N-1) messages – Studies of databases show that the average deadlock involves 2

transactions

• The above algorithm detects deadlock provided that – waiting transactions do not abort

– no process crashes, no lost messages

• To be realistic it would need to allow for the above failures

• Refinements of the algorithm to avoid more than one transaction causing a detection to start and then more than one being aborted

References

Related documents