Flag Commit:Supporting Efficient Transaction Recovery in Flash-Based DBMSs

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缓冲管理及页级的并发控制)

  1. 相同中止率(低中止率,通常情况下),对比4种协议。
    • 事务吞吐率:AFC>CFC >> BPCC>SCC
    • 事务执行时间:AFC<CFC << BPCC<SCC,执行时间越短,造成的事务阻塞可能性越小,事务通过率越高。
    • 垃圾回收开销:AFC<CFC << BPCC<SCC
    • 恢复时间:CFC ≈ BPCC ≈ SCC << AFC,AFC需要访问遍历每一个标志确定该页的状态,而CFC仅需判断头也是否是TRUE标志
  2. 不同中止率对吞吐率和平均GC时间对比。
    • 吞吐率:CFC\AFC在不同中止率下吞吐量都大于BPCC\SCC
    • 平均GC时间:AFC\CFC明显小于BPCC\SCC,且对中止率不敏感
  3. 内存消耗:CFC ≈ AFC ≈ SCC << BPCC

5.3 Evaluation of Advanced flagcommit Protocols

CFC_ex & AFC_ex VS WAL-based commit protocol :相同环境设置(采用no-force缓冲管理及记录级的并发控制)

  1. 部分编程等级(可同时通过编程方式修改page的状态标志的数量)的影响:部分编程等级造成同一时间更新的页更多,因此,可处理的事务更多,因冲突引起的事务重新开始更少。但超过2或3就会引起吞吐量下降。
  2. 与WAL-based commit protocol对比:
    • 吞吐量
    • 事务提交响应时间
    • 存储空间消耗
    • 垃圾回收时间开销
  3. 事务大小(平均一个事务写入的页数量)的影响:
    • 吞吐量
    • GC时间
  4. 缓冲池大小的影响:
    • 吞吐量
    • GC时间

6. Related Work

闪存方面数据访问技术的介绍。

结论:在闪存事务方面的研究较少,本文的研究在基于闪存的DBMSs的事务恢复方面具有填补空白的作用。

7. Conclusions And Future Work

为基于闪存的DBMS提出两种新颖的flagcommit协议,CFC&AFC,充分利用闪存的快速随机访问、异地更新、页元数据区、部分可编程的特性。通过使用影子页的提交标志保证了事务的原子性和持久性。且CFC致力于快速恢复,AFC侧重与更高的事务性能。并对两种协议做了全面的评估测试。

进一步工作:1)扩展该flagcommit到MLC及其他的非易失性存储器中。需要克服如MLC不支持部分编程能力等问题。2)对flagcommit协议做进一步优化,以减少额外开销。3)在真正的闪存中具体实现该协议。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,776评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,527评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,361评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,430评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,511评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,544评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,561评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,315评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,763评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,070评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,235评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,911评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,554评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,173评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,424评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,106评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,103评论 2 352

推荐阅读更多精彩内容