王春玲:在 MogDB 中实现真正意义上的自治异步事务提交
导语
2023年4月7-8日,由中国DBA联盟(ACDU)和墨天轮社区联合主办的第十二届『数据技术嘉年华』(DTC 2023) 在北京新云南皇冠假日酒店成功举办。云和恩墨·本原数据内核研发工程师王春玲在“智能前沿:数据库内核技术”专题论坛上发表了《MogDB中自治异步事务提交的设计与实现》的演讲。本文根据王春玲的演讲内容进行整理归纳,供大家参考。
MogDB 是云和恩墨结合自身十余年的技术沉淀和经验积累,联合本原数据的技术研发力量,基于 openGauss 内核进行增强提升而推出的一款安稳易用的企业级关系型数据库。在 MogDB 众多创新特性中,自治异步事务提交特性使数据库在保障完整性的前提下,实现性能的大幅提升,自公开以来受到广泛关注。
王春玲首先介绍了该特性的研发背景,并指出目前数据库在事务提交上存在的技术痛点:随着数据库应用场景的飞速发展,在TP场景下,企业用户对数据库高并发下的事务处理性能有着极高的要求。然而,openGauss 在事务提交过程中需要同步等待日志落盘。在等待期间,空闲的工作线程无法同时处理其他事务,从而导致性能的下降。此外,若在主备模式下,事务提交还需额外等待日志落盘在备机上,更加影响了事务处理能力。(如下图)
MogDB 的自治异步事务提交特性基于 openGauss 的线程池而设计。为了便于理解,王春玲对线程池概念进行了讲解:openGauss 的线程池技术是将线程资源进行池化,并在不同连接之间复用。系统启动后,会根据当前核数或用户配置启用固定数量的工作线程(TPLworker)。一个工作线程服务一到多个连接会话(session),将会话和线程进行解耦,并由数据库层来进行线程调度管理,在高并发场景下不会导致线程的频繁切换。
王春玲进一步举例,假设有3个CPU和10个并发的session(1-10),在没有线程池的情况下,需要分别启10个工作线程去执行;而在线程池模式下,只需启3个TPLworker就可以将10个会话分别绑定,从而减少对CPU的抢占。
DTC2023
openGauss已有的事务提交方案
社区版 openGauss 目前有两种事务提交方案,分别为同步事务提交和异步事务提交。王春玲对这两种方案进行了介绍:
1、openGauss 的同步事务提交
在事务提交流程中,主节点上有三个主要worker线程,WALwriter负责所有数据落盘操作,待数据全部落盘后,再由WALsender把日志发送给备机。等备机完成日志落盘后,事务才可以提交返回。
因此,该方案在执行session时,TPLworker线程需要从头至尾等待其他线程的全部操作完成,这在很大程度上影响了提交性能。
2、openGuass 的异步事务提交
openGuass 的异步事务提交方案可用一句话概括为:不等待日志落盘即返回事务提交成功。如上图所示,TPLworker把日志落盘和与备机同步等操作交给其他线程后,不进行等待,直接提交事务并返回,从而缩短响应时长。
这一方案的优势为性能较好,不受日志落盘速度影响。如下图所示,右侧的异步提交将单点与主备的性能差距大幅缩小,且整体性能有所提升。
但该模式的缺点也十分明显,即无法保障数据库完整性的首要需求。虽然事务显示提交成功,但实际上日志并没有完成落盘或与备机同步。因而一旦数据库崩盘,在重新复盘时,无法判断事务是否真正提交。因为可能出现显示提交成功,但实则数据已经丢失的情况。
综上所述,异步提交在性能提升上具有很大的研发意义。但 openGauss 已有的同步提交和异步提交方案,都只能在性能和完整性上二者择其一。因此,如何在保障数据库完整性的情况下实现性能的提升,成为有待解决的痛点。
DTC2023
MogDB的自治异步事务提交方案
MogDB 在提交流程中增加了一组TPLcommitter线程执行所有的事务提交。因此,TPLworker在等待其他线程处理日志落盘等操作时,可以被释放出来继续处理新的会话,从而实现事务处理和提交的流水线化。
流程细节如上图所示:WALwriter负责日志落盘,WALsender负责将日志发送给备机,备机接收到日志并落盘后,将事务提交信息返回给TPLcommitter线程,再由TPLcommitter完成剩余操作。当新会话进入后,TPLworker就可以无缝处理新会话,从而达到流水线化的效果。
该方案使整个系统事务处理的吞吐量有了明显提升。同时,测试证明committer线程的增加没有导致单个事务响应时间增长。
此外,王春玲还对 MogDB 在用户使用上的设计进行了介绍。MogDB 增加了一个GUC以便让用户能够在会话级别控制是否使用异步提交。MogDB 既支持自治异步事务提交,也支持原来社区版本 openGauss 的事务提交,用户可以在GUC上进行选择切换。
同时,为更好地监控集群状态,MogDB 提供了查看线程状态和会话状态的视图(如下图所示):TPLcommiter线程状态视图用于查看现在集群当中有多少个TPLcommiter线程;会话状态视图用于查看处于各状态下的session分别有多少个。
DTC2023
MogDB自治异步事务提交性能测试
在分享的最后,王春玲展示了自治异步事务提交的性能实测。实测使用鲲鹏920,64核500G内存,对1000个TPC-C(约100G数据)& 600个并发进行测试。
测试结果显示,自治异步事务提交性能在单点模式下,实现了10%的性能提升;而在主备模式下,更是将性能提升了36.2%。并且将主备与单点间的性能差别降低至6.3%。
DTC2023
结语
MogDB 的自治异步事务提交本质是通过实现事务处理和提交的流水线化,使CPU资源得到充分的利用,以实现性能提升,特别是在高并发、小query、写负载高、低速IO设备/HA模式/DCF的场景下,性能优势更为明显。
作为 openGauss 的商业发行版,MogDB 始终追求更加极致的性能,致力于为企业用户打造安稳易用的数据库产品。在持续加大 MogDB 内核研发投入的同时,云和恩墨始终积极回馈 openGauss 开源社区,以自身全栈的数据技术能力助力中国数据库产业砥砺前行。
→
点击文末“阅读原文”回顾完整演讲视频
数据驱动,成就未来,云和恩墨,不负所托!
云和恩墨创立于2011年,以“数据驱动,成就未来”为使命,是智能的数据技术提供商。我们致力于将数据技术带给每个行业、每个组织、每个人,构建数据驱动的智能未来。