王春玲:在 MogDB 中实现真正意义上的自治异步事务提交

导语

2023年4月7-8日,由中国DBA联盟(ACDU)和墨天轮社区联合主办的第十二届『数据技术嘉年华』(DTC 2023) 在北京新云南皇冠假日酒店成功举办。云和恩墨·本原数据内核研发工程师王春玲在“智能前沿:数据库内核技术”专题论坛上发表了《MogDB中自治异步事务提交的设计与实现》的演讲。本文根据王春玲的演讲内容进行整理归纳,供大家参考。

MogDB 是云和恩墨结合自身十余年的技术沉淀和经验积累,联合本原数据的技术研发力量,基于 openGauss 内核进行增强提升而推出的一款安稳易用的企业级关系型数据库。在 MogDB 众多创新特性中,自治异步事务提交特性使数据库在保障完整性的前提下,实现性能的大幅提升,自公开以来受到广泛关注。

24b82965c6ac52848be048f219313e71.jpeg

王春玲首先介绍了该特性的研发背景,并指出目前数据库在事务提交上存在的技术痛点:随着数据库应用场景的飞速发展,在TP场景下,企业用户对数据库高并发下的事务处理性能有着极高的要求。然而,openGauss 在事务提交过程中需要同步等待日志落盘。在等待期间,空闲的工作线程无法同时处理其他事务,从而导致性能的下降。此外,若在主备模式下,事务提交还需额外等待日志落盘在备机上,更加影响了事务处理能力。(如下图)

472e9d2935ca3cd8da28f34de1e6ee53.jpeg

MogDB 的自治异步事务提交特性基于 openGauss 的线程池而设计。为了便于理解,王春玲对线程池概念进行了讲解:openGauss 的线程池技术是将线程资源进行池化,并在不同连接之间复用。系统启动后,会根据当前核数或用户配置启用固定数量的工作线程(TPLworker)。一个工作线程服务一到多个连接会话(session),将会话和线程进行解耦,并由数据库层来进行线程调度管理,在高并发场景下不会导致线程的频繁切换。

9a32bc70c043c391d7f5faa11eb79584.jpeg

王春玲进一步举例,假设有3个CPU和10个并发的session(1-10),在没有线程池的情况下,需要分别启10个工作线程去执行;而在线程池模式下,只需启3个TPLworker就可以将10个会话分别绑定,从而减少对CPU的抢占。

DTC2023

openGauss已有的事务提交方案

社区版 openGauss 目前有两种事务提交方案,分别为同步事务提交异步事务提交。王春玲对这两种方案进行了介绍:

1、openGauss 的同步事务提交

2021d78229d2b6cbdaaf50654b70a699.jpeg

在事务提交流程中,主节点上有三个主要worker线程,WALwriter负责所有数据落盘操作,待数据全部落盘后,再由WALsender把日志发送给备机。等备机完成日志落盘后,事务才可以提交返回。

因此,该方案在执行session时,TPLworker线程需要从头至尾等待其他线程的全部操作完成,这在很大程度上影响了提交性能

2、openGuass 的异步事务提交

ef7f4504e4b8c0466538adeca86a9157.jpeg

openGuass 的异步事务提交方案可用一句话概括为:不等待日志落盘即返回事务提交成功。如上图所示,TPLworker把日志落盘和与备机同步等操作交给其他线程后,不进行等待,直接提交事务并返回,从而缩短响应时长。

这一方案的优势为性能较好,不受日志落盘速度影响。如下图所示,右侧的异步提交将单点与主备的性能差距大幅缩小,且整体性能有所提升。

aac428b0d76245d1f6b7b2788dbfa8cf.jpeg

但该模式的缺点也十分明显,即无法保障数据库完整性的首要需求。虽然事务显示提交成功,但实际上日志并没有完成落盘或与备机同步。因而一旦数据库崩盘,在重新复盘时,无法判断事务是否真正提交。因为可能出现显示提交成功,但实则数据已经丢失的情况。

综上所述,异步提交在性能提升上具有很大的研发意义。但 openGauss 已有的同步提交和异步提交方案,都只能在性能和完整性上二者择其一。因此,如何在保障数据库完整性的情况下实现性能的提升,成为有待解决的痛点。

DTC2023

MogDB的自治异步事务提交方案

bcba3612c81c79ab6b6395bfcdcb82ee.jpeg

MogDB 在提交流程中增加了一组TPLcommitter线程执行所有的事务提交。因此,TPLworker在等待其他线程处理日志落盘等操作时,可以被释放出来继续处理新的会话,从而实现事务处理和提交的流水线化。

流程细节如上图所示:WALwriter负责日志落盘,WALsender负责将日志发送给备机,备机接收到日志并落盘后,将事务提交信息返回给TPLcommitter线程,再由TPLcommitter完成剩余操作。当新会话进入后,TPLworker就可以无缝处理新会话,从而达到流水线化的效果。

该方案使整个系统事务处理的吞吐量有了明显提升。同时,测试证明committer线程的增加没有导致单个事务响应时间增长。

此外,王春玲还对 MogDB 在用户使用上的设计进行了介绍。MogDB 增加了一个GUC以便让用户能够在会话级别控制是否使用异步提交。MogDB 既支持自治异步事务提交,也支持原来社区版本 openGauss 的事务提交,用户可以在GUC上进行选择切换。

同时,为更好地监控集群状态,MogDB 提供了查看线程状态和会话状态的视图(如下图所示):TPLcommiter线程状态视图用于查看现在集群当中有多少个TPLcommiter线程;会话状态视图用于查看处于各状态下的session分别有多少个。

de658d67363055569aab861b7ba3ee35.jpeg

d2e5f1591b5f9b2c195a465ffc98ca3f.jpeg

DTC2023

MogDB自治异步事务提交性能测试

在分享的最后,王春玲展示了自治异步事务提交的性能实测。实测使用鲲鹏920,64核500G内存,对1000个TPC-C(约100G数据)& 600个并发进行测试。

测试结果显示,自治异步事务提交性能在单点模式下,实现了10%的性能提升;而在主备模式下,更是将性能提升了36.2%。并且将主备与单点间的性能差别降低至6.3%

93fc536d819b7383842f9c32b4497d8e.jpeg

652ab44583081e803420ba7dd65b9db4.jpeg

DTC2023

结语

MogDB 的自治异步事务提交本质是通过实现事务处理和提交的流水线化,使CPU资源得到充分的利用,以实现性能提升,特别是在高并发、小query、写负载高、低速IO设备/HA模式/DCF的场景下,性能优势更为明显。    

作为 openGauss 的商业发行版,MogDB 始终追求更加极致的性能,致力于为企业用户打造安稳易用的数据库产品。在持续加大 MogDB 内核研发投入的同时,云和恩墨始终积极回馈 openGauss 开源社区,以自身全栈的数据技术能力助力中国数据库产业砥砺前行。

点击文末“阅读原文”回顾完整演讲视频

b16d9f715d213046e30b3eca13c1b28b.gif

数据驱动,成就未来,云和恩墨,不负所托!


云和恩墨创立于2011年,以“数据驱动,成就未来”为使命,是智能的数据技术提供商。我们致力于将数据技术带给每个行业、每个组织、每个人,构建数据驱动的智能未来。

云和恩墨在数据承载(分布式存储、数据持续保护)、管理(数据库基础软件、数据库云管平台、数据技术服务)、加工(应用开发质量管控、数据模型管控、数字化转型咨询)和应用(数据服务化管理平台、数据智能分析处理、隐私计算)等领域为各个组织提供可信赖的产品、服务和解决方案,围绕用户需求,持续为客户创造价值,激发数据潜能,为成就未来敏捷高效的数字世界而不懈努力。

0255f2c1aa56e67586b5bb728b21a51d.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值