Chinaunix首页 | 论坛 | 博客
  • 博客访问: 331334
  • 博文数量: 659
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5700
  • 用 户 组: 普通用户
  • 注册时间: 2022-03-07 15:28
个人简介

天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。

文章分类

全部博文(659)

文章存档

2024年(210)

2023年(247)

2022年(202)

我的朋友

分类: SQLServer

2023-09-28 15:40:16

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

一、背景

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

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

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

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

二、方案

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

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

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

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

三、优点

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

阅读(149) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~