窥镜下的OLTP以及我们的发现(三) - 终结 -

作者: Stavros Harizopoulos, Daniel J. Abadi, Samuel Madden, Michael Stonebraker

——接上篇——

4.3 实验结果

在所有的实验中,我们的基准Shore 平台是一个从不被清除至磁盘(可能被执行的唯一磁盘I/O 来自日志管理器)的内存数据库。只有一个单线程,一次执行一个事务。屏蔽I/O(在基于磁盘的日志记录的情况下)并不是一个问题,因为它只会增加总体响应时间,不会增加事务实际运行的指令或周期。

我们在Shore 中放置了11 个不同的开关,以便我们可以删除功能(或执行优化),我们将在结果展示中分为六个组件来叙述。对于11 个开关(和相应的组件)的清单和我们应用它们的顺序,请参见图7。我们在第3.2 节中详细描述了这些开关。最后一个开关完全绕过Shore,并运行我们自己的、拥有最小开销的内核,在我们的结果中,我们称之为“最优”。这个内核是一种内存驻留的、手工构建的B 树包,没有额外的事务或查询处理功能。

4.3.1 对吞吐量的影响

完成所有这些组件删除和优化之后,Shore 只剩下剩余码,这是所有的CPU 周期,因为没有任何I/O ;具体来说,平均每个事务耗时约为80 微秒(对于50 个新订单和50 个支付事务的组合),或每秒完成12,700 个事务。

相比之下,在我们最优系统的有用工作中,每个事务大约需要22 微秒,即每秒完成46,500 个事务。造成这种差异的主要原因是我们内核中更大的调用堆栈深度,以及我们无法在不破坏Shore 的情况下移除一些事务设置和缓冲池调用。作为一个参考点,原始的Shore(已启用日志记录,但数据库在主存中缓存)能够每秒完成640 个事务(每个事务耗时1.6 毫秒),而在主存中运行、但没有日志刷新功能的Shore 每秒完成1,700 个事务(每个事务耗时588 微秒)。因此,我们的修改使总体吞吐量提高了20 倍。

鉴于这些基本的吞吐量测量结果,我们现在提供针对我们基准测试的两个事务的详细指令分解。记住,下面几节所述的指令和周期分解不包括任何磁盘操作的影响,而基准Shore 的吞吐量数据确实包括一些日志写入操作。

4.3.2 支付

图5(左侧)显示了支付事务的指令数的减少,因为我们优化了B 树键值评估,并删除了日志记录、封锁、锁存和缓冲区管理器功能。该图的右边部分展示了我们执行的每个功能删除对消耗在事务执行的各个部分的指令数量的影响。对于支付事务,这些部分包括一个begin 调用,三个B 树查找,然后是三个固定/ 取消固定操作,接着是三个更新(通过B 树),一个记录创建和一个提交调用。每个条纹的高度代表执行的指令的总数。最右边的条纹代表我们开销最小的内核的性能。

我们的B 树键值评估优化据说在高性能DBMS 架构中是标准作法,所以我们首先执行它们,因为任何系统都应该能够做到这一点。删除日志记录功能主要影响提交和更新,因为这些是写入日志记录的代码的一部分,以及导致较少的B 树和目录查找。这些修改去掉了总指令数的18%。

在这里插入图片描述

图5. 支付事务的指令数详细分解。

在这里插入图片描述

图6. 新订单事务的指令数详细分解。

封锁占用第二多的指令,约占总数的25%。删除它会影响所有的代码,但在固定/ 取消固定操作、查找和提交中尤其重要,这是预料之中的事情,因为这些操作必须获得或释放锁(当执行更新时,事务已经在更新的记录上有锁)。

锁存占用13% 的指令,并且它在事务的创建记录和B 树查找部分中特别重要。这是因为,缓冲池(用于创建)和B 树是主要的共享数据结构,它们必须通过锁存器得到保护。

最后,我们的缓冲区管理器修改约占总指令数的30%。记住,通过这一系列修改,新记录将直接通过内存分配来分配,并且在大多数情况下,页面查找不必再通过缓冲池。这使得记录分配基本上无开销,并且极大地提高了执行频繁查找(比如B 树查找和更新)的其他组件的性能。

此时,剩余的内核需要初始指令数的大约5%(20 倍的性能改善!),大约是我们“最优”系统指令总数的6 倍。这一分析引出了两个观察结果:首先,所有六个主要组件都很重要,每一个均占用原始180,000 个指令中的18,000 个或更多。其次,在我们应用所有优化之前,指令数的减少并不显著:在我们删除缓冲区管理器的最后一步之前,其余组件使用的指令只有基准系统的1/3(而在删除缓冲区管理器之后只有1/20)。

4.3.3 新订单

图6 展示了新订单事务指令数的类似分解;图7 展示了我们进行的所有11 个修改和优化占用指令的详细数据。此事务使用的指令数量大约是支付事务的10 倍,需要13 个B 树插入、12 个记录创建操作、11 个更新、23 个固定/ 取消固定操作,以及23 个B 树查找。对于新订单和支付事务之间的主要优化,指令分配的主要区别在于B 树键值代码、日志记录和封锁。由于新订单事务在操作组合中添加了B 树插入,因此,通过优化关键的评估代码,性能相对提升约16%。日志记录和封锁现在只占总指令数的12% 和16% ;这在很大程度上是因为,在这种情况下,日志记录和封锁功能执行大量工作的操作所花费的总时间比例要小得多。

缓冲区管理器优化仍然代表着最显著的性能改善,因为我们可以绕过记录创建的高开销。图7 中关于缓冲区管理器优化的详细分解揭示了一些令人惊讶的事情:从8K 到32K 页面(标记为“小页面”)的变化使得总指令数几乎减少了14%。这种简单的优化可以降低页面分配的频率和减少B 树的深度,从而带来相当大的性能提升。

在这里插入图片描述

图7. 新订单事务的拓展分解

在这里插入图片描述

图8. 新订单事务的指令(左)与周期(右)对比。

4.3.4 指令与周期

查看支付和新订单事务中的指令数的详细分解之后,我们现在将新订单事务每个阶段所花费的时间比例(周期)与每个阶段所使用的指令比例进行比较。结果如图8 所示。正如我们在前面所提到的,我们没有期望这两个比例在给定的阶段是相同的,因为缓存未命中和管线停顿(通常归因于支线)会导致一些指令比其他指令需要更多的周期。例如,B 树优化减少的周期少于它们减少的指令,因为我们消除的Shore 的B 树代码开销主要是偏移计算,缓存未命中不多。相反,我们剩余的“内核”使用的周期比例比指令比例要大,这是因为它支线繁多,并且主要由函数调用组成。同样,日志记录使用的周期明显更多,因为它涉及到大量内存创建和写入日志记录(所有图表均不计算磁盘I/O 时间)。最后,封锁和缓冲区管理器消耗的周期比例与它们消耗的指令比例大体相同。

  1. 对未来OLTP 引擎的影响

鉴于前一部分的性能结果,我们将重启我们在第2 部分中关于未来OLTP 设计的讨论。在详细讨论我们的结果给各种数据库子系统的设计带来的影响之前,我们从我们的数据中获得了两个重要发现:

首先,删除系统任何一个组件的好处,对整体性能的提升相对不明显。例如,我们的主存优化将Shore 的性能提高了约30%,这是显著的性能提升,但这不太可能促进主要的数据库厂商重新设计他们的系统。删除锁存或者切换到一种单线程、一次一个事务的方法即可实现类似的性能提升。

最显著的性能改善只有在应用多个优化之后才实现。相比原始的Shore,一个完全精简的系统带来了20 倍或更多倍的性能提升,这真的非常显著。请注意,这样的系统仍然可以提供事务语义,如果每次只运行一个事务,所有事务都有两个阶段,而恢复则是通过从网络中的其他节点复制状态来实现的。然而,这样的系统与各厂商当前所提供的系统迥然不同。

5.1 并发控制

我们的实验展示了动态封锁对总开销的重大贡献(大约19% 的周期)。这表明,通过识别允许关闭并发控制的场景,例如应用程序交换性或一次一个事务处理,我们可以获得很大的性能提升。然而,许多DBMS 应用的性能不够好,或者在每个站点一次只运行一个事务的情况下不起作用。在这种情况下,这里有一个有趣的问题,什么样的并发控制协议是最好的。二十年前,众多研究者[KR81, ACL87] 进行了大量的模拟,这些模拟清楚地证明了动态封锁相对其他并发控制技术的优越性。然而,这项研究工作假定了一个基于硬盘、具有磁盘停顿的负载,这明显对结果产生了重大影响。利用一个主存工作负载来重做这些模拟研究是非常值得的。我们强烈怀疑,某种乐观共发控制将是主流选择。

5.2 多核支持

鉴于多核计算机日益流行,一个有趣的问题是,未来的OLTP 引擎应当如何应对多核。一个选项是在单个站点内的不同内核上并发地运行多个事务(正如人们现在所做的);当然,这样的并行需要延迟,并意味着诸多的资源分配问题。我们的实验表明,尽管锁存的性能开销并不是特别高(在占主导地位的新订单事务中占用10% 的周期),但它仍然是实现OLTP 性能显著改善的障碍。随着用于在多核机器上高效运行高度并发的程序的技术(例如事务内存[HM93])成熟并找到应用到产品的方法,重新审视锁存的新实现和重新评估OLTP 的多线程开销将非常有趣。

第二种选择是在操作系统或DBMS 层面使用虚拟化,以使每个内核看起来都是一个单线程机器。目前尚不清楚这种方法对性能有什么影响,有必要仔细研究这种虚拟化。作为前面两个选择的补充,第三个选择是尝试利用查询内并行,这种方法可能具有可行性,即使系统一次运行一个事务。然而,在典型的OLTP 事务中,查询内并行的数量可能受到限制。

5.3 复制管理

传统的数据库智慧是通过基于日志传送的主动- 被动方案来支持复制;即,每个对象都有一个“主动的”主副本,所有更新首先被定向到该主副本。然后,记录更改的日志通过网络被假脱机到一个或多个“被动的”备份站点。恢复逻辑将远程数据库从日志开始向前滚动。这个方案有几个劣势。首先,除非使用一种两阶段提交,否则远程副本与主数据库在事务上不一致。因此,如果需要事务一致性的读取,则不能将读取定向到副本。如果读取被定向到副本,关于答案的准确性就没话可说了。第二个劣势是失效切换不是即时的。因此,失效期间的停顿长于它需要达到的标准。第三,它对日志的可用性有要求;我们的实验表明,维持日志占用总周期数的20%。因此,我们认为思考主动- 被动复制的替代方法是一件有趣的事情,例如主动- 主动方法。

在过去,使用通过日志传送的主动- 被动复制的主要原因在于,人们认为向前滚动日志的开销比在副本上执行事务逻辑的成本要低得多。然而,在主存驻留的DBMS 中,事务的开销通常少于1 毫秒,需要如此之少的周期以至于它可能只比回放日志慢一点儿。在这种情况下,使用一种替代的主动- 主动架构似乎是有道理的。使用这种方法,所有的副本都是“主动的”,事务在所有副本上同步进行。这种方法的优势在于几乎即时的失效切换,并且不要求更新首先被定向到主副本。当然,在这种情况下,两阶段提交将带来重大的额外延迟,这表明我们需要使用技术来避免它,或许可以通过按时间戳顺序执行事务来解决。

5.4 弱一致性

大多数面向网络的大型OLTP 厂商坚持使用副本(通常通过WAN)来实现高可用性和灾难复原。然而,看来似乎没有人愿景为WAN 带来的事务一致性付出代价。所在第2 部分所提及的,网络应用的共同需求是“最终一致性”[_Bre00, DHJ+07]。这种方法的支持者主张通过非技术手段来解决不一致性的问题;例如,给抱怨的客户一张信用卡比确保100% 的一致性要划算得多。换句话说,假设系统静止下来,副本最终会变得一致。

显而易见,在常见的工作负载下,没有事务一致性,就没有最终一致性。例如,假设事务1 在站点1 提交,并在站点2 中止或丢失。事务2 读取事务1 的结果并写入数据库,导致不一致传播下去并污染系统。这清楚地说明,必须要有最终一致性是可以实现的工作负载,而查找它们将是一项有趣的工作,因为如上所述,我们的结果表明,从主存数据库系统中删除事务支持(封锁和日志记录)可以带来非常高性能的数据库。

5.5 缓存敏感B 树

在我们的研究中,我们没有把Shore 的B 树转换为“缓存敏感的”格式[RR99, RR00]。这样的更改只会产生很小的影响,至少对于没有经过我们所展示的所有其他优化的系统来说是这样。针对B 树的缓存敏感研究的目标是因访问存储在B 树节点中的键值而导致的缓存未命中。我们的优化在没有改变键值访问模式的情况下消除了花费在B 树操作上的时间的80%~88%。从一个精简的Shore 切换到我们最小开销的内核(仍然访问相同的数据)消除了剩余时间的四分之三。换句话说,优化其他组件,比如并发控制和恢复,似乎比优化数据结构更为重要。然而,当我们将一个系统精简成为一个非常基本的内核之后,B 树代码中的缓存未命中可能成为新的瓶颈。事实上,或许其他索引结构,比如散列表,在这种新环境中表现更好。同样,这些推测应该经过仔细的检验。

  1. 相关研究

关于现代数据库系统性能瓶颈的研究已有很多。[BMK99] 和[ADH+99] 展示了主存数据停顿对数据库性能日益增加的影响。[MSA+04] 从客户端角度分解了各种资源(例如锁、I/O 同步或CPU)竞争引起的瓶颈(包括I/O 停顿和其他非共发查询的抢先调度引起的感知延迟)。不同于本白皮书所陈述的研究,这些论文分析了整个数据库,并没有依照数据库组件来分析性能。基准研究,例如OLTP 环境中的TPC-B [Ano85] 和普通SQL 处理中的威斯康星基准[BDT83],也只是关注整个数据库的性能,并没有细化到单个OLTP 组件的性能。

此外,人们还对主存数据库进行了大量的研究。关于主存索引结构的研究已经包括了AVL 树[AHU74] 和T 树[LC86]。针对主存适用性的其他技术见于[BHT87]。完全的系统包括TimesTen [Tim07],DataBlitz [BBK+98] 和MARS [Eic87]。此领域的一个调查见于[GS92]。然而,这些研究都没有试图隔离产生开销的组件,而这正是本白皮书的主要贡献。

  1. 结论

我们针对Shore 进行了性能研究,因为我们希望了解在现代数据库系统中时间花费在哪里,并由此帮助我们了解近来提出的几种备选数据库架构的潜在性能。通过删除Shore 的组件,我们得到一个系统,这个系统运行我们修改后的TPC-C 基准测试程序的速度可以达到原始系统的约20 倍(尽管它的功能已经大幅减少)。我们发现缓冲区管理和封锁操作是系统开销的最主要贡献者,但日志记录和锁存操作的贡献也很大。基于这些结果,我们获得了一些有趣的发现。首先,除非删除所有这些组件,否则一个主存优化的数据库(或者没有事务的数据库,亦或没有日志记录的数据库)的性能不太可能比传统的数据库(大多数数据都驻留在RAM)高出太多。其次,当我们真的生成一个完全精简的系统(例如,单线程,通过从网络中的其他节点复制状态来执行恢复,内存驻留,并且使用缩减的功能事务)时,它的性能要比一个未修改的系统高出几个数量级。这表明,近来关于精简系统的提议[WSA97, SMA+07] 可能具有可行性。

  1. 致谢

我们感谢SIGMOD 审稿人为我们提供了有益的意见。本研究工作受到美国国家科学基金会的支持(资助编号:0704424 和0325525)。

  1. 可重复性评定

本白皮书中的所有结果经过了SIGMOD 可重复性委员会的验证。本白皮书所使用的代码和/ 或数据可见于:http://www.sigmod.org/codearchive/sigmod2008/

  1. 参考文献

[ACL87] Agrawal, R., Carey, M. J. 和Livny, M. 并发控制和性能模拟:替代选项和影响. ACM Trans.Database Syst.12(4), 1987-12.

[AMS+07] Aguilera, M., Merchant, A., Shah, M., Veitch, A. C. 和Karamanolis, C. T. Sinfonia :构建可扩展分布式系统的新范例. 会刊.SOSP, 2007.

[AHU74] Aho, A. V., Hopcroft, J. E. 和Ullman, J. D. 计算机算法的设计和分析. Addison-Wesley Publishing Company, 1974.

[ADH+99] Ailamaki, A., DeWitt, D. J., Hill, M. .D. 和Wood, D. A. 现代处理器上的DBMS :时间都去哪儿了. 会刊.VLDB, 1999, 266-277.

[Ail04] Ailamaki, A. 新硬件的数据库架构. 教程. 会刊.VLDB, 2004.

[Ano85] Anon 等人. 事务处理能力的测量. Datamation, 1985-02.

[BBK+98] Baulier, J. D., Bohannon, P., Khivesara, A. 等人. DataBlitz 主存存储管理器:架构、性能和体验. VLDB Journal, 1998.

[BDT83] Bitton, D., DeWitt, D. J. 和Turbyfill, C. 基准数据库系统,一种系统的方法. 会刊.VLDB, 1983.

[BHT87] Bitton, D., Hanrahan, M. 和Turbyfill, C. 主存数据库系统的复杂查询性能. 会刊.ICDE, 1987.

[BMK99] Boncz, P. A., Manegold, S. 和Kersten, M. L. 针对新瓶颈优化的数据库架构:内存访问. 会刊.VLDB, 1999.

[Bre00] Brewer, E. A. 通向强大的分布式系统(摘要). 会刊.PODC, 2000.

[BDR97] Bugnion, E., Devine, S. 和Rosenblum, M. Disco :在可扩展多核处理器上运行商品经营系统. 会刊.SOSP, 1997.

[CDF+94] Carey, M. J., DeWitt, D. J., Franklin, M. J. 等人. 支持持久性应用. 会刊.SIGMOD, 1994.

[CDG+06] Chang, F., Dean, J., Ghemawat, S., Hsieh, W. C., Wallach, D. A., Burrows, M., Chandra, T., Fikes, A. 和Gruber, R. E. Bigtable :一个用于结构化数据的分布式存储系统. 会刊.OSDI, 2006.

[DG04] Dean, J. 和Ghemawat, S. MapReduce:大型集群上的简化数据处理. 会刊.OSDI, 2004.

[DHJ+07] DeCandia, G., Hastorun, D., Jampani, M., Kakulapati, G., Lakshman, A., Pilchin, A., Sivasubramanian, S., Vosshall, P. 和Vogels, W. Dynamo :亚马逊高度可用的键值存储. 会刊.SOSP, 2007.

[DGS+90] DeWitt, D. J., Ghandeharizadeh, S., Schneider, D. A., Bricker, A., Hsiao, H. 和Rasmussen, R. 伽马数据库机器项目. IEEE Transactions on Knowledge and Data Engineering 2(1):44-62, 1990-03.

[Eic87] Eich, M. H. MARS :主存数据库机器的设计. 1987 年国际数据库机器研讨会会刊,1987-10.

[GS92] Garcia-Molina, H. 和Salem, K. 主存数据库系统:概览. IEEE Trans. Knowl.Data Eng.4(6): 509-516 (1992).

[GR93] Gray, J. 和Reuter, A. 事务处理:概念和技术. Morgan Kaufmann Publishers, Inc., 1993.

[GBH+00] Gribble, S. D., Brewer, E. A., Hellerstein, J. M. 和Culler, D .E. 用于因特网服务架构的可扩展分布式数据结构. 会刊.OSDI, 2000.

[Hel07] Helland, P. 分布式事务之外的生活:一个变节者的观点. 会刊.CIDR, 2007.

[HM93] Herlihy, M. P. 和Moss, J. E. B. 事务内存:针对无锁数据结构的架构支持. 会刊.ISCA, 1993.

[KR81] Kung, H. T. 和Robinson, J. T. 关于并发控制的乐观方法. ACM Trans. Database Syst.6(2):213-226, 1981-06.

[LM06] Lau, E. 和Madden, S. 一种针对可更新分布式数据仓库恢复和高可用性的集成方法. 会刊.VLDB, 2006.

[LC86] Lehman, T. J. 和Carey, M. J. 一项关于主存数据库管理系统索引结构的研究. 会刊.VLDB, 1986.

[LGG+91] Liskov, B., Ghemawat, S., Gruber, R., Johnson, P., Shrira, L. 和Williams, M. Harp 文件系统中的复制. 会刊.SOSP,第226-238 页,1991.

[MSA+04] McWherter, D. T., Schroeder, B., Ailamaki, A. 和Harchol-Balter, M. OLTP 和事务网络应用的优先级机制. 会刊. ICDE, 2004.

[MHL+92] Mohan, C., Haderle, D., Lindsay, B., Pirahesh, H. 和Schwarz, P. ARIES:一种使用预写日志记录支持细粒度封锁和部分回滚的事务恢复方法. ACM Trans.Database Syst.17(1):94-162, 1992.

[Moh89] Mohan, C. ARIES/KVL :一种针对在B 树索引上运行的多动作事务的并发控制的键值锁定方法. 1989, Research Report RJ 7008,数据库技术研究所,IBM 阿尔马登研究中心.

[ML89] Mohan, C. 和Levine, F. ARIES/IM :一种使用预写日志记录的高效和高并发性索引管理方法. 1989,Research Report RJ 6846,数据库技术研究所,IBM 阿尔马登研究中心.

[MBD+99] Mucci, P. J., Browne, S., Deane, C. 和Ho, G. PAPI :一个硬件性能计数器的便携式接口. 会刊. 美国国防部HPCMP 用户组会议,加州蒙特利,1999-06

[RR99] Rao, J. 和Ross, K. A. 主存中针对决策支持的缓存敏感索引. 会刊.VLDB, 1999.

[RR00] Rao, J. 和Ross, K. A. 使主存中的B+ 树具有缓存敏感性. SIGMOD 记录,29(2):475-486,2000-06.

[SMK+01] Stoica, I., Morris, R., Karger, D. R., Kaashoek, M. F. 和Balakrishnan, H. Chord :因特网应用的一个可扩展对等查找协议. 会刊.SIGCOMM, 2001.

[SAB+05] Stonebraker, M., Abadi, D. J., Batkin, A., Chen, X., Cherniack, M., Ferreira, M., Lau, E., Lin, A., Madden, S., O’Neil, E., O’Neil, P., Rasin, A., Tran, N. 和Zdonik, S. C-Store :一种面向列的DBMS. 会刊.VLDB, 2005.

[SMA+07] Stonebraker, M., Madden, S., Abadi, D. J., Harizopoulos, S., Hachem, N. 和Helland, P. 一个架构时代的结束(完全重写的时机已到). 会刊.VLDB, 2007.

[Tim07] Oracle TimesTen. http://www.oracle.com/timesten/ index. html.2007.

[TPCC] 事务处理性能委员会.TPC-C 基准,5.8.0 版,2006. http://www. tpc.org/tpcc/spec/tpcc_current.pdf

[WSA97] Whitney, A., Shasha, D. 和Apter, S. 没有并发控制的大容量事务处理、两阶段提交、SQL 或C. 会刊.HPTPS, 1997.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值