15-721 DATABASE SYSTEMS [Source] Lecture #03 Concurrency Control - - PowerPoint PPT Presentation

15 721
SMART_READER_LITE
LIVE PREVIEW

15-721 DATABASE SYSTEMS [Source] Lecture #03 Concurrency Control - - PowerPoint PPT Presentation

15-721 DATABASE SYSTEMS [Source] Lecture #03 Concurrency Control Part I Andy Pavlo / / Carnegie Mellon University / / Spring 2016 2 TODAYS AGENDA Transaction Models Concurrency Control Overview Many-Core Evaluation CMU 15-721


slide-1
SLIDE 1

Andy Pavlo / / Carnegie Mellon University / / Spring 2016

Lecture #03 – Concurrency Control Part I

DATABASE SYSTEMS

15-721

[Source]
slide-2
SLIDE 2

CMU 15-721 (Spring 2016)

TODAY’S AGENDA

Transaction Models Concurrency Control Overview Many-Core Evaluation

2

slide-3
SLIDE 3

CMU 15-721 (Spring 2016)

TRANSACTION DEFINITION

3

slide-4
SLIDE 4

CMU 15-721 (Spring 2016)

TRANSACTION DEFINITION

A txn is a sequence of actions that are executed

  • n a shared database to perform some higher-

level function. Txns are the basic unit of change in the DBMS. No partial txns are allowed.

3

slide-5
SLIDE 5

CMU 15-721 (Spring 2016)

ACTION CLASSIFICATION

Unprotected Actions

→ These lack all of the ACID properties except for

  • consistency. Their effects cannot be depended upon.

Protected Actions

→ These do not externalize their results before they are completely done. Fully ACID.

Real Actions

→ These affect the physical world in a way that is hard

  • r impossible to reverse.

4

slide-6
SLIDE 6

CMU 15-721 (Spring 2016)

TRANSACTION MODELS

Flat Txns Flat Txns + Savepoints Chained Txns Nested Txns Saga Txns Compensating Txns

5

slide-7
SLIDE 7

CMU 15-721 (Spring 2016)

FLAT TRANSACTIONS

Standard txn model that starts with BEGIN, followed by one or more actions, and then completed with either COMMIT or ROLLBACK.

6

Txn #1

BEGIN READ(A) COMMIT WRITE(B)

Txn #2

BEGIN READ(A) ROLLBACK WRITE(B)

slide-8
SLIDE 8

CMU 15-721 (Spring 2016)

LIMITATIONS OF FLAT TRANSACTIONS

The application can only rollback the entire txn (i.e., no partial rollbacks). All of a txn’s work is lost is the DBMS fails before that txn finishes. Each txn takes place at a single point in time

7

slide-9
SLIDE 9

CMU 15-721 (Spring 2016)

LIMITATIONS OF FLAT TRANSACTIONS

Multi-Stage Planning

→ An application needs to make multiple reservations. → All the reservations need to occur or none of them.

Bulk Updates

→ An application needs to update one billion records. → This txn could take hours to complete and therefore the DBMS is exposed to losing all of its work for any failure or conflict.

8

slide-10
SLIDE 10

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

Save the current state of processing for the txn and provide a handle for the application to refer to that savepoint. The application can control the state of the txn through these checkpoints:

→ ROLLBACK – Revert all changes back to the state of the DB at the savepoint. → RELEASE – Destroys a savepoint previously defined in the txn.

9

slide-11
SLIDE 11

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C)

slide-12
SLIDE 12

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C)

slide-13
SLIDE 13

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1

slide-14
SLIDE 14

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1

slide-15
SLIDE 15

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A

slide-16
SLIDE 16

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A

slide-17
SLIDE 17

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A Savepoint#2

slide-18
SLIDE 18

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A Savepoint#2

slide-19
SLIDE 19

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A Savepoint#2 B

slide-20
SLIDE 20

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A Savepoint#2 B

slide-21
SLIDE 21

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A Savepoint#2 B

X

slide-22
SLIDE 22

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A Savepoint#2 B Savepoint#3

X

slide-23
SLIDE 23

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A Savepoint#2 B Savepoint#3

X

slide-24
SLIDE 24

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A Savepoint#2 B Savepoint#3 C

X

slide-25
SLIDE 25

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

10

Txn #1

BEGIN WRITE(A) COMMIT

SAVEPOINT 1

WRITE(B)

ROLLBACK TO 1

WRITE(C) Savepoint#1 A Savepoint#2 B Savepoint#3 C

X

slide-26
SLIDE 26

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C)

ROLLBACK TO 3 RELEASE 2

WRITE(D)

slide-27
SLIDE 27

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1

ROLLBACK TO 3 RELEASE 2

WRITE(D)

slide-28
SLIDE 28

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A

ROLLBACK TO 3 RELEASE 2

WRITE(D)

slide-29
SLIDE 29

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A Savepoint#2

ROLLBACK TO 3 RELEASE 2

WRITE(D)

slide-30
SLIDE 30

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A Savepoint#2 B

ROLLBACK TO 3 RELEASE 2

WRITE(D)

slide-31
SLIDE 31

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A Savepoint#2 B

ROLLBACK TO 3 RELEASE 2

WRITE(D)

slide-32
SLIDE 32

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A Savepoint#2 B Savepoint#3

ROLLBACK TO 3 RELEASE 2

WRITE(D)

slide-33
SLIDE 33

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A Savepoint#2 B Savepoint#3 C

ROLLBACK TO 3 RELEASE 2

WRITE(D)

slide-34
SLIDE 34

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A Savepoint#2 B Savepoint#3 C

ROLLBACK TO 3 RELEASE 2

WRITE(D) Savepoint#4

slide-35
SLIDE 35

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A Savepoint#2 B Savepoint#3 C

ROLLBACK TO 3 RELEASE 2

WRITE(D) Savepoint#4

slide-36
SLIDE 36

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A B Savepoint#3 C

ROLLBACK TO 3 RELEASE 2

WRITE(D) Savepoint#4

slide-37
SLIDE 37

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A B Savepoint#3 C

ROLLBACK TO 3 RELEASE 2

WRITE(D) Savepoint#4 D

slide-38
SLIDE 38

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A B Savepoint#3 C

ROLLBACK TO 3 RELEASE 2

WRITE(D) Savepoint#4 D

slide-39
SLIDE 39

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A B Savepoint#3 C

ROLLBACK TO 3 RELEASE 2

WRITE(D) Savepoint#4 D

???

slide-40
SLIDE 40

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A B Savepoint#3 C

ROLLBACK TO 3 RELEASE 2

WRITE(D) Savepoint#4 D

???

slide-41
SLIDE 41

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A B Savepoint#3 C

ROLLBACK TO 3 RELEASE 2

WRITE(D) Savepoint#4 D

???

slide-42
SLIDE 42

CMU 15-721 (Spring 2016)

TRANSACTION SAVEPOINTS

11

Txn #1

BEGIN WRITE(A)

SAVEPOINT 3 SAVEPOINT 1

WRITE(B)

SAVEPOINT 2

WRITE(C) Savepoint#1 A B C

ROLLBACK TO 3 RELEASE 2

WRITE(D) Savepoint#4 D

???

slide-43
SLIDE 43

CMU 15-721 (Spring 2016)

TRANSACTION CHAINS

Multiple txns executed one after another. Combined COMMIT / BEGIN operation is atomic.

→ No other txn can change the state of the database as seen by the second txn from the time that the first txn commits and the second txn begins.

Differences with savepoints:

  • COMMIT allows the DBMS to free locks.
  • Cannot rollback previous txns in chain.

12

slide-44
SLIDE 44

CMU 15-721 (Spring 2016)

TRANSACTION CHAINS

13

Txn #1

BEGIN WRITE(A) COMMIT

Txn #2

BEGIN WRITE(B) COMMIT

Txn #3

BEGIN WRITE(C) ROLLBACK

slide-45
SLIDE 45

CMU 15-721 (Spring 2016)

TRANSACTION CHAINS

13

Txn #1

BEGIN WRITE(A) COMMIT

Txn #2

BEGIN WRITE(B) COMMIT

Txn #3

BEGIN WRITE(C) ROLLBACK

slide-46
SLIDE 46

CMU 15-721 (Spring 2016)

TRANSACTION CHAINS

13

Txn #1

BEGIN WRITE(A) COMMIT

Txn #2

BEGIN WRITE(B) COMMIT

Txn #3

BEGIN WRITE(C) ROLLBACK

slide-47
SLIDE 47

CMU 15-721 (Spring 2016)

TRANSACTION CHAINS

13

Txn #1

BEGIN WRITE(A) COMMIT

Txn #2

BEGIN WRITE(B) COMMIT

Txn #3

BEGIN WRITE(C) ROLLBACK

slide-48
SLIDE 48

CMU 15-721 (Spring 2016)

NESTED TRANSACTIONS

Savepoints organize a transaction as a sequence of actions that can be rolled back individually. Nested txns form a hierarchy of work.

→ The outcome of a child txn depends on the outcome

  • f its parent txn.

14

slide-49
SLIDE 49

CMU 15-721 (Spring 2016)

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-50
SLIDE 50

CMU 15-721 (Spring 2016)

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-51
SLIDE 51

CMU 15-721 (Spring 2016)

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-52
SLIDE 52

CMU 15-721 (Spring 2016)

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-53
SLIDE 53

CMU 15-721 (Spring 2016)

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-54
SLIDE 54

CMU 15-721 (Spring 2016)

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-55
SLIDE 55

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-56
SLIDE 56

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-57
SLIDE 57

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-58
SLIDE 58

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-59
SLIDE 59

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Sub-Txn #1.1.1 Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-60
SLIDE 60

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Sub-Txn #1.1.1

BEGIN

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-61
SLIDE 61

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Sub-Txn #1.1.1

BEGIN

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-62
SLIDE 62

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Sub-Txn #1.1.1

BEGIN

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-63
SLIDE 63

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Sub-Txn #1.1.1

BEGIN

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-64
SLIDE 64

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Sub-Txn #1.1.1

BEGIN

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

slide-65
SLIDE 65

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Sub-Txn #1.1.1

BEGIN

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

X X X

slide-66
SLIDE 66

CMU 15-721 (Spring 2016)

Sub-Txn #1.1

NESTED TRANSACTIONS

15

Sub-Txn #1.1.1

BEGIN

Txn #1

BEGIN WRITE(A) BEGIN BEGIN WRITE(C) COMMIT COMMIT WRITE(B) ROLLBACK WRITE(D) BEGIN

X X X ✓

slide-67
SLIDE 67

CMU 15-721 (Spring 2016)

BULK UPDATE PROBLEM

These other txn models are nice, but they still do not solve our bulk update problem. Chained txns seems like the right idea but they require the application to handle failures and maintain it’s own state.

→ Has to be able to reverse changes when things fail.

16

slide-68
SLIDE 68

CMU 15-721 (Spring 2016)

COMPENSATING TRANSACTIONS

A special type of txn that is designed to semantically reverse the effects of another already committed txn. Reversal has to be logical instead of physical.

→ Example: Decrement a counter by one instead of reverting to the original value.

17

slide-69
SLIDE 69

CMU 15-721 (Spring 2016)

SAGA TRANSACTIONS

A sequence of chained txns T1 ,…,Tn and compensating txns C1,…,Cn-1 where one of the following is guaranteed: →The txns will commit in the order T1 ,…,Tn →The txns will commit in the order T1 ,…,Tj,Cj,…,C1 (where j < n)

18

SAGAS SIGMOD, pp. 249-259, 2014.

slide-70
SLIDE 70

CMU 15-721 (Spring 2016)

SAGA TRANSACTIONS

19

Txn #1

BEGIN WRITE(A+1) COMMIT

Txn #2

BEGIN WRITE(B+1) COMMIT

Txn #3

BEGIN WRITE(C+1)

Comp Txn #1

BEGIN WRITE(A-1) COMMIT

Comp Txn #2

BEGIN WRITE(B-1) COMMIT

Comp Txn #3

BEGIN WRITE(C-1) COMMIT

slide-71
SLIDE 71

CMU 15-721 (Spring 2016)

SAGA TRANSACTIONS

19

Txn #1

BEGIN WRITE(A+1) COMMIT

Txn #2

BEGIN WRITE(B+1) COMMIT

Txn #3

BEGIN WRITE(C+1)

Comp Txn #1

BEGIN WRITE(A-1) COMMIT

Comp Txn #2

BEGIN WRITE(B-1) COMMIT

Comp Txn #3

BEGIN WRITE(C-1) COMMIT

slide-72
SLIDE 72

CMU 15-721 (Spring 2016)

SAGA TRANSACTIONS

19

Txn #1

BEGIN WRITE(A+1) COMMIT

Txn #2

BEGIN WRITE(B+1) COMMIT

Txn #3

BEGIN WRITE(C+1)

Comp Txn #1

BEGIN WRITE(A-1) COMMIT

Comp Txn #2

BEGIN WRITE(B-1) COMMIT

Comp Txn #3

BEGIN WRITE(C-1) COMMIT

slide-73
SLIDE 73

CMU 15-721 (Spring 2016)

SAGA TRANSACTIONS

19

Txn #1

BEGIN WRITE(A+1) COMMIT

Txn #2

BEGIN WRITE(B+1) COMMIT

Txn #3

BEGIN WRITE(C+1)

Comp Txn #1

BEGIN WRITE(A-1) COMMIT

Comp Txn #2

BEGIN WRITE(B-1) COMMIT

Comp Txn #3

BEGIN WRITE(C-1) COMMIT

slide-74
SLIDE 74

CMU 15-721 (Spring 2016)

SAGA TRANSACTIONS

19

Txn #1

BEGIN WRITE(A+1) COMMIT

Txn #2

BEGIN WRITE(B+1) COMMIT

Txn #3

BEGIN WRITE(C+1)

Comp Txn #1

BEGIN WRITE(A-1) COMMIT

Comp Txn #2

BEGIN WRITE(B-1) COMMIT

Comp Txn #3

BEGIN WRITE(C-1) COMMIT

slide-75
SLIDE 75

CMU 15-721 (Spring 2016)

SAGA TRANSACTIONS

19

Txn #1

BEGIN WRITE(A+1) COMMIT

Txn #2

BEGIN WRITE(B+1) COMMIT

Txn #3

BEGIN WRITE(C+1)

Comp Txn #1

BEGIN WRITE(A-1) COMMIT

Comp Txn #2

BEGIN WRITE(B-1) COMMIT

Comp Txn #3

BEGIN WRITE(C-1) COMMIT

slide-76
SLIDE 76

CMU 15-721 (Spring 2016)

SAGA TRANSACTIONS

19

Txn #1

BEGIN WRITE(A+1) COMMIT

Txn #2

BEGIN WRITE(B+1) COMMIT

Txn #3

BEGIN WRITE(C+1)

Comp Txn #1

BEGIN WRITE(A-1) COMMIT

Comp Txn #2

BEGIN WRITE(B-1) COMMIT

Comp Txn #3

BEGIN WRITE(C-1) COMMIT

slide-77
SLIDE 77

CMU 15-721 (Spring 2016)

CONCURRENCY CONTROL

The protocol to allow txns to access a database in a multi-programmed fashion while preserving the illusion that each of them is executing alone on a dedicated system.

→ The goal is to have the effect of a group of txns on the database’s state is equivalent to any serial execution of all txns.

Provides Atomicity + Isolation in ACID

20

slide-78
SLIDE 78

CMU 15-721 (Spring 2016)

TXN INTERNAL STATE

Undo Log Entries

→ Stored in an in-memory data structure. → Dropped on commit.

Redo Log Entries

→ Append to the in-memory tail of WAL. → Flushed to disk on commit.

Read/Write Set

→ Depends on the concurrency control scheme.

21

slide-79
SLIDE 79

CMU 15-721 (Spring 2016)

CONCURRENCY CONTROL SCHEMES

Two-Phase Locking (2PL)

→ Assume txns will conflict so they must acquire locks

  • n elements before they are allowed to access them.

Timestamp Ordering (T/O)

→ Assume that conflicts are rare so txns do not need to acquire locks and instead check for conflicts at commit time.

22

slide-80
SLIDE 80

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B)

slide-81
SLIDE 81

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-82
SLIDE 82

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-83
SLIDE 83

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

Growing Phase

slide-84
SLIDE 84

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B)

Shrinking Phase

LOCK(A) LOCK(B)

Growing Phase

slide-85
SLIDE 85

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-86
SLIDE 86

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #2

BEGIN COMMIT

LOCK(B) LOCK(A) WRITE(A) UNLOCK(A) UNLOCK(B) WRITE(B)

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-87
SLIDE 87

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #2

BEGIN COMMIT

LOCK(B) LOCK(A) WRITE(A) UNLOCK(A) UNLOCK(B) WRITE(B)

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-88
SLIDE 88

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #2

BEGIN COMMIT

LOCK(B) LOCK(A) WRITE(A) UNLOCK(A) UNLOCK(B) WRITE(B)

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-89
SLIDE 89

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #2

BEGIN COMMIT

LOCK(B) LOCK(A) WRITE(A) UNLOCK(A) UNLOCK(B) WRITE(B)

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-90
SLIDE 90

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #2

BEGIN COMMIT

LOCK(B) LOCK(A) WRITE(A) UNLOCK(A) UNLOCK(B) WRITE(B)

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-91
SLIDE 91

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #2

BEGIN COMMIT

LOCK(B) LOCK(A) WRITE(A) UNLOCK(A) UNLOCK(B) WRITE(B)

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-92
SLIDE 92

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #2

BEGIN COMMIT

LOCK(B) LOCK(A) WRITE(A) UNLOCK(A) UNLOCK(B) WRITE(B)

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-93
SLIDE 93

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

23

Txn #2

BEGIN COMMIT

LOCK(B) LOCK(A) WRITE(A) UNLOCK(A) UNLOCK(B) WRITE(B)

Txn #1

BEGIN COMMIT

LOCK(A) LOCK(B) UNLOCK(A) UNLOCK(B) READ(A) WRITE(B) LOCK(A) LOCK(B)

slide-94
SLIDE 94

CMU 15-721 (Spring 2016)

TWO-PHASE LOCKING

Deadlock Detection

→ Each txn maintains a queue of the txns that hold the locks that it waiting for. → A separate thread checks these queues for deadlocks. → If deadlock found, use a heuristic to decide what txn to kill in order to break deadlock.

Deadlock Prevention

→ Check whether another txn already holds a lock when another txn requests it. → If lock is not available, the txn will either (1) wait, (2) commit suicide, or (3) kill the other txn.

24

slide-95
SLIDE 95

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •
  • • •
slide-96
SLIDE 96

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •
  • • •
slide-97
SLIDE 97

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •
  • • •

10001

slide-98
SLIDE 98

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10000 10000

  • • •

10000

10001

slide-99
SLIDE 99

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10000 10000

  • • •

10000

10001

slide-100
SLIDE 100

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10001 10000

  • • •

10000

10001

slide-101
SLIDE 101

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10001 10000

  • • •

10000

10001

slide-102
SLIDE 102

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10001 10000

  • • •

10000

10001

slide-103
SLIDE 103

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10001 10001

  • • •

10000

10001

slide-104
SLIDE 104

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10001 10001

  • • •

10000

10001

slide-105
SLIDE 105

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10001 10001

  • • •

10000

10001

slide-106
SLIDE 106

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10001 10001

  • • •

10005

10001

slide-107
SLIDE 107

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10001 10001

  • • •

10005

10001

slide-108
SLIDE 108

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

25 Record Read Timestamp Write Timestamp

A B 10000

Txn #1

BEGIN COMMIT

READ(A) WRITE(B) WRITE(A)

  • • • •

10001 10001

  • • •

10005

10001

slide-109
SLIDE 109

CMU 15-721 (Spring 2016)

TIMESTAMP ORDERING

Basic T/O

→ Check for conflicts on each read/write. → Copy tuples on each access to ensure repeatable reads.

Multi-Version Concurrency Control (MVCC)

→ Create a new version of a tuple whenever a txn modifies it. Use timestamps as version id. → Check visibility on every read/write.

Optimistic Currency Control (OCC)

→ Store all changes in private workspace. → Check for conflicts at commit time and then merge.

26

slide-110
SLIDE 110

CMU 15-721 (Spring 2016)

CONCURRENCY CONTROL SCHEMES

27

DL_DETECT NO_WAIT WAIT_DIE 2PL w/ Deadlock Detection 2PL w/ Non-waiting Prevention 2PL w/ Wait-and-Die Prevention TIMESTAMP MVCC OCC Basic T/O Algorithm Multi-Version T/O Optimistic Concurrency Control

slide-111
SLIDE 111

CMU 15-721 (Spring 2016)

CONCURRENCY CONTROL SCHEMES

27

DL_DETECT NO_WAIT WAIT_DIE 2PL w/ Deadlock Detection 2PL w/ Non-waiting Prevention 2PL w/ Wait-and-Die Prevention TIMESTAMP MVCC OCC Basic T/O Algorithm Multi-Version T/O Optimistic Concurrency Control

slide-112
SLIDE 112

CMU 15-721 (Spring 2016)

CONCURRENCY CONTROL SCHEMES

27

DL_DETECT NO_WAIT WAIT_DIE 2PL w/ Deadlock Detection 2PL w/ Non-waiting Prevention 2PL w/ Wait-and-Die Prevention TIMESTAMP MVCC OCC Basic T/O Algorithm Multi-Version T/O Optimistic Concurrency Control

slide-113
SLIDE 113

CMU 15-721 (Spring 2016)

CONCURRENCY CONTROL SCHEMES

27

DL_DETECT NO_WAIT WAIT_DIE 2PL w/ Deadlock Detection 2PL w/ Non-waiting Prevention 2PL w/ Wait-and-Die Prevention TIMESTAMP MVCC OCC Basic T/O Algorithm Multi-Version T/O Optimistic Concurrency Control

slide-114
SLIDE 114

CMU 15-721 (Spring 2016)

CONCURRENCY CONTROL SCHEMES

27

DL_DETECT NO_WAIT WAIT_DIE 2PL w/ Deadlock Detection 2PL w/ Non-waiting Prevention 2PL w/ Wait-and-Die Prevention TIMESTAMP MVCC OCC Basic T/O Algorithm Multi-Version T/O Optimistic Concurrency Control

slide-115
SLIDE 115

CMU 15-721 (Spring 2016)

CONCURRENCY CONTROL SCHEMES

27

DL_DETECT NO_WAIT WAIT_DIE 2PL w/ Deadlock Detection 2PL w/ Non-waiting Prevention 2PL w/ Wait-and-Die Prevention TIMESTAMP MVCC OCC Basic T/O Algorithm Multi-Version T/O Optimistic Concurrency Control

slide-116
SLIDE 116

CMU 15-721 (Spring 2016)

CONCURRENCY CONTROL SCHEMES

27

DL_DETECT NO_WAIT WAIT_DIE 2PL w/ Deadlock Detection 2PL w/ Non-waiting Prevention 2PL w/ Wait-and-Die Prevention TIMESTAMP MVCC OCC Basic T/O Algorithm Multi-Version T/O Optimistic Concurrency Control

slide-117
SLIDE 117

CMU 15-721 (Spring 2016)

1000-CORE CPU SIMULATOR

DBx1000 Database System

→ In-memory DBMS with pluggable lock manager. → No network access, logging, or concurrent indexes

MIT Graphite CPU Simulator

→ Single-socket, tile-based CPU. → Shared L2 cache for groups of cores. → Tiles communicate over 2D-mesh network.

28

STARING INTO THE ABYSS: AN EVALUATION OF CONCURRENCY CONTROL WITH ONE THOUSAND CORES VLDB, pp. 209-220, 2014.

slide-118
SLIDE 118

CMU 15-721 (Spring 2016)

TARGET WORKLOAD

Yahoo! Cloud Serving Benchmark (YCSB)

→ 20 million tuples → Each tuple is 1KB (total database is ~20GB)

Each transactions reads/modifies 16 tuples. Varying skew in transaction access patterns. Serializable isolation level.

29

slide-119
SLIDE 119

CMU 15-721 (Spring 2016)

READ-ONLY WORKLOAD

30

slide-120
SLIDE 120

CMU 15-721 (Spring 2016)

READ-ONLY WORKLOAD

30

slide-121
SLIDE 121

CMU 15-721 (Spring 2016)

READ-ONLY WORKLOAD

30

slide-122
SLIDE 122

CMU 15-721 (Spring 2016)

READ-ONLY WORKLOAD

30

slide-123
SLIDE 123

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / MEDIUM-CONTENTION

31

slide-124
SLIDE 124

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / MEDIUM-CONTENTION

31

slide-125
SLIDE 125

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / MEDIUM-CONTENTION

31

slide-126
SLIDE 126

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / MEDIUM-CONTENTION

31

slide-127
SLIDE 127

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / HIGH-CONTENTION

32

slide-128
SLIDE 128

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / HIGH-CONTENTION

32

slide-129
SLIDE 129

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / HIGH-CONTENTION

32

slide-130
SLIDE 130

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / HIGH-CONTENTION

32

slide-131
SLIDE 131

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / HIGH-CONTENTION

32

slide-132
SLIDE 132

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / HIGH-CONTENTION

32

slide-133
SLIDE 133

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / HIGH-CONTENTION

32

slide-134
SLIDE 134

CMU 15-721 (Spring 2016)

WRITE-INTENSIVE / HIGH-CONTENTION

32

slide-135
SLIDE 135

CMU 15-721 (Spring 2016)

BOTTLENECKS

Lock Thrashing

→ DL_DETECT, WAIT_DIE

Timestamp Allocation

→ All T/O algorithms + WAIT_DIE

Memory Allocations

→ OCC + MVCC

33

slide-136
SLIDE 136

CMU 15-721 (Spring 2016)

LOCK THRASHING

Each txn waits longer to acquire locks, causing

  • ther txn to wait longer to acquire locks.

Can measure this phenomenon by removing deadlock detection/prevention overhead.

→ Force txns to acquire locks in primary key order. → Deadlocks are not possible.

34

slide-137
SLIDE 137

CMU 15-721 (Spring 2016)

LOCK THRASHING

35

slide-138
SLIDE 138

CMU 15-721 (Spring 2016)

LOCK THRASHING

35

slide-139
SLIDE 139

CMU 15-721 (Spring 2016)

LOCK THRASHING

35

slide-140
SLIDE 140

CMU 15-721 (Spring 2016)

LOCK THRASHING

35

slide-141
SLIDE 141

CMU 15-721 (Spring 2016)

TIMESTAMP ALLOCATION

Mutex

→ Worst option.

Atomic Addition

→ Requires cache invalidation on write.

Batched Atomic Addition

→ Needs a back-off mechanism to prevent fast burn.

Hardware Clock

→ Not sure if it will exist in future CPUs.

Hardware Counter

→ Not implemented in existing CPUs.

36

slide-142
SLIDE 142

CMU 15-721 (Spring 2016)

TIMESTAMP ALLOCATION

37

slide-143
SLIDE 143

CMU 15-721 (Spring 2016)

MEMORY ALLOCATIONS

Copying data on every read/write access slows down the DBMS because of contention on the memory controller.

→ In-place updates and non-copying reads are not affected as much.

Default libc malloc is slow. Never use it.

38

slide-144
SLIDE 144

CMU 15-721 (Spring 2016)

PARTITION-LEVEL LOCKING

The database is split up into horizontal partitions:

→ Each partition is assigned a single-threaded execution engine that has exclusive access to its data. → In-place updates.

Only one txn can execute at a time per partition.

→ Order txns based on when they arrive at the DBMS. → A txn acquires the lock for a partition when it has the lowest timestamp. → It is not allowed to access any partition that it does not hold the lock for.

39

slide-145
SLIDE 145

CMU 15-721 (Spring 2016)

READ-ONLY WORKLOAD

40

slide-146
SLIDE 146

CMU 15-721 (Spring 2016)

MULTI-PARTITION WORKLOADS

41

slide-147
SLIDE 147

CMU 15-721 (Spring 2016)

PARTING THOUGHTS

Concurrency control is hard to get correct and perform well. Evaluation did not consider HTAP workloads.

42

slide-148
SLIDE 148

CMU 15-721 (Spring 2016)

NEXT CLASS

Isolation Levels Modern MVCC

43