一种通过延迟事务提升数据库性能的方法

天翼云开发者社区
• 阅读 185

本文分享自天翼云开发者社区《一种通过延迟事务提升数据库性能的方法》,作者:唐****律

一、背景 在数据库代理层中,写节点的数据库连接是一种很重要和稀缺的资源,提升其利用率是一个提升数据库整体性能的重要手段。数据库连接占用过高会大幅增加数据库的资源负担,降低数据库的处理能力。通过延迟启动的事务,可以减少不必要的连接占用时长,提升数据库连接利用率。

在用户通过代理层使用数据库的时候,如果提交了一条只读查询,那么代理层可以从连接池中获取一个连接、查询、获取数据、然后归还连接。

如果在只读查询之前启动了事务,那么在用户提交或者回滚事务之前,该连接不能归还到连接池,大大增加了数据库连接的占用时间。

而在ReadCommitted事务隔离级别中,只读查询语句的查询结果是不可重复的,这时如果事务中没有其它写操作,那么是否启动事务,对于用户实际使用是没有影响的,这样则产生了不必要的事务,增加了数据库连接占用的时间,降低了数据库连接的利用率。

二、方案 本发明提出一种通过延迟启动事务的方法,减少不必要的连接占用时长,提升数据库连接利用率,进而提升数据库的整体性能。具体实现步骤如下:

1、在用户连接未进入事务状态且在ReadCommitted事务隔离级别时,如果用户启动事务,则记录其事务状态为已开启,但实际上不获取数据库连接开启事务。

2、如果用户提交的SQL为SELECT等只读查询,则直接转发SQL到写节点或者读节点。如果用户提交的SQL需要进行写操作,则根据事务状态,在转发SQL到写节点之前先启动事务,并记录实际事务状态。

3、用户提交或者回滚事务,如果实际事务状态为未开启,则跳过结束事务操作,否则按正常流程先结束事务再回收数据库连接。

三、优点 pgpool-II、pgbouncer等开源连接池组件,支持连接复用,但在事务处理上没有对此进行优化,这导致其在benchmarkSQL测试中性能受到影响,因benchmarkSQL性能测试中针对所有语句都会开启事务。其它数据库ORM框架例如Mybatis也有默认启动事务执行SQL的选项,所以此项优化是有必要的。

点赞
收藏
评论区
推荐文章
Easter79 Easter79
2年前
tcp_tw_recycle参数引发的数据库连接异常
【问题描述】开发反馈有个应用在后端数据库某次计划性重启后经常会出现数据库连接异常问题,通过监控系统的埋点数据,发现应用连接数据库异常有两类表现:  其一:连接超时  <spanstyle"backgroundcolor:FFFF00"131148.00msTomcatConnectionPool</span  其二:连接耗时过
Wesley13 Wesley13
2年前
JdbcTemplate 和 mybatis 的对比
好处:  1.jdbcTemplate是spring对jdbc操作数据库进行的封装,使得开发者可以直接在java文件中编写sql,无需配置xml文件。  2.简单效率快缺点:  1. 使用时创建连接,不使用时立即释放。频繁的连接开启和关闭造成资源的浪费,影响数据库的性能。     解决办法:使用数据库连接池,
Easter79 Easter79
2年前
Tomcat8.5&Mysql8.0配置数据库连接池(DBCP)
DBCP(DataBaseconnectionpool),数据库连接池。是apache上的一个java连接池项目,也是tomcat使用的连接池组件。由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。百度百科(htt
Stella981 Stella981
2年前
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(七):集成 Druid 数据源
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。通过数据库连接池能明显提高对数据库操作的性能。在Java应用程序开发中,常用的连接池有DBCP、C3P0、Proxool等。SpringBoot默认提供
Stella981 Stella981
2年前
Spring Boot:集成Druid数据源
综合概述数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。通过数据库连接池能明显提高对数据库操作的性能。在Java应用程序开发中,常用的连接池有DBCP、C3P0、Proxool等。Spri
Wesley13 Wesley13
2年前
thinkphp5.0数据库操作
ThinkPHP数据库处理:1.MySQL的数据库连接首先配置database.php文件使用{dump(config('database));}来查看数据库的配置项使用{$resDb::connect();dump($res);}来查看数据库的连接信息我们可以在{Db::connect()}中来配置数据库的连接,具体
Wesley13 Wesley13
2年前
Oracle可视化工具连接
Oracle可是化工具有很多,以下只列举sqldeveloper和sqlplus这两款连接方式sqldeveloper:SQLDevelope启动后,需要创建一个数据库连接,只有创建了数据库连接,才能在该数据库的方案中创建、更改对象或编辑表中的数据。创建数据库连接的步骤如下。(1)在主界面左边窗口的“连接”选项卡中右键单击“连接”节点
Wesley13 Wesley13
2年前
Mysql高级
Mysql高级day031\.应用优化前面章节,我们介绍了很多数据库的优化措施。但是在实际生产环境中,由于数据库本身的性能局限,就必须要对前台的应用进行一些优化,来降低数据库的访问压力。1.1使用连接池对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源
性能提升,成本降低,原生数据库的崛起
腾讯高级工程师杨宇基介绍,作为国内首个云原生无服务器数据库,TDSQLC实现了自动伸缩三大目标,可以根据业务负载进行伸缩。开发者不需要提前预测负载和扩展资源;按使用量计费,按实际使用负载计费,开发者不需要为未使用的资源付费;没有使用,没有付款,没有数据请求
京东云开发者 京东云开发者
5个月前
DBCP一个配置,浪费了MySQL 50%的性能!
1.引言研究背景数据库性能的重要性数据库性能优化对于保证应用的响应速度和处理大量数据的能力至关重要。它可以显著减少查询时间,提高事务处理效率,降低硬件成本,并确保系统稳定性与可扩展性。优化后的数据库能够更好地服务于用户需求,增强客户满意度,对企业的长期发展
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
649
粉丝
14
获赞
40