"); //-->
https://www.ctyun.cn/developer/article/462288634712133
一、背景
在数据库代理层中,写节点的数据库连接是一种很重要和稀缺的资源,提升其利用率是一个提升数据库整体性能的重要手段。数据库连接占用过高会大幅增加数据库的资源负担,降低数据库的处理能力。通过延迟启动的事务,可以减少不必要的连接占用时长,提升数据库连接利用率。
在用户通过代理层使用数据库的时候,如果提交了一条只读查询,那么代理层可以从连接池中获取一个连接、查询、获取数据、然后归还连接。
如果在只读查询之前启动了事务,那么在用户提交或者回滚事务之前,该连接不能归还到连接池,大大增加了数据库连接的占用时间。
而在ReadCommitted事务隔离级别中,只读查询语句的查询结果是不可重复的,这时如果事务中没有其它写操作,那么是否启动事务,对于用户实际使用是没有影响的,这样则产生了不必要的事务,增加了数据库连接占用的时间,降低了数据库连接的利用率。
二、方案
本发明提出一种通过延迟启动事务的方法,减少不必要的连接占用时长,提升数据库连接利用率,进而提升数据库的整体性能。具体实现步骤如下:
1、在用户连接未进入事务状态且在ReadCommitted事务隔离级别时,如果用户启动事务,则记录其事务状态为已开启,但实际上不获取数据库连接开启事务。
2、如果用户提交的SQL为SELECT等只读查询,则直接转发SQL到写节点或者读节点。如果用户提交的SQL需要进行写操作,则根据事务状态,在转发SQL到写节点之前先启动事务,并记录实际事务状态。
3、用户提交或者回滚事务,如果实际事务状态为未开启,则跳过结束事务操作,否则按正常流程先结束事务再回收数据库连接。
三、优点
pgpool-II、pgbouncer等开源连接池组件,支持连接复用,但在事务处理上没有对此进行优化,这导致其在benchmarkSQL测试中性能受到影响,因benchmarkSQL性能测试中针对所有语句都会开启事务。其它数据库ORM框架例如Mybatis也有默认启动事务执行SQL的选项,所以此项优化是有必要的。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
嵌入式Linux开发之C语言学习秘诀
印度拟建立大规模人脸识别系统
智能停车场一体化控制器方案简述
四个步骤 获得更安全数据库
Yandex 在 GitHub 开源 YDB 数据库
基于Onenet及微信小程序的校园运动场地预约系统
面向对象数据库在多机器人系统中的应用研究
中国关系型数据库软件市场,变革即将到来
详细讲解大型数据库的设计原则与开发技巧
中国信通院公布上半年国内数据库产品和服务商第一梯队,含华为、阿里、腾讯
嵌入式实时数据库
嵌入式数据库
Protel99SE的文件管理
基于实时分布式数据库的轨道交通电力监控系统
嵌入式数据库
基于无线通信的自动抄表系统的
电冰箱及其部件自动检测线设计与实现
一种基于SQL语句分发请求的复制算法
业界唯一的全球OSAT制造站点数据库报告包括覆盖到测试的360条产线
实时数据库系统及其特征(老站转)
安全升级,智能领航:RFID技术推动铁路锁控系统进入新时代
在vxworks做一个内存数据库,请各位大虾指点?(老站转)
Empress嵌入式数据库简介
基于大数据分析的实体导航系统
基于二维激光脉冲测距传感器的动态车辆智能宽高检测系统设计