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

这篇具有很好参考价值的文章主要介绍了一种通过延迟事务提升数据库性能的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

一、背景

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

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

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

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

二、方案

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

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

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

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

三、优点

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

到了这里,关于一种通过延迟事务提升数据库性能的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库——事务,事务隔离级别

    什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误

    2024年02月11日
    浏览(46)
  • 【数据库】Python脚本实现数据库批量插入事务

    在工作中可能会遇到需要批量插入的场景, 而批量插入的过程具有 耗时长 的特点, 再此过程很容易出现程序崩溃的情况.为了解决插入大量数据插入后崩溃导致 已插入数据无法清理 及 未插入数据无法筛出 的问题, 需要编写一个脚本记录已插入和未插入的数据, 并可以根据记录

    2024年02月08日
    浏览(49)
  • spring事务和数据库事务是怎么实现

    Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接 Connection con = DriverManager.getConnection() 开启事务con.setAutoCommit(true/false); 执行CRUD 提交事务/回滚事务

    2024年02月13日
    浏览(47)
  • 数据库事务隔离级别

    读未提交、读已提交、可重复读、串行化 对事务中所有读写的数据加上读锁、写锁、范围锁。所以冲突的事务必须同步执行。 核心是只对事务中所有读写的数据加上读锁、写锁,不加范围锁。 相比于读已提交,由于对整个事务都加上了读锁,避免其他事务可以进行更新,进

    2024年02月08日
    浏览(45)
  • 【数据库】索引和事务

    目录 1.索引 1.1关于索引 索引是什么? 为什么要有索引? 索引的作用? 索引的优点和缺点? 1.2索引类型及创建 索引的分类 创建索引 1.3索引的数据结构 1.4索引覆盖 2.事务 2.1关于事务 概念 事务的使用 2.2事务的特性 2.3事务的隔离级别 read uncommitted read committed repaeteble read se

    2023年04月25日
    浏览(45)
  • 【MySQL数据库】事务

    事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体,一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时,事务是最小的控制单

    2024年02月09日
    浏览(42)
  • 数据库事务四大特性

    事务的4大特性(ACID):   原子性(Atomicity):   事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。   一致性(Consistemcy):   事务前后,数据库的状态都满足所有的完整性约束。   隔离性(Isolation):   并发执行的事务是隔离的,一个不影响一个

    2024年02月11日
    浏览(36)
  • 【数据库】索引与事务

    目录 1、索引 1.1、概念 1.2、索引的作用 1.3、 索引的缺点 1.4、数据库中实现索引的数据结构 1.4.1、B树/B-树 1.4.2、B+树   1.4.3、回表 1.5、使用场景 1.6、索引的使用  1.6.1、查看索引 1.6.2、创建索引  1.6.3、 删除索引 1.7、索引的分类 2、事务 2.1、为什么使用事务 2.2、事务的概

    2024年02月02日
    浏览(46)
  • QxOrm数据库事务

    数据库事务是作为单个逻辑工作单元执行的一系列操作: 如果在执行事务期间未发生错误,则系统 将提交 事务。 如果在事务期间发生错误,或者用户指定了 回滚 操作,则事务中的数据操作不会保留到数据库中。 概念 ​ 事务是一种机制、一个操作序列,包含了一组数据库

    2024年02月02日
    浏览(44)
  • 数据库事务

    目录 一.事务 1.为什么要存在事务 2.什么是事务 3.事务的特性(ACID) 4.MySQL中事务的使用 二.事务的隔离级别 1.什么是隔离级别 2.隔离级别的分类 3.不同隔离级别的现象 4.MySQL中设置隔离级别 5. 四种隔离级别和锁 1.READ-UNCOMMITED 2.READ-COMMITED 3.REPEATABLE-READ 4.SERIALIZABLE 刚开始我们拿一

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包