狠狠撸

狠狠撸Share a Scribd company logo
論文紹介:	An	Empirical	Evaluation	of
In-Memory	Multi-Version	Concurrency	Control
@nikezono
2Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
トランザクション:	
? 不可分な一連の操作 ==	n回のread/write操作(0<n)
トランザクション処理の目標:
? Atomicity:	n回のread/write操作を1回のレジスタ操作と同様に扱えること
? Consistency:	一貫性を守ること.	A,I,Dに加えてDBの制約条件を常に満たすこと
? Isolation:	トランザクションが他の並行するTxの影響を受けないこと
? Durability:	コミット済みのトランザクションは必ず永続化されていること
トランザクション処理の構成要素:
? ログ管理機構(Log	manager)
? 並行実行制御(Concurrency	Control)
? データ構造,	インデックス(Data	Structure)
トランザクションと並行実行制御
3Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
MVCC(Multiversion Concurrency	Control)
? データベースが複数のバージョンを管理すること
? 論理的なObject(x)が物理的にMVで表現されているということ
? Not-In-place	update.
? 対義語は1VCC.
? In-place	update.
? 1VCCはアカデミアでは優勢だが、industrialではMVCCだらけ…なぜか?
MVCC	101
4Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
MVCC	Advantage
5Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
直列実行との等価性にはいくつか細分類がある.
「Serializable」という場合,このどれかのクラスに当てはまる処理結果であること(または,そのような
処理結果を生成するアルゴリズムであること)を指す
並行実行制御とスケジュール空間
最終状態が等価なスケジュール(FSR)
マルチバージョン等価なスケジュール(MVSR)
ビュー等価なスケジュール(VSR)
競合等価なスケジュール(CSR)
1V系(2PL/OCC/TO)アルゴリズム
理論的に広くかつ計算量も現実的. MVCCを(まともにやれば)実装できる
直列実行
NP完全(提案なし)
現在有用だと考えられていないclass
6Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
There	is	no	standard	implementation
? 同じMVCCでも、実装のDesign	Decisionによって性能が変わる
? Versionは線形リストで持つか?
? 線形リストはASC/DESCどちらにするか?
? 無限のストレージは無いので,線形リストにはGC(Compaction)が要る.
? いつ/誰がやるか?
? Indexのleafには何を書くか?
? TupleのPhysical	Pointerにするか、間接参照するか?
? このようなDesign	Decisionは今までアカデミアで議論されてこなかった	
? MVCC?はいはい,MVCCね.という感じで,細かい実装の違いは無視されてきた
MVCC	Design	Choices
7Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
Empirical	Evaluation	for	Design	Decision
1. Concurrency	control
2. Version	storage
3. Garbage	Collection
4. Index	Management
Peloton(https://github.com/cmu-db/peloton)上に実装
? CMU	Andy	Pavloらが主導するOSS	RDBMS
? このリポジトリから論文が多く出ている
? Tile-based	Architecture(ICMD’16)
? Self-Driving	Database(CIDR’17)
? Relaxed	Operator	Fusion(VLDB’17)
? Write-Behind	Logging(VLDB’16)
学生の授業課題がこのリポジトリへのcontribution.
Contribution
8Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
? Evaluationの前に,Tuple	Format(線形リストのノード構造体)を紹介する.	
? これ以後の全ての実験でこのFormatを用いる.
? Txn-idは書いたトランザクションのid.
? Idはunique	and	monotonically	 increasing.
? begin-tsとend-tsはuint64_t.
? Begin-ts <	自分のTS	<	end_ts なら読める,という風に使う
? これをCASすることでロックに使う
? 例:
1. begin-tsをINFにして自分のwriteを反映させた新しいversion	tupleを作る.
2. リスト末尾のTupleのend-tsを0にCASする(と,誰も読めなくなるので,lockに等しい)
3. pointerを自分が作ったタプルにつなぐ
4. End-tsを自分のTidにする(unlockに等しい)
Tuple	Format
9Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
MVTO(Multiversion Timestamp	Ordering)
? 商用DBに実装無し
? 通称Tx本(weikum)/CC本(bernstein)という本では紹介されている
? まずTimestampをallocateし、それに従ってRead/Write
? 例:自分がT2だとする
? Ti(i<2)のwriteを読む
? Tj(2<j)が既にreadしている場合は自分のwriteが遅すぎた。アボート
? MVSRになる(うまく実装すれば)
? MVSRにしようとすると,線形リストが	V1	->	V5	->	V3…と順不同になるので,実装するのにやや工夫がいる	
? そのへんの理由で実装が無いのだと思われる(私の主観)
Concurrency	Control:	MVTO
T1
T2
TS	Alloc
TS	Alloc
Write(x1)Read(x0)
Linearization Point
Write(y2)
Linearization Point
Read(y0) Read(x1)
Commit
Commit
10Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
Concurrency	Control:	MVOCC
T1
T2
TS	Alloc
TS	Alloc
Write(x1)Read(x0)
Linearization Point
Write(y2)Read(x0)
Validation(x) Commit
Validation(x) Abort
11Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
?MV2PL(Multiversion Two	Phase	Locking)
? よく知られている2PLをMVCCに拡張したもの
? read	the	most	recent	version(∈uncommitted)
? write	after	all	concurrent	writer	has	committed
? commit	after	all	concurrent	reader/writer	has	committed
? readがblockしないだけで、事実上ほぼ2PL?
? 1Vで使っていた2PLのアルゴリズムをそのままMVに引っ張ってきただけに読める
Concurrency	Control:	MV2PL
T1
T2
TS	Alloc
TS	Alloc
Write(x1)Read(x0)
Read(x1)
Commit
Commit
rlock
commit wait
12Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
Comparison(SSI,SSNは省略…)
13Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark:	ReadOnly
14Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark:	ReadWrite	Mixed
15Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark: Contention
16Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
Oldest-to-Newest(O2N)
? 線形リストの末尾にデータを追加していく
? ReadでもWriteでも,たいていの場合リスト末尾までのVersion	traverseが必要になる
? GCが遅れるとリストが伸びて不要なランダムI/Oが……
Newest-to-Oldest(N2)
? 線形リストの先頭(HEAD)にデータを追加していく
? O(1)で(latest)read/writeできる
? HEADを更新する ==	インデックスも更新する
? Secondary	indexがある場合,その更新も同時,というかatomicである必要がある
? 間接参照を挟めばatomicに出来るが、これは不要なランダムアクセスか?
Version	Storage:	Append-only
17Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
Time-travel
? SAP	HANAの実装.
? Main	TableにはLatest	Versionのみ置く.
? 古いVersionはTime-travel	Storageという別の領域に置く.この領域はN2O
? Write時に毎回Main to	Timetravelのcopyが発生する	
? 歴史的経緯で複数のストレージが合体して生まれたSAP	HANAならではのデザインか?
Delta
? MySQL	and	Oracle	uses	this
? タプルの全内容ではなく更新の差分をN2Oでリストにする
? Partial	updateに強い.リストの各ノードにコピーするデータ量が大幅に減る
? ただしSELECT	*	FROM…とかされると,リストを辿ってレコードの欠片を拾い集めないといけないので辛い
Version	Storage: Timetravel	&	Delta
18Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark:	Footprint
19Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark:	Memory	Allocation
Memory spaces: mallocできるareaの数.(多分)
Deltaはfootprintが?さくなるのであまり影響を受けない.
20Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark:	Contention
21Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
Garbage	Collection:	Tuple-Level
? 前提:	RCU-based	memory	reclamation(QSBR)	
? 各TxnにはTxn-idがある.これは単調増加する	
? m	=	min({Tid	|	all	runnning	transactions})	を計算する	
? end_ts	<	m	のタプルはもう誰も読めるものが居ない.	
? すなわちGCできる	
	
? Background	Vacuuming(VACUUM)	
? PostgreSQL,Oracle,	MySQL	
? ワーカスレッドとは別にGC専用スレッドを立て,定期的に各テーブル/レコードをGCしていく	
	
? Cooperative	Cleaning(COOP)	
? Microsoft	SQL	Server(Hekaton)	
? トランザクションを実行するワーカスレッドがGCする	
? 開始時にmを計算して,m以下のノードをGCしながら走っていく	
? 古いデータを見つけ次第即時GCされていくので,無駄なリストのtraverseを最小化できる	
? が,誰にも読まれず書き込みだけが連続する場合,リストが伸び続ける問題がある
22Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
Garbage	Collection:	Transaction-Level
23Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark: Tuple-Level
24Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark: Tuple	vs	Transaction
25Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark: Tuple	vs	Transaction
26Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
?Logical	Pointer
? 間接参照を用いて,各Indexは間接参照を指すようにする
? セカンダリインデックスがあるN2Oでも,Atomicに更新できる
? 間接参照先を何にするかで流派がある
? Primary	Key:	セカンダリインデックスに触った場合,Primary	Indexを再Traverseさせることになる
? Tuple	ID:	線形リストのheadに直接つなぐ.
?Physical	Pointer
? Indexに(B-treeならLeafに)Version	Chainをそのまま置く
? セカンダリインデックスをアトミックに更新したいならLockする
Index	Management
27Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
YCSB	Benchmark: Tuple-Level
28Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
これまで「MVCC」と言われてきたDBMSを同じワークロードで評価.	
これだけ性能が変わる理由はこれまで述べてきたDesign	Decisionで説明できる……
(と論文では言っている)
おまけ:	Configuration	Comparison
29Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792.
? https://twitter.com/andy_pavlo/status/902863242774634496
? 論文タイトルで三回rejectされている	
?	タイトルが全部強気で面白い
余談

More Related Content

論文紹介: An empirical evaluation of in-memory multi-version concurrency control

  • 2. 2Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. トランザクション: ? 不可分な一連の操作 == n回のread/write操作(0<n) トランザクション処理の目標: ? Atomicity: n回のread/write操作を1回のレジスタ操作と同様に扱えること ? Consistency: 一貫性を守ること. A,I,Dに加えてDBの制約条件を常に満たすこと ? Isolation: トランザクションが他の並行するTxの影響を受けないこと ? Durability: コミット済みのトランザクションは必ず永続化されていること トランザクション処理の構成要素: ? ログ管理機構(Log manager) ? 並行実行制御(Concurrency Control) ? データ構造, インデックス(Data Structure) トランザクションと並行実行制御
  • 3. 3Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. MVCC(Multiversion Concurrency Control) ? データベースが複数のバージョンを管理すること ? 論理的なObject(x)が物理的にMVで表現されているということ ? Not-In-place update. ? 対義語は1VCC. ? In-place update. ? 1VCCはアカデミアでは優勢だが、industrialではMVCCだらけ…なぜか? MVCC 101
  • 4. 4Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. MVCC Advantage
  • 5. 5Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. 直列実行との等価性にはいくつか細分類がある. 「Serializable」という場合,このどれかのクラスに当てはまる処理結果であること(または,そのような 処理結果を生成するアルゴリズムであること)を指す 並行実行制御とスケジュール空間 最終状態が等価なスケジュール(FSR) マルチバージョン等価なスケジュール(MVSR) ビュー等価なスケジュール(VSR) 競合等価なスケジュール(CSR) 1V系(2PL/OCC/TO)アルゴリズム 理論的に広くかつ計算量も現実的. MVCCを(まともにやれば)実装できる 直列実行 NP完全(提案なし) 現在有用だと考えられていないclass
  • 6. 6Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. There is no standard implementation ? 同じMVCCでも、実装のDesign Decisionによって性能が変わる ? Versionは線形リストで持つか? ? 線形リストはASC/DESCどちらにするか? ? 無限のストレージは無いので,線形リストにはGC(Compaction)が要る. ? いつ/誰がやるか? ? Indexのleafには何を書くか? ? TupleのPhysical Pointerにするか、間接参照するか? ? このようなDesign Decisionは今までアカデミアで議論されてこなかった ? MVCC?はいはい,MVCCね.という感じで,細かい実装の違いは無視されてきた MVCC Design Choices
  • 7. 7Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. Empirical Evaluation for Design Decision 1. Concurrency control 2. Version storage 3. Garbage Collection 4. Index Management Peloton(https://github.com/cmu-db/peloton)上に実装 ? CMU Andy Pavloらが主導するOSS RDBMS ? このリポジトリから論文が多く出ている ? Tile-based Architecture(ICMD’16) ? Self-Driving Database(CIDR’17) ? Relaxed Operator Fusion(VLDB’17) ? Write-Behind Logging(VLDB’16) 学生の授業課題がこのリポジトリへのcontribution. Contribution
  • 8. 8Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. ? Evaluationの前に,Tuple Format(線形リストのノード構造体)を紹介する. ? これ以後の全ての実験でこのFormatを用いる. ? Txn-idは書いたトランザクションのid. ? Idはunique and monotonically increasing. ? begin-tsとend-tsはuint64_t. ? Begin-ts < 自分のTS < end_ts なら読める,という風に使う ? これをCASすることでロックに使う ? 例: 1. begin-tsをINFにして自分のwriteを反映させた新しいversion tupleを作る. 2. リスト末尾のTupleのend-tsを0にCASする(と,誰も読めなくなるので,lockに等しい) 3. pointerを自分が作ったタプルにつなぐ 4. End-tsを自分のTidにする(unlockに等しい) Tuple Format
  • 9. 9Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. MVTO(Multiversion Timestamp Ordering) ? 商用DBに実装無し ? 通称Tx本(weikum)/CC本(bernstein)という本では紹介されている ? まずTimestampをallocateし、それに従ってRead/Write ? 例:自分がT2だとする ? Ti(i<2)のwriteを読む ? Tj(2<j)が既にreadしている場合は自分のwriteが遅すぎた。アボート ? MVSRになる(うまく実装すれば) ? MVSRにしようとすると,線形リストが V1 -> V5 -> V3…と順不同になるので,実装するのにやや工夫がいる ? そのへんの理由で実装が無いのだと思われる(私の主観) Concurrency Control: MVTO T1 T2 TS Alloc TS Alloc Write(x1)Read(x0) Linearization Point Write(y2) Linearization Point Read(y0) Read(x1) Commit Commit
  • 10. 10Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. Concurrency Control: MVOCC T1 T2 TS Alloc TS Alloc Write(x1)Read(x0) Linearization Point Write(y2)Read(x0) Validation(x) Commit Validation(x) Abort
  • 11. 11Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. ?MV2PL(Multiversion Two Phase Locking) ? よく知られている2PLをMVCCに拡張したもの ? read the most recent version(∈uncommitted) ? write after all concurrent writer has committed ? commit after all concurrent reader/writer has committed ? readがblockしないだけで、事実上ほぼ2PL? ? 1Vで使っていた2PLのアルゴリズムをそのままMVに引っ張ってきただけに読める Concurrency Control: MV2PL T1 T2 TS Alloc TS Alloc Write(x1)Read(x0) Read(x1) Commit Commit rlock commit wait
  • 12. 12Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. Comparison(SSI,SSNは省略…)
  • 13. 13Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: ReadOnly
  • 14. 14Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: ReadWrite Mixed
  • 15. 15Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: Contention
  • 16. 16Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. Oldest-to-Newest(O2N) ? 線形リストの末尾にデータを追加していく ? ReadでもWriteでも,たいていの場合リスト末尾までのVersion traverseが必要になる ? GCが遅れるとリストが伸びて不要なランダムI/Oが…… Newest-to-Oldest(N2) ? 線形リストの先頭(HEAD)にデータを追加していく ? O(1)で(latest)read/writeできる ? HEADを更新する == インデックスも更新する ? Secondary indexがある場合,その更新も同時,というかatomicである必要がある ? 間接参照を挟めばatomicに出来るが、これは不要なランダムアクセスか? Version Storage: Append-only
  • 17. 17Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. Time-travel ? SAP HANAの実装. ? Main TableにはLatest Versionのみ置く. ? 古いVersionはTime-travel Storageという別の領域に置く.この領域はN2O ? Write時に毎回Main to Timetravelのcopyが発生する ? 歴史的経緯で複数のストレージが合体して生まれたSAP HANAならではのデザインか? Delta ? MySQL and Oracle uses this ? タプルの全内容ではなく更新の差分をN2Oでリストにする ? Partial updateに強い.リストの各ノードにコピーするデータ量が大幅に減る ? ただしSELECT * FROM…とかされると,リストを辿ってレコードの欠片を拾い集めないといけないので辛い Version Storage: Timetravel & Delta
  • 18. 18Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: Footprint
  • 19. 19Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: Memory Allocation Memory spaces: mallocできるareaの数.(多分) Deltaはfootprintが?さくなるのであまり影響を受けない.
  • 20. 20Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: Contention
  • 21. 21Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. Garbage Collection: Tuple-Level ? 前提: RCU-based memory reclamation(QSBR) ? 各TxnにはTxn-idがある.これは単調増加する ? m = min({Tid | all runnning transactions}) を計算する ? end_ts < m のタプルはもう誰も読めるものが居ない. ? すなわちGCできる ? Background Vacuuming(VACUUM) ? PostgreSQL,Oracle, MySQL ? ワーカスレッドとは別にGC専用スレッドを立て,定期的に各テーブル/レコードをGCしていく ? Cooperative Cleaning(COOP) ? Microsoft SQL Server(Hekaton) ? トランザクションを実行するワーカスレッドがGCする ? 開始時にmを計算して,m以下のノードをGCしながら走っていく ? 古いデータを見つけ次第即時GCされていくので,無駄なリストのtraverseを最小化できる ? が,誰にも読まれず書き込みだけが連続する場合,リストが伸び続ける問題がある
  • 22. 22Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. Garbage Collection: Transaction-Level
  • 23. 23Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: Tuple-Level
  • 24. 24Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: Tuple vs Transaction
  • 25. 25Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: Tuple vs Transaction
  • 26. 26Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. ?Logical Pointer ? 間接参照を用いて,各Indexは間接参照を指すようにする ? セカンダリインデックスがあるN2Oでも,Atomicに更新できる ? 間接参照先を何にするかで流派がある ? Primary Key: セカンダリインデックスに触った場合,Primary Indexを再Traverseさせることになる ? Tuple ID: 線形リストのheadに直接つなぐ. ?Physical Pointer ? Indexに(B-treeならLeafに)Version Chainをそのまま置く ? セカンダリインデックスをアトミックに更新したいならLockする Index Management
  • 27. 27Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. YCSB Benchmark: Tuple-Level
  • 28. 28Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. これまで「MVCC」と言われてきたDBMSを同じワークロードで評価. これだけ性能が変わる理由はこれまで述べてきたDesign Decisionで説明できる…… (と論文では言っている) おまけ: Configuration Comparison
  • 29. 29Yingjun Wu, Joy Arulraj, Jiexi Lin, Ran Xian, and Andrew Pavlo. 2017. An empirical evaluation of in-memory multi-version concurrency control. Proc. VLDB Endow. 10, 7 (March 2017), 781-792. ? https://twitter.com/andy_pavlo/status/902863242774634496 ? 論文タイトルで三回rejectされている ? タイトルが全部強気で面白い 余談