Presentation is loading. Please wait.

Presentation is loading. Please wait.

IDA / ADIT Databasteknik Databaser och bioinformatik Transaction Fang Wei-Kleiner.

Similar presentations


Presentation on theme: "IDA / ADIT Databasteknik Databaser och bioinformatik Transaction Fang Wei-Kleiner."— Presentation transcript:

1 IDA / ADIT Databasteknik Databaser och bioinformatik Transaction Fang Wei-Kleiner

2 IDA / ADIT 2 Transactions A transaction is a logical unit of database processing and consists of one or several operations. Database operations in a simplified model: o read-item(X) o write-item(X)

3 IDA / ADIT 3 Transactions - examples T1T2 Read-item(my-account) my-account := my-account Write-item(my-account) Read-item(other-account) other-account := other-account Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account)

4 IDA / ADIT 4 Transactions Q: How to execute a read-item and a write-item? Note: more about buffers in the next lecture.

5 IDA / ADIT 5 Read-item(X) Locate the block on disk that contains X Copy the block to primary memory (a buffer) Copy X from the buffer to program variable X.

6 IDA / ADIT 6 Write-item(X) 1.Locate the block on disk that contains X 2.Copy the block to primary memory (a buffer) 3.Copy the value of program variable X to the right place in the buffer 4.Store the modified block on disk.

7 IDA / ADIT 7 Schedule A schedule defines the order between the operations in the different transactions.

8 IDA / ADIT 8 Schedule - example T1T2 Read-item(my-account) my-account := my-account Write-item(my-account) Read-item(other-account) Other-account := other-account Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

9 IDA / ADIT 9 Lost update problem T1T2 Read-item(my-account) my-account := my-account Write-item(my-account) Read-item(other-account) Other-account := other-account Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

10 IDA / ADIT 10 Dirty read problem T1T2 Read-item(my-account) my-account := my-account Write-item(my-account) Read-item(other-account) FAIL Read-item(my-account) my-account := my-account Write-item(my-account) TIME

11 IDA / ADIT 11 Incorrect summary problem T1T2 Read-item(my-account1) my-account1 := my-account Write-item(my-account1) Read-item(my-account1) sum := sum + my-account1 TIME Read-item(my-account2) my-account2 := my-account Write-item(my-account2) Read-item(my-account2) sum := sum + my-account2sum := 0

12 IDA / ADIT 12 Unrepeatable read problem T1T2 Read-item(my-account) my-account:= my-account TIME Read-item(my-account) Write-item(my-account)

13 IDA / ADIT 13 Properties for transactions Properties for transactions ACID: Atomicity, Consistency preservation, Isolation, Durability A: A transaction is an atomic unit: it is either executed completely or not at all C: A database that is in a consistent state before the execution of a transaction (i.e. it fulfills the conditions in the schema and other conditions declared for the database), is also in a consistent state after the execution.

14 IDA / ADIT 14 Properties for transactions Properties for transactions ACID: Atomicity, Consistency preservation, Isolation, Durability I: A transaction should act as if it is executed isolated from other transactions. D: Changes in the database made by a committed transaction are permanent.

15 IDA / ADIT 15 Properties for transactions Properties for transactions How are the ACID properties achieved? A: recovery system C: programmer + DBMS I: concurrency contol D: recovery system

16 IDA / ADIT 16 Concurrency control (Isolation)

17 IDA / ADIT 17 Serial and serializable schedules Serial and serializable schedules A schedule S is serial if the operations in every transaction T are executed directly after each other  perfect with respect to isolation, but … A schedule S is serializable if there is an equivalent serial schedule S’ Equivalent: conflict-equivalent.

18 IDA / ADIT 18 Transactions T1T2 Read-item(my-account) my-account := my-account Write-item(my-account) Read-item(other-account) other-account := other-account Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account)

19 IDA / ADIT 19 Serial schedule T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) Read-item(other-account) other-account := other-account Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

20 IDA / ADIT 20 Serial schedule T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) Read-item(other-account) other-account := other-account Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

21 IDA / ADIT 21 Non-serial schedule T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) other-account := other-account Read-item(other-account) Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

22 IDA / ADIT 22 Non-serial schedule (2) T1T2 Read-item(my-account) My-account := my-account Write-item(my-account) Read-item(other-account) Other-account := other-account Write-item(other-account) Read-item(my-account) My-account := my-account Write-item(my-account) TIME

23 IDA / ADIT 23 Want schedules that are “good”, regardless of o initial state and o transaction semantics Only look at order of read and writes What is a good schedule?

24 IDA / ADIT 24 Non-serial schedule (S) T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) other-account := other-account Read-item(other-account) Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

25 IDA / ADIT 25 Non-serial schedule (S’) T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) other-account := other-account Read-item(other-account) Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

26 IDA / ADIT 26 S equivalent to S’ T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) other-account := other-account Read-item(other-account) Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME No conflict on the resource

27 IDA / ADIT 27 Non-serial schedule (2) T1T2 Read-item(my-account) My-account := my-account Write-item(my-account) Read-item(other-account) Other-account := other-account Write-item(other-account) Read-item(my-account) My-account := my-account Write-item(my-account) TIME Conflict!

28 IDA / ADIT 28 Conflicts Conflicts Two operations are in conflict if: o they belong to different transactions o they access (read/write) the same data X o one of the operations is a write-item(X)

29 IDA / ADIT 29 Conflict-equivalence Conflict-equivalence Two schedules S and S’ are conflict-equivalent if the order of any two conflicting operations is the same in both schedules. In a (conflict) serializable schedule it is possible to reorder the operations that are in conflict until one gets a serial schedule.

30 IDA / ADIT 30 Serializable schedule T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) other-account := other-account Read-item(other-account) Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

31 IDA / ADIT 31 Not serializable schedule T1T2 Read-item(my-account) My-account := my-account Write-item(my-account) Read-item(other-account) Other-account := other-account Write-item(other-account) Read-item(my-account) My-account := my-account Write-item(my-account) TIME

32 IDA / ADIT 32 Algorithm: Serializability test Algorithm: Serializability test With a directed graph: 1. Create a node for each transaction 2. If Tj executes a read-item(X) after Ti executes a write-item(X), create an arch T i  T j 3. If Tj executes a write-item(X) after Ti executes a read-item(X), create an arch T i  T j 4. If Tj executes a write-item(X) after Ti executes a write-item(X), create an arch T i  T j  S is serializable if the graph does not contain any cycles.

33 IDA / ADIT 33 Serializable schedule T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) other-account := other-account Read-item(other-account) Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

34 IDA / ADIT 34 Not serializable schedule T1T2 Read-item(my-account) My-account := my-account Write-item(my-account) Read-item(other-account) Other-account := other-account Write-item(other-account) Read-item(my-account) My-account := my-account Write-item(my-account) TIME

35 IDA / ADIT 35 Example T1 R(A) T2 W(C) T3 W(A) T4 R(A) W(B) R(C) W(A) W(D)

36 IDA / ADIT 36 Example T1 R(A) T2 T3 W(A) T4 R(A) W(A)

37 IDA / ADIT 37 Can we make sure that we only get serializable schedules?

38 IDA / ADIT 38 Locking Locking Locking: to control access to data Shared/Exclusive lock or read/write lock o read-lock(X) (shared lock) If X is unlocked or locked by a shared lock, lock it, otherwise wait until it is possible to lock it o write-lock(X) (exclusive lock) If X is unlocked, lock it, otherwise wait until X is unlocked o unlock(X).

39 IDA / ADIT 39 Shared/Exclusive locking Shared/Exclusive locking 1. A transaction T should lock X with a read-lock(X) or a write-lock(X) before executing a read-item(X). 2. A transaction T should lock X with a write-lock(X) before executing a write-item(X). 3. A transaction T should unlock X with a unlock(X) after all read-item(X) and write-item(X) in T have been executed.

40 IDA / ADIT 40 Shared/Exclusive locking Shared/Exclusive locking 4. A transaction T should not use a read-lock(X) if it already has a read or write lock on X. 5. A transaction T should not use a write-lock(X) if it already has a read or write lock on X. 4 and 5 can sometimes be replaced by up- and downgrading of locks.

41 IDA / ADIT 41 Two-phase locking A transaction follows the two-phase locking protocol if all locking operations (read-lock and write-lock) for all data items come before the first unlock operation in the transaction A transaction that follows the two-phase locking protocol has an expansion phase and a shrinking phase.

42 IDA / ADIT 42 Two-phase locking – allowed transactions? T1 Read-item(my-account1) Write-lock(my-account2) Unlock(my-account1) Read-item(my-account2) my-account2 := my-account Write-item(my-account2) Read-lock(my-account1) Unlock(my-account2) T2 Read-item(my-account1) Write-lock(my-account2) Unlock(my-account1) Read-item(my-account2) my-account2 := my-account Write-item(my-account2) Read-lock(my-account1) Unlock(my-account2)

43 IDA / ADIT 43 Two-phase locking – allowed transactions? T1 Read-item(my-account1) Write-lock(my-account2) Unlock(my-account1) Read-item(my-account2) my-account2 := my-account Write-item(my-account2) Read-lock(my-account1) Unlock(my-account2) T2 Read-item(my-account1) Write-lock(my-account2) Unlock(my-account1) Read-item(my-account2) my-account2 := my-account Write-item(my-account2) Read-lock(my-account1) Unlock(my-account2)

44 IDA / ADIT 44 Follow 2PL Protocol? T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) other-account := other-account Read-item(other-account) Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME

45 IDA / ADIT 45 Follow 2PL Protocol? T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) other-account := other-account Read-item(other-account) Write-item(other-account) Read-item(my-account) my-account := my-account Write-item(my-account) TIME lock(my-account) lock(other-account)???

46 IDA / ADIT 46 Follow 2PL Protocol? (yes) T1 T2 Read-item(my-account) my-account := my-account Write-item(my-account) other-account := other-account Read-item(other-account) Write-item(other-account) TIME lock(my-account) Read-item(my-account) my-account := my-account Write-item(my-account) lock(my-account) lock(other-account) unlock(my-account) unlock(other-account) unlock(my-account)

47 IDA / ADIT 47 Follow 2PL Protocol? T1T2 Read-item(my-account) My-account := my-account Write-item(my-account) Read-item(other-account) Other-account := other-account Write-item(other-account) Read-item(my-account) My-account := my-account Write-item(my-account) TIME

48 IDA / ADIT 48 Follow 2PL Protocol? (no!) T1T2 Read-item(my-account) My-account := my-account Write-item(my-account) Read-item(other-account) Other-account := other-account Write-item(other-account) Read-item(my-account) My-account := my-account Write-item(my-account) TIME lock(my-account)

49 IDA / ADIT 49 Follow 2PL Protocol? (no!) T1 R(A) T2 W(C) T3 W(A) T4 R(A) W(B) R(C) W(A) W(D)

50 IDA / ADIT 50 Follow 2PL Protocol? (yes) T1 T2 T3 read(x) x:=x+1 write(x) read(x) x:=x+1 write(x) read(x) x:=x+1 write(x) read(y) y:=y+1 write(y) read(y) y:=y+1 write(y)

51 IDA / ADIT 51 Serializability through 2PL Serializability through 2PL Theorem If all transactions follow the two-phase locking protocol then the schedule is serializable. Follow (aka permit) the two-phase locking protocol means we can apply the protocol so that the transactions interleave as it is.  However, there are serializable schedules which do not follow two-phase locking.

52 IDA / ADIT 52 Serializable, but not follow 2PL Protocol T1 T2 T3 write(x) write(y)

53 IDA / ADIT 53 Deadlock Deadlock Two or more transactions wait for each other to get data unlocked Deadlock prevention: - lock all data beforehand, wait-die, wound-wait, no waiting, cautious waiting Deadlock detection: wait-for graph, timeouts

54 IDA / ADIT 54 Deadlock T1 Write-lock(my-account1) Write-lock(my-account2) T2 Write-lock(my-account2) Write-lock(my-account1) TIME

55 IDA / ADIT 55 Starvation Starvation A transaction is not executed for an indefinite period of time while other transactions are executed normally


Download ppt "IDA / ADIT Databasteknik Databaser och bioinformatik Transaction Fang Wei-Kleiner."

Similar presentations


Ads by Google