专栏
天翼云开发者社区

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

2023-09-18 09:41:30 7阅读

1、背景

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

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

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

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

2、方案

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

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

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

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

3、优点

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

  • 0
  • 0
  • 0
0 评论
0/1000
评论(0) 发表评论
唐****律

唐****律

15 篇文章 2 粉丝
关注

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

2023-09-18 09:41:30 7阅读

1、背景

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

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

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

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

2、方案

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

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

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

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

3、优点

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

文章来自专栏

数据库

8 篇文章 1 订阅
0 评论
0/1000
评论(0) 发表评论
  • 0
    点赞
  • 0
    收藏
  • 0
    评论