Flag Commit:Supporting Efficient Transaction Recovery in Flash-Based DBMSs
0. Abstract
- 研究在SLC閃存中運行的DBMSs如何高效得完成事務的恢復。
- 在傳統的shadow-paging方式的基礎上,提出了新的提交協議flagcommit,能利用flash的快速隨機訪問、異地更新、局部頁編程的特性。
- 利用事務提交標志鏈內嵌事務狀態到閃存頁中以減少寫log記錄的需求。
- 設計了兩種恢復協議:commit-based flag commit(CFC)和abort-based flag commit(AFC)。滿足不同的性能需求。
- 基于TPC-C標準的測試,評估CFC和AFC性能優于已有的恢復協議。
1. Introduction
- Flash以其優良特性備受關注,本文研究在事務恢復中如何利用SLC的優點以提高基于閃存的DBMSs的性能。
- 事務恢復作用:保證原子性(一系列動作要么全部完成,要么都不完成)和持久性(提交的寫得到保證)。事務恢復已有實現:WAL和Shadow Paging。WAL:以日志的方式持久化舊數據,再原地更新,寫操作太頻繁。SP:以磁盤上的shadow-page對數據頁做異地更新,系統維護一張page ID到disk address的映射表,性能問題使它在磁盤中表現不佳,但是在閃存中確是可取的。
- 循環提交(cyclic commit)是一種根據影子頁提出的提交機制。為提交的事務的每一個頁維護一個循環鏈表,通過檢查這個表的存在與否確定該事務是否提交。根據這一思想產生兩種提交協議:SCC(simple cyclic commit)& BPCC(back pointer cyclic commit)。但是應用中存在一些問題,如高并發等。
- 本文提出一種新的基于影子頁的提交機制flagcommit,利用閃存頁局部可編程特性保持對事務狀態的追蹤,在每個shadow page中存儲事務的狀態標志。基于這種思想本文提出兩種提交協議:CFC(commit-based flag commit)& AFC(abort-based flag commit)。它們適用與不同負載、具有不同性能。
- 本文主要工作:
- 首次提出基于閃存的DBMSs快速高效事務恢復機制,flagcommit。
- 根據flagcommit提出兩種事務恢復協議,以及每個協議針對事務處理、垃圾回收、恢復的算法。
- 擴展上文提出的兩種協議對通用DBMS的支持。
- 對本文提出的協議做性能評估,結果顯示性能提升量巨大。
2. Background
本節主要內容:研究背景、閃存特性、閃存轉換層FTL
2.1 閃存特性
- 物理特性:片-塊(128k+4k)-頁(2k+64byte),塊為擦除單位,頁為讀寫單位
- IO特性:高效隨機訪問、先塊擦后頁寫、塊擦除次數有限(故在FTL中實現異地更新)
2.2 閃存轉換層FTL
- FTL的核心是在內存中維護一張邏輯地址到物理地址的映射表,閃存頁的OOB區存儲其邏輯地址,用以在啟動時在FTL建立正向的映射表。
- 通過維護映射表實現異地更新。
- 維護一張空間表,擁有垃圾回收模塊回收廢棄的頁。回收頁:觸發垃圾回收(如根據塊中的廢棄頁數量)- 將塊中有效頁復制到空閑塊中 - 擦除塊 - 將該塊掛接到空閑塊表中。
- 利用分散寫和擦除實現閃存的磨損均衡,以延長使用壽命。
3. Basic Flag Commit Protocols
為了系統恢復時確定事務該重做還是丟棄,需要保持對數據庫的更新狀態以及事務狀態的跟蹤。shadow paging利用日志進行異地更新以記錄事務狀態。本文提出的flagcommit基于shadowpaging的方法和循環提交的思想。
flagcommit在每個影子頁的OOB區存儲一個指向屬于同一個事務的之前一個flash page的指針,同時存儲狀態標志、頁版本、事務ID,通過這個鏈可以找到屬于該事務的所有頁,通過頁中的狀態標志可以檢查該事務的提交狀態。
3.1 Commit-Based Flag Commit
CFC協議采用標志指示已提交的事務,默認情況下頁的事務標志置FALSE,當事務提交時,屬于該事務的頁鏈的最后一個頁的事務標識被更新為TRUE。
- CFC中當且僅當影子頁中至少有一個頁的事務標志為TRUE時,該事務為已提交事務。
- 若更新該頁的事務已提交,那么該頁就是已提交頁。
In-memory Tables
- 事務表Transaction Table:該表只維護正在執行或中止的事務。表屬性包括事務ID、狀態、頁數、最后頁指針。
- 臟頁表Dirty Page Table:保持對正在執行的事務更新造成的每個臟頁的物理地址的跟蹤。
- 地址映射表Direct Mapping Table:維護邏輯地址到物理地址的映射關系。
Normal Processing
- 更新頁:
- 事務T提出要更新邏輯頁P
- FlashDisk分配影子頁P',并在該影子頁的OOB中初始化LBA、Ver、Link、XID、CommitFlag。
- 更新事務表Transaction Table,NPage加一、LastPage指向P'。
- P頁添加入臟頁表Dirty Table。
- 更新地址映射表。
- 提交事務:
- 事務提交請求。
- 在事務表中找到該事務表項,獲得其最后一個影子頁,更新其狀態標志為TRUE。
- 將該事務從事務表中刪除。
- 該事務更新的頁從臟頁表中刪除,且其指向的上一個頁標記為廢棄頁。(PS:事務T要更新頁P,實際更新的是影子頁P',此時臟頁表記錄的是事務ID-T、LBA-P'、LastLBA-P,一旦事務T提交,影子頁P'“扶正”,原頁P標記為廢棄)
- 事務中止:
- 事務T中止
- 撤銷T造成的更新,將其更新的頁P'標記為廢棄頁
- 檢查臟頁表,找到P'的上一個頁P,通過修改映射表恢復P頁
Garbage Collection
垃圾回收通過空閑空間的閾值自動觸發。回收廢棄頁或過時的已提交的頁。被標記為廢棄的頁被回收時,其所屬的事務還未提交的話,該事務的事務表項的NPage屬性要減一。
回收廢棄頁不足為道,此處關注一下回收過時的已提交頁,可能存在兩種情況。
- 需要被回收的頁是該事務的最后一個頁P,即其事務狀態標志為TRUE,則在回收前,通過其Link指針找到前一個頁P1,然后置P1的狀態標志為TRUE,再回收P,保證提交的事務的影子頁鏈中至少存在一個頁的事務狀態為TRUE
- 需要被回收頁是該事務的影子頁鏈中間的頁P,則在回收前,需要將P的前一個頁P1的狀態置為TRUE,這樣回收P后,會出現兩條影子頁鏈,此時視這兩條鏈屬于兩個事務,保證這兩個事務的影子頁鏈中都至少有一個頁的事務狀態為TRUE。
Recovery
通過掃描全部的頁,根據頁的 元數據,可以檢測到事務是否提交、哪些頁屬于某一個影子頁鏈(屬于某一個事務)、哪些頁是事務的最后一個頁。根據這些信息,做事務的恢復。
由于影子頁鏈采用的是物理頁地址的鏈接指針,垃圾回收會導致一個事務的影子頁鏈斷裂成兩個或多個子鏈。事務提交的時候這多個子鏈的最后一個頁的事務狀態標志都會被置TRUE,若是此時系統崩潰,會造成事務狀態不一致,同原屬于一個事務的子鏈有部分表現為事務已提交,有部分表現為未提交,此時需要恢復程序做相應的針對處理。一旦檢測到上述情況(同一事務ID存在多個影子頁鏈,且提交屬性不同),判定此事務未提交(聯系子鏈產生的規則,若事務提交,則影子頁子鏈必定都是表現為已提交)。
3.2 Abord-Based Flag Commit
實際中,事務提交比率高于中止率,故在影子頁中維護提交標志需要過多開銷,若改用中止標志,則會減少開銷。這就是AFC協議。兩種協議互相彌補根據具體的事務中止率選用。
AFC協議中,當且僅當所有影子頁狀態標志為TRUE時,事務狀態判定為已提交。(即狀態標志意味著“未中止”,一旦出現一個頁的“未中止標志”值為FALSE,則該事務狀態未終止。注:此處標志意義不能定義為“已提交標志”,“已提交”的TRUE或FALSE狀態不等同于“未中止”的TRUE和FALSE狀態)
與CFC不同,AFC協議中,事務狀態通過對影子頁鏈的第一個頁的狀態來決定,初始為FALSE,表示中止,一旦提交,首頁狀態改為TRUE,則沒有一個頁為FALSE(除了首頁,所有頁狀態初始化為TRUE),表示此事務已提交。且即使垃圾回收將該鏈分斷為多個部分,依然保持該狀態。
在事務恢復時,CFC比AFC具有更好性能,取決于判定事務狀態的方式不同。CFC不完全遍歷影子頁鏈,一旦出現TRUE表示該事務已提交。而AFC需要完全遍歷影子頁鏈,直到所有頁標志都是TRUE(“未中止”標志)才判定該事務為已提交。
3.3 A Discussion Of CFC and AFC
- 通過公式分析AFC&CFC的IO開銷:與abort ratio有關。
- 兩者的其他兩個區別:1)標志位,AFC需要兩位標志狀態,空間開銷更大。2)AFC維護影子頁鏈首,事務狀態改變時對首頁的修改不可避免,而CFC維護影子頁鏈尾,事務狀態改變時,最后一頁可能存在與main memory buffer中,故可節省一次重編程改寫標志操作。
3.4 Block-Based Flag Technique
基于塊的標志技術的提出是為了在特定情況下節省頁的重編程操作。通常情況下垃圾回收時需要對相應的頁的狀態標志做修改,需要在該頁上重新編程。但是當需要被重編程的這個頁正好處在當前需要被回收的塊上時,可以采用本節提出的基于塊的標志技術,節省頁的重編程操作,直接在新塊上修改標志。
4. Advanced Flagcommit Protocols
擴展Flagcommit協議,以支持采用no-force策略(事務可隨時提交,更多的committed事務)的buffer管理,以及高并發控制。
4.1 Supporting No-Force Buffer Management
No-Force策略下,事務提交時,沒必要立即將buffer中的影子頁flush到storage中,因為No-Force策略允許任意commit,若立即flush,會造成寫入阻塞,降低事務響應時間和系統吞吐量。(風險是:此時系統奔潰,無法重做已提交的事務,應該committed page沒有被持久化到storage中)
為解決上述問題,可以采用將flagcommit協議聯合重做日志機制(redo logging scheme)。
工作流程:
- 數據更新前,產生一個redo log record并存入log buffer中。log中保存事務ID、頁ID、log記錄ID、操作碼(更新、刪除、插入)、操作數據Data、本事務的前一個log記錄的指針PrevLN。
- 當影子頁從memory持久化到flash disk時,其對應的log record被移除。
- 當事務提交時,若該事務更新的pages還只是緩存在memory中,那么追加一條commit log record到log buffer中,然后將log buffer內容持久化到flash disk中。
- 事務中止時,回滾memory中被它更新的頁,同時移除log record
4.2 Supporting Record-Level Concurrency Control
。。。。。。
4.3 Putting All Together
4.1與4.2的方案的結合
更新算法、中止算法、提交算法、垃圾回收、事務恢復(恢復算法)
。。。。。。
5. Performance Evaluation
基于TPC-C標準對flagcommit協議做性能測試,對比cyclic commit協議和WAL-Based commit協議。
5.1 Experiment Setup
- 實驗標準:TPC-C
- 實驗平臺:windows xp + intel Quad CPU + SSD simulator + ...
- 實驗對象:CFC\AFC(with block-based flag technique and their extensions)、SCC\BPCC(cyclic commit protocol)、WAL-based commit protocol
- 測量數據:throughtput、transaction execution time、commit response time、recovery cost、garbage collection overhead
- 實驗時常:30m預熱模擬器+4h實際評估時間
5.2 Comparison with Cyclic Commit Protocols
CFC & AFC VS SCC & BPCC :相同環境設置(采用force緩沖管理及頁級的并發控制)
- 相同中止率(低中止率,通常情況下),對比4種協議。
- 事務吞吐率:AFC>CFC >> BPCC>SCC
- 事務執行時間:AFC<CFC << BPCC<SCC,執行時間越短,造成的事務阻塞可能性越小,事務通過率越高。
- 垃圾回收開銷:AFC<CFC << BPCC<SCC
- 恢復時間:CFC ≈ BPCC ≈ SCC << AFC,AFC需要訪問遍歷每一個標志確定該頁的狀態,而CFC僅需判斷頭也是否是TRUE標志
- 不同中止率對吞吐率和平均GC時間對比。
- 吞吐率:CFC\AFC在不同中止率下吞吐量都大于BPCC\SCC
- 平均GC時間:AFC\CFC明顯小于BPCC\SCC,且對中止率不敏感
- 內存消耗:CFC ≈ AFC ≈ SCC << BPCC
5.3 Evaluation of Advanced flagcommit Protocols
CFC_ex & AFC_ex VS WAL-based commit protocol :相同環境設置(采用no-force緩沖管理及記錄級的并發控制)
- 部分編程等級(可同時通過編程方式修改page的狀態標志的數量)的影響:部分編程等級造成同一時間更新的頁更多,因此,可處理的事務更多,因沖突引起的事務重新開始更少。但超過2或3就會引起吞吐量下降。
- 與WAL-based commit protocol對比:
- 吞吐量
- 事務提交響應時間
- 存儲空間消耗
- 垃圾回收時間開銷
- 事務大小(平均一個事務寫入的頁數量)的影響:
- 吞吐量
- GC時間
- 緩沖池大小的影響:
- 吞吐量
- GC時間
6. Related Work
閃存方面數據訪問技術的介紹。
結論:在閃存事務方面的研究較少,本文的研究在基于閃存的DBMSs的事務恢復方面具有填補空白的作用。
7. Conclusions And Future Work
為基于閃存的DBMS提出兩種新穎的flagcommit協議,CFC&AFC,充分利用閃存的快速隨機訪問、異地更新、頁元數據區、部分可編程的特性。通過使用影子頁的提交標志保證了事務的原子性和持久性。且CFC致力于快速恢復,AFC側重與更高的事務性能。并對兩種協議做了全面的評估測試。
進一步工作:1)擴展該flagcommit到MLC及其他的非易失性存儲器中。需要克服如MLC不支持部分編程能力等問題。2)對flagcommit協議做進一步優化,以減少額外開銷。3)在真正的閃存中具體實現該協議。