TicToc: Time Traveling Optimistic Concurrency Control
Xiangyao Yu1, Andrew Pavlo2, Daniel Sanchez1, Srinivas Devadas1
Massachusetts Institute of Technology1 Carnegie Mellon University2
TicToc: Time Traveling Optimistic Concurrency Control Xiangyao Yu 1 - - PowerPoint PPT Presentation
TicToc: Time Traveling Optimistic Concurrency Control Xiangyao Yu 1 , Andrew Pavlo 2 , Daniel Sanchez 1 , Srinivas Devadas 1 Massachusetts Institute of Technology 1 Carnegie Mellon University 2 PHYSICAL VS LOGICAL TIME T1 T2 Lock Release Lock
Xiangyao Yu1, Andrew Pavlo2, Daniel Sanchez1, Srinivas Devadas1
Massachusetts Institute of Technology1 Carnegie Mellon University2
2 ¡
Tuple A Tuple B
Lock Acquire Lock Release Read Lock Write Lock
T1 T2 Time
Write Lock
Tuple A Tuple B
Write Lock
Read
T1 @ ts = 1 T2 @ ts = 2
Write Lock
3 ¡
(txns have unique timestamps)
– Timestamp allocation is a scalability bottleneck
– Clock skew causes unnecessary aborts
ts = __sync_fetch_and_add(&glob_ts, 1)
0 ¡ 5 ¡ 10 ¡ 15 ¡ 20 ¡ 25 ¡ 0 ¡ 20 ¡ 40 ¡ 60 ¡ 80 ¡
Throughput ¡ (Million ¡txn/s) ¡ Thread ¡Count ¡ T/O ¡ 2PL ¡
4 ¡
(txns have unique timestamps)
T1@ts=1
T2@ts=2
BEGIN COMMIT
READ(A)
BEGIN COMMIT
WRITE(A)
T1@ts=2 T2@ts=1
BEGIN COMMIT
READ(A)
BEGIN ABORT
WRITE(A)
Time
5 ¡
1. Acquire timestamp (TS) 2. Determine tuple visibility using TS
1. Access tuples and remember their timestamp info. 2. Compute commit timestamp (CommitTS) No Timestamp Allocation Dynamic Timestamp Assignment Timestamp Allocation Static Timestamp Assignment
Data wts
(Write Timestamp)
rts
(Read Timestamp)
6 ¡
BEGIN COMMIT
READ PHASE VALIDATION PHASE WRITE PHASE
Read & Write Tuples Execute Transaction Compute CommitTS Decide Commit/Abort Update Database
READ(C) WRITE(A) READ(B)
1 2 3 4
Logical Time
7 ¡
8 ¡
1 2 3 4
READ(C) WRITE(A) READ(B)
TXN
9 ¡
1 2 3 4
READ(C) WRITE(A) READ(B)
TXN
CommitTS
10 ¡
1 2 3 4
READ(C) WRITE(A) READ(B)
TXN Case 1: latest version
CommitTS
11 ¡
1 2 3 4
READ(C) WRITE(A) READ(B)
TXN Case 2: New version at/before CommitTS Case 1: latest version
CommitTS
12 ¡
Case 2: New version at/before CommitTS Case 1: latest version
Case 3: New version after CommitTS 1 2 3 4
READ(C) WRITE(A) READ(B)
TXN
CommitTS
13 ¡
BEGIN COMMIT READ(A) BEGIN COMMIT WRITE(A)
1 2 3 4 Tuple A
Txn 1 CommitTS Txn 2 CommitTS
Txn 1 Txn 2
Time
14 ¡
15 ¡
16 ¡
Throughput Abort Rate
TICTOC ¡ HEKATON ¡ DL_DETECT ¡ NO_WAIT ¡ SILO ¡
0 ¡ 0.1 ¡ 0.2 ¡ 0.3 ¡ 0.4 ¡ 0 ¡ 20 ¡ 40 ¡ 60 ¡ 80 ¡ Abort ¡Rate ¡ Thread ¡Count ¡ 0 ¡ 1 ¡ 2 ¡ 3 ¡ 4 ¡ 5 ¡ 0 ¡ 20 ¡ 40 ¡ 60 ¡ 80 ¡ Throughput ¡ (Million ¡txn/s) ¡ Thread ¡Count ¡
17 ¡
TICTOC ¡ HEKATON ¡ DL_DETECT ¡ NO_WAIT ¡ SILO ¡
0 ¡ 0.2 ¡ 0.4 ¡ 0.6 ¡ 0.8 ¡ 1 ¡ 0 ¡ 20 ¡ 40 ¡ 60 ¡ 80 ¡ Abort ¡Rate ¡ Thread ¡Count ¡ 0 ¡ 0.2 ¡ 0.4 ¡ 0.6 ¡ 0.8 ¡ 1 ¡ 0 ¡ 20 ¡ 40 ¡ 60 ¡ 80 ¡ Throughput ¡ (Million ¡txn/s) ¡ Thread ¡Count ¡
Throughput Abort Rate
Xiangyao Yu yxy@mit.edu Andy Pavlo pavlo@cs.cmu.edu Daniel Sanchez sanchez@mit.edu Srinivas Devadas devadas@mit.edu
DBx1000 (https://github.com/yxymit/DBx1000)