1. 程式人生 > 其它 >CMU15445 Lecture 19: Multi-Version Concurrency Control

CMU15445 Lecture 19: Multi-Version Concurrency Control

MVCC不是單純的用來實現併發控制,一般是用來與2PL,OCC,T/O結合使用

Multi-Version Concurrency Control

read-only txn can read a consistent snapshot without acquiring locks?txn可以做到像是全程在讀一個靜態的資料庫

這裡只依賴mvcc,達不到serializable,得去和2PL之類的結合,才能達到serializable
這裡還不是serializable,為什麼要等待?

Concurrency Control Protocol

Version Storage

既然能夠遍歷查詢,那麼為什麼不能能夠建立,上面T2的問題?

Append-Only Storage

oldest-to-newest:不需要更新索引,但是需要遍歷查詢最version
newest-to-oldest:需要更新索引,但是不需要遍歷查詢

Time-Travel Storage

time-travel table

delta storage segment

Garbage Collection

不能夠無限的儲存歷史版本,刪除歷史版本需要處理的問題:

  • 怎樣去找到需要刪除的歷史版本
  • 如何決定什麼什麼時候去刪除歷史版本

Tuple-level

Background Vacuuming


優化版本,只對dirty的page做scan

Cooperative Cleaning

index查詢時順便清除歷史版本,但是隻適合O2N chain

Transaction-level GC

Index Management



secondary index 指向 physical address

secondary index 指向 primary index

secondary index 指向 tuple id的indirect layer

MVCC index


mvcc需要儲存duplicate key?

由於mvcc必須儲存duplicate key,那麼對於unique constraint需要額外的處理

MVCC DELETES