Top Banner
Intro to Database Systems 15-445/15-645 Fall 2019 Andy Pavlo Computer Science Carnegie Mellon University AP 19 Multi-Version Concurrency Control
82

19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

Jul 23, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

Intro to Database Systems

15-445/15-645

Fall 2019

Andy PavloComputer Science Carnegie Mellon UniversityAP

19 Multi-Version Concurrency Control

Page 2: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

ADMINISTRIVIA

Project #3 is due Sun Nov 17th @ 11:59pm.

Homework #4 was released last week.It is due Wed Nov 13th @ 11:59pm.

2

Page 3: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MULTI-VERSION CONCURRENCY CONTROL

The DBMS maintains multiple physical versions of a single logical object in the database:→ When a txn writes to an object, the DBMS creates a new

version of that object. → When a txn reads an object, it reads the newest version

that existed when the txn started.

3

Page 4: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC HISTORY

Protocol was first proposed in 1978 MIT PhD dissertation.

First implementations was Rdb/VMS and InterBase at DEC in early 1980s. → Both were by Jim Starkey, co-founder of NuoDB.→ DEC Rdb/VMS is now "Oracle Rdb"→ InterBase was open-sourced as Firebird.

4

Page 5: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MULTI-VERSION CONCURRENCY CONTROL

Writers don't block readers.Readers don't block writers.

Read-only txns can read a consistent snapshotwithout acquiring locks.→ Use timestamps to determine visibility.

Easily support time-travel queries.

5

Page 6: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

Version Value Begin End

A0 123 0 -

TIM

ESchedule

T1 T2

MVCC EXAMPLE #1

6

BEGINR(A)

R(A)COMMIT

BEGINW(A)

COMMIT

Database

Page 7: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

Version Value Begin End

A0 123 0 -

TIM

ESchedule

T1 T2

MVCC EXAMPLE #1

6

BEGINR(A)

R(A)COMMIT

BEGINW(A)

COMMIT

Database

Page 8: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

Version Value Begin End

A0 123 0 -

TIM

ESchedule

T1 T2

MVCC EXAMPLE #1

6

BEGINR(A)

R(A)COMMIT

BEGINW(A)

COMMIT

TS(T1)=1 TS(T2)=2 Database

Page 9: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

Version Value Begin End

A0 123 0 -

TIM

ESchedule

T1 T2

MVCC EXAMPLE #1

6

BEGINR(A)

R(A)COMMIT

BEGINW(A)

COMMIT

TS(T1)=1 TS(T2)=2 Database

Page 10: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

Version Value Begin End

A0 123 0 -

TIM

ESchedule

T1 T2

MVCC EXAMPLE #1

6

BEGINR(A)

R(A)COMMIT

BEGINW(A)

COMMIT

-2456A1

TS(T1)=1 TS(T2)=2 Database

T2 creates version A1and sets A0 End-TS.

Page 11: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

T2 2 Active

Txn Status Table

Version Value Begin End

A0 123 0 -

TIM

ESchedule

T1 T2

MVCC EXAMPLE #1

6

BEGINR(A)

R(A)COMMIT

BEGINW(A)

COMMIT

2

-2456A1

TS(T1)=1 TS(T2)=2 Database

T2 creates version A1and sets A0 End-TS.

Page 12: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

T2 2 Active

Txn Status Table

Version Value Begin End

A0 123 0 -

TIM

ESchedule

T1 T2

MVCC EXAMPLE #1

6

BEGINR(A)

R(A)COMMIT

BEGINW(A)

COMMIT

2

T1 reads version A0.

-2456A1

TS(T1)=1 TS(T2)=2 Database

Page 13: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

TS(T1)=1 TS(T2)=2 Database

Page 14: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

TS(T1)=1 TS(T2)=2 Database

Page 15: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

-1456A1

TS(T1)=1 TS(T2)=2 Database

Page 16: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

-1456A1

TS(T1)=1 TS(T2)=2 Database

Page 17: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

1

-1456A1

TS(T1)=1 TS(T2)=2 Database

Page 18: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

1

-1456A1

TS(T1)=1 TS(T2)=2 Database

Active2T2

T2 reads version A0because T1 has not

committed yet.

Page 19: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

1

-1456A1

TS(T1)=1 TS(T2)=2 Database

Active2T2

T2 has to stall until T1commits.

Page 20: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

1

T1 reads version A1 that it wrote earlier.

-1456A1

TS(T1)=1 TS(T2)=2 Database

Active2T2

Page 21: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

1

-1456A1

TS(T1)=1 TS(T2)=2 Database

Active2T2

Committed1T1

Page 22: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TxnId Timestamp Status

T1 1 Active

Txn Status Table

Version Value Begin End

A0 123 0

TIM

ESchedule

T1 T2

MVCC EXAMPLE #2

7

BEGINR(A)W(A)

R(A)COMMIT

BEGINR(A)W(A)

COMMIT

1

-1456A1 2

-2789A2

TS(T1)=1 TS(T2)=2 Database

Active2T2

Committed1T1

Now T2 can create the new version.

Page 23: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MULTI-VERSION CONCURRENCY CONTROL

MVCC is more than just a concurrency control protocol. It completely affects how the DBMS manages transactions and the database.

8

Page 24: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DESIGN DECISIONS

Concurrency Control Protocol

Version Storage

Garbage Collection

Index Management

9

Page 25: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

CONCURRENCY CONTROL PROTOCOL

Approach #1: Timestamp Ordering→ Assign txns timestamps that determine serial order.

Approach #2: Optimistic Concurrency Control→ Three-phase protocol from last class.→ Use private workspace for new versions.

Approach #3: Two-Phase Locking→ Txns acquire appropriate lock on physical version before

they can read/write a logical tuple.

10

Page 26: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

VERSION STORAGE

The DBMS uses the tuples’ pointer field to create a version chain per logical tuple.→ This allows the DBMS to find the version that is visible

to a particular txn at runtime.→ Indexes always point to the “head” of the chain.

Different storage schemes determine where/what to store for each version.

11

Page 27: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

VERSION STORAGE

Approach #1: Append-Only Storage→ New versions are appended to the same table space.

Approach #2: Time-Travel Storage→ Old versions are copied to separate table space.

Approach #3: Delta Storage→ The original values of the modified attributes are copied

into a separate delta record space.

12

Page 28: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

APPEND-ONLY STORAGE

All of the physical versions of a logical tuple are stored in the same table space. The versions are mixed together.

On every update, append a new version of the tuple into an empty space in the table.

13

Main Table

VERSION VALUE

A0 $111

POINTER

A1 $222 Ø

B1 $10 Ø

Page 29: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

APPEND-ONLY STORAGE

All of the physical versions of a logical tuple are stored in the same table space. The versions are mixed together.

On every update, append a new version of the tuple into an empty space in the table.

13

Main Table

VERSION VALUE

A0 $111

POINTER

A1 $222 Ø

A2 $333 Ø

B1 $10 Ø

Page 30: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

APPEND-ONLY STORAGE

All of the physical versions of a logical tuple are stored in the same table space. The versions are mixed together.

On every update, append a new version of the tuple into an empty space in the table.

13

Main Table

VERSION VALUE

A0 $111

POINTER

A1 $222 Ø

A2 $333 Ø

B1 $10 Ø

Page 31: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

APPEND-ONLY STORAGE

All of the physical versions of a logical tuple are stored in the same table space. The versions are mixed together.

On every update, append a new version of the tuple into an empty space in the table.

13

Main Table

VERSION VALUE

A0 $111

POINTER

A1 $222

A2 $333 Ø

B1 $10 Ø

Page 32: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

VERSION CHAIN ORDERING

Approach #1: Oldest-to-Newest (O2N)→ Just append new version to end of the chain.→ Have to traverse chain on look-ups.

Approach #2: Newest-to-Oldest (N2O)→ Have to update index pointers for every new version.→ Don’t have to traverse chain on look ups.

14

Page 33: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TIME-TRAVEL STORAGE

15

On every update, copy the current version to the time-travel table. Update pointers.

Main Table

VERSION VALUE

A2 $222

POINTER

B1 $10

Time-Travel Table

VERSION VALUE

A1 $111

POINTER

Ø

Page 34: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TIME-TRAVEL STORAGE

15

On every update, copy the current version to the time-travel table. Update pointers.

Main Table

VERSION VALUE

A2 $222

POINTER

B1 $10

Time-Travel Table

VERSION VALUE

A1 $111

POINTER

A2 $222

Ø

Page 35: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TIME-TRAVEL STORAGE

15

On every update, copy the current version to the time-travel table. Update pointers.

Overwrite master version in the main table.Update pointers.

Main Table

VERSION VALUE

A2 $222

POINTER

B1 $10

Time-Travel Table

VERSION VALUE

A1 $111

POINTER

A2 $222

Ø

Page 36: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TIME-TRAVEL STORAGE

15

On every update, copy the current version to the time-travel table. Update pointers.

Overwrite master version in the main table.Update pointers.

Main Table

VERSION VALUE

A2 $222

POINTER

B1 $10

A3 $333

Time-Travel Table

VERSION VALUE

A1 $111

POINTER

A2 $222

Ø

Page 37: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TIME-TRAVEL STORAGE

15

On every update, copy the current version to the time-travel table. Update pointers.

Overwrite master version in the main table.Update pointers.

Main Table

VERSION VALUE

A2 $222

POINTER

B1 $10

A3 $333

Time-Travel Table

VERSION VALUE

A1 $111

POINTER

A2 $222

Ø

Page 38: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

DELTA STORAGE

16

On every update, copy only the values that were modified to the delta storage and overwrite the master version.

Main Table

VERSION VALUE

A1 $111

POINTER

B1 $10

Delta Storage Segment

Page 39: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

DELTA STORAGE

16

On every update, copy only the values that were modified to the delta storage and overwrite the master version.

Main Table

VERSION VALUE

A1 $111

POINTER

B1 $10

Delta Storage Segment

Page 40: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

DELTA STORAGE

16

On every update, copy only the values that were modified to the delta storage and overwrite the master version.

Main Table

VERSION VALUE

A1 $111

POINTER

B1 $10

Delta Storage Segment

DELTA POINTER

A1 (VALUE→$111) Ø

Page 41: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

DELTA STORAGE

16

On every update, copy only the values that were modified to the delta storage and overwrite the master version.

Main Table

VERSION VALUE

A1 $111

POINTER

B1 $10

Delta Storage Segment

DELTA POINTER

A1 (VALUE→$111) ØA2 $222

Page 42: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

DELTA STORAGE

16

On every update, copy only the values that were modified to the delta storage and overwrite the master version.

Main Table

VERSION VALUE

A1 $111

POINTER

B1 $10

Delta Storage Segment

DELTA POINTER

A2 (VALUE→$222)

A1 (VALUE→$111) ØA2 $222

Page 43: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

DELTA STORAGE

16

On every update, copy only the values that were modified to the delta storage and overwrite the master version.

Txns can recreate old versions by applying the delta in reverse order.

Main Table

VERSION VALUE

A1 $111

POINTER

B1 $10

Delta Storage Segment

DELTA POINTER

A2 (VALUE→$222)

A1 (VALUE→$111) ØA2 $222A3 $333

Page 44: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

GARBAGE COLLECTION

The DBMS needs to remove reclaimable physical versions from the database over time.→ No active txn in the DBMS can “see” that version (SI).→ The version was created by an aborted txn.

Two additional design decisions:→ How to look for expired versions?→ How to decide when it is safe to reclaim memory?

17

Page 45: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

GARBAGE COLLECTION

Approach #1: Tuple-level→ Find old versions by examining tuples directly.→ Background Vacuuming vs. Cooperative Cleaning

Approach #2: Transaction-level→ Txns keep track of their old versions so the DBMS does

not have to scan tuples to determine visibility.

18

Page 46: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

VERSION BEGIN END

A100 1 9

B100 1 9

B101 10 20

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Vacuum

Page 47: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

VERSION BEGIN END

A100 1 9

B100 1 9

B101 10 20

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Vacuum

Page 48: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

VERSION BEGIN END

A100 1 9

B100 1 9

B101 10 20

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Vacuum

Page 49: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

VERSION BEGIN END

A100 1 9

B100 1 9

B101 10 20

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Vacuum

Page 50: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

VERSION BEGIN END

A100 1 9

B100 1 9

B101 10 20

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Vacuum

Dirty P

age BitM

ap

Page 51: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

VERSION BEGIN END

A100 1 9

B100 1 9

B101 10 20

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Vacuum

Dirty P

age BitM

ap

Page 52: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Cooperative Cleaning:Worker threads identify reclaimable versions as they traverse version chain. Only works with O2N.

A2 A3

B0 B1 B2 B3

INDEXA0 A1GET(A)

Page 53: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Cooperative Cleaning:Worker threads identify reclaimable versions as they traverse version chain. Only works with O2N.

A2 A3

B0 B1 B2 B3

INDEXA0 A1GET(A)

Page 54: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Cooperative Cleaning:Worker threads identify reclaimable versions as they traverse version chain. Only works with O2N.

A2 A3

B0 B1 B2 B3

INDEXA0 A1XGET(A)

Page 55: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Cooperative Cleaning:Worker threads identify reclaimable versions as they traverse version chain. Only works with O2N.

A2 A3

B0 B1 B2 B3

INDEXA0 A1X XGET(A)

Page 56: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Cooperative Cleaning:Worker threads identify reclaimable versions as they traverse version chain. Only works with O2N.

A2 A3

B0 B1 B2 B3

INDEX

GET(A)

Page 57: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TUPLE-LEVEL GC

19

Background Vacuuming:Separate thread(s) periodically scan the table and look for reclaimable versions. Works with any storage.

Thread #1

TS(T1)=12

Thread #2

TS(T2)=25

Cooperative Cleaning:Worker threads identify reclaimable versions as they traverse version chain. Only works with O2N.

A2 A3

B0 B1 B2 B3

INDEX

GET(A)

Page 58: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

TRANSACTION-LEVEL GC

Each txn keeps track of its read/write set.

The DBMS determines when all versions created by a finished txn are no longer visible.

20

Page 59: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

INDEX MANAGEMENT

Primary key indexes point to version chain head.→ How often the DBMS has to update the pkey index

depends on whether the system creates new versions when a tuple is updated.

→ If a txn updates a tuple’s pkey attribute(s), then this is treated as an DELETE followed by an INSERT.

Secondary indexes are more complicated…

21

Page 60: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

SECONDARY INDEXES

Approach #1: Logical Pointers→ Use a fixed identifier per tuple that does not change.→ Requires an extra indirection layer.→ Primary Key vs. Tuple Id

Approach #2: Physical Pointers→ Use the physical address to the version chain head.

22

Page 61: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

INDEX POINTERS

23

PRIMARY INDEX SECONDARY INDEX

A100 A99 A98 A97Append-OnlyNewest-to-Oldest

Page 62: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

INDEX POINTERS

23

PRIMARY INDEX SECONDARY INDEX

A100 A99 A98 A97

GET(A)

Append-OnlyNewest-to-Oldest

Physical Address

Page 63: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

INDEX POINTERS

23

PRIMARY INDEX SECONDARY INDEX

A100 A99 A98 A97Append-OnlyNewest-to-Oldest

GET(A)

Physical Address

Page 64: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

SECONDARY INDEX

SECONDARY INDEX

SECONDARY INDEX

INDEX POINTERS

23

PRIMARY INDEX SECONDARY INDEX

A100 A99 A98 A97Append-OnlyNewest-to-Oldest

GET(A)

Page 65: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

INDEX POINTERS

23

PRIMARY INDEX SECONDARY INDEX

A100 A99 A98 A97Append-OnlyNewest-to-Oldest

GET(A)

Physical Address

Primary Key

Page 66: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

INDEX POINTERS

23

PRIMARY INDEX SECONDARY INDEX

A100 A99 A98 A97Append-OnlyNewest-to-Oldest

GET(A)

TupleId→Address

TupleId

Physical Address

Page 67: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC IMPLEMENTATIONS

24

Protocol Version Storage Garbage Collection Indexes

Oracle MV2PL Delta Vacuum Logical

Postgres MV-2PL/MV-TO Append-Only Vacuum Physical

MySQL-InnoDB MV-2PL Delta Vacuum Logical

HYRISE MV-OCC Append-Only – Physical

Hekaton MV-OCC Append-Only Cooperative Physical

MemSQL MV-OCC Append-Only Vacuum Physical

SAP HANA MV-2PL Time-travel Hybrid Logical

NuoDB MV-2PL Append-Only Vacuum Logical

HyPer MV-OCC Delta Txn-level Logical

CMU's TBD MV-OCC Delta Txn-level Logical

Page 68: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

CONCLUSION

MVCC is the widely used scheme in DBMSs.Even systems that do not support multi-statement txns (e.g., NoSQL) use it.

25

Page 69: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

NEXT CL ASS

No class on Wed November 6th

26

Page 70: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DELETES

The DBMS physically deletes a tuple from the database only when all versions of a logicallydeleted tuple are not visible.→ If a tuple is deleted, then there cannot be a new version of

that tuple after the newest version.→ No write-write conflicts / first-writer wins

We need a way to denote that tuple has been logically delete at some point in time.

27

Page 71: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DELETES

Approach #1: Deleted Flag→ Maintain a flag to indicate that the logical tuple has been

deleted after the newest physical version.→ Can either be in tuple header or a separate column.

Approach #2: Tombstone Tuple→ Create an empty physical version to indicate that a logical

tuple is deleted.→ Use a separate pool for tombstone tuples with only a

special bit pattern in version chain pointer to reduce the storage overhead.

28

Page 72: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC INDEXES

MVCC DBMS indexes (usually) do not store version information about tuples with their keys.→ Exception: Index-organized tables (e.g., MySQL)

Every index must support duplicate keys from different snapshots:→ The same key may point to different logical tuples in

different snapshots.

29

Page 73: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DUPLICATE KEY PROBLEM

30

Index

VERSION

A1

BEGIN-TS END-TS

1 ∞POINTER

Ø

READ(A)

Thread #1Begin @ 10

Page 74: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DUPLICATE KEY PROBLEM

30

Index

Thread #2Begin @ 20

VERSION

A1

BEGIN-TS END-TS

1 ∞POINTER

Ø

UPDATE(A)

READ(A)

Thread #1Begin @ 10

Page 75: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DUPLICATE KEY PROBLEM

30

Index

Thread #2Begin @ 20

VERSION

A1

BEGIN-TS END-TS

1 ∞POINTER

Ø

UPDATE(A)

A2 20 ∞ Ø

20

READ(A)

Thread #1Begin @ 10

Page 76: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DUPLICATE KEY PROBLEM

30

Index

DELETE(A)

Thread #2Begin @ 20

VERSION

A1

BEGIN-TS END-TS

1 ∞POINTER

Ø

UPDATE(A)

A2 20 ∞ Ø

20

READ(A)

Thread #1Begin @ 10

Page 77: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DUPLICATE KEY PROBLEM

30

Index

DELETE(A)

Thread #2Begin @ 20

VERSION

A1

BEGIN-TS END-TS

1 ∞POINTER

Ø

UPDATE(A)

A2 20 ∞ Ø

20

READ(A)

Thread #1Begin @ 10

Commit @ 25

Page 78: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DUPLICATE KEY PROBLEM

30

Index

DELETE(A)

Thread #2Begin @ 20

VERSION

A1

BEGIN-TS END-TS

1 ∞POINTER

Ø

UPDATE(A)

A2 20 ∞ Ø

20

READ(A)

Thread #1Begin @ 10

Commit @ 25

25 25

25

Page 79: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DUPLICATE KEY PROBLEM

30

Index

DELETE(A)

Thread #2Begin @ 20

INSERT(A)

Thread #3Begin @ 30

VERSION

A1

BEGIN-TS END-TS

1 ∞POINTER

Ø

UPDATE(A)

A2 20 ∞ Ø

20

READ(A)

Thread #1Begin @ 10

Commit @ 25

25 25

25

Page 80: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DUPLICATE KEY PROBLEM

30

Index

DELETE(A)

Thread #2Begin @ 20

INSERT(A)

Thread #3Begin @ 30

VERSION

A1

BEGIN-TS END-TS

1 ∞POINTER

Ø

UPDATE(A)

A2 20 ∞ Ø

20

A1 30 ∞ Ø

READ(A)

Thread #1Begin @ 10

Commit @ 25

25 25

25

Page 81: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC DUPLICATE KEY PROBLEM

30

Index

DELETE(A)

Thread #2Begin @ 20

INSERT(A)

Thread #3Begin @ 30

VERSION

A1

BEGIN-TS END-TS

1 ∞POINTER

Ø

UPDATE(A)

A2 20 ∞ Ø

20

A1 30 ∞ Ø

READ(A)

Thread #1Begin @ 10

Commit @ 25

25 25

25

READ(A)

Page 82: 19 Multi-Version Concurrency Control · Writers don't block readers. Readers don't block writers. Read-only txns can read a consistent snapshot without acquiring locks. →Use timestamps

CMU 15-445/645 (Fall 2019)

MVCC INDEXES

Each index's underlying data structure has tosupport the storage of non-unique keys.

Use additional execution logic to perform conditional inserts for pkey / unique indexes.→ Atomically check whether the key exists and then insert.

Workers may get back multiple entries for a single fetch. They then have to follow the pointers to find the proper physical version.

31