大事务拆分原创
金蝶云社区-CM9527
CM9527
2人赞赏了该文章 1,803次浏览 未经作者许可,禁止转载编辑于2022年01月11日 15:36:06
summary-icon摘要由AI智能服务提供

本文讨论了大事务的定义、影响及处理方法。大事务涉及多表操作,一旦某个操作超时或缓慢,会锁定所有相关表,影响性能。以银行转账为例,必须确保所有步骤同时成功。大事务可拆分为小事务以快速释放锁,避免锁等待超时,提高系统吞吐率。同时,建议将查询语句放在事务外处理。

    大事务指的是我们有一个业务,它设计了很多操作,所有的操作要么全部成功,要么全部失败,不能一部分操作成功,一个部分操作失败,当这些操作涉及过多的数据库表,如果有一个sql超时,或者执行缓慢,会把事务里面涉及到的表都锁住,性能严重受到影响。


        举个例子,最常见的例子是银行转账:

  •   需求

      张三向李四转账200,李四的余额增加200,张三的余额减少200

  • 操作步骤

        1. 检查张三账户,进行余额扣减

        2.银行调用转账接口

        3.检查李四账户,余额增加

这个转账的动作,一定是要1,2,3步骤同时成功,才能算转账这个动作成功,只要有一个步骤失败,转账操作就是失败,如果这三个步骤,设计到很多数据库表的操作,如果有一个sql超时,没有及时释放表锁,就会导致其他客户端的锁等待超时,整个系统都会受到影响。


 事实上,事务的目的是为了保证数据的原子性,准确性,那么也就是说,只要你需要保证的数据做到了,就可以进行事务提交了。所以,可以将大事务拆小,即保证最小事务的执行即可。如:更新一个用户的会员状态,那么只需要查出相关信息,更改状态,写入相应记录,该事务即可提交。

    1. 将大事务拆小后,就可以做到快速释放锁的作用,从而避免了其他客户端的锁等待超时问题了。

    2. 把查询相关的语句,放到事务外处理

       拆分事务的目的是为了快速释放锁,避免死锁,提高程序的吞吐率

图标赞 2
2人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!