MySQL执行大事务会存在什么问题?

数据库 MySQL
拆分事务,将大事务分解为多个小事务。将不需要在事务中执行的操作(如读取、内存计算、I/O操作、远程调用等)移到事务外部处理。

前言

之前在如何实现百万级数据从Excel导入中有提到一句不建议利用大事务进行一个错误处理。为什么不建议呢。本次来简单说一下。

图片

所谓大事务,通常指包含大量要执行的SQL语句和较长执行时间的事务。

这样的大事务往往会带来诸多问题。如下:

  1. 占用数据库连接:这一点很好理解。随着SQL语句的增多,执行时间也会相应延长。大型事务会持续占用数据库连接,由于数据库连接资源有限,长时间占用可能导致其他事务无法获取连接,从而降低系统的吞吐量,影响系统的可用性。
  2. 难以回滚:大事务涉及的数据量较大,回滚操作可能变得异常耗时。若事务需要回滚或失败,可能需要花费大量时间才能完全撤销所有修改,对数据库的可靠性和性能造成不利影响。
  3. 锁竞争:大事务可能引发繁琐的写操作,导致数据的锁定。这可能导致其他并发事务在访问相同资源时遭遇锁竞争,进而造成性能下降和延迟增加。长时间的锁定还可能导致其他事务的等待和阻塞。
  4. 日志空间占用:大事务可能产生大量日志,特别是 binlog。当单个事务超出最大允许的Binlog文件大小限制(max_binlog_cache_size),会出现错误:Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again

解决方案:

拆分事务,将大事务分解为多个小事务。将不需要在事务中执行的操作(如读取、内存计算、I/O操作、远程调用等)移到事务外部处理。


责任编辑:武晓燕 来源: 码上遇见你
相关推荐

2022-06-27 16:12:48

CSS像素前端

2020-06-15 08:06:25

ES数据

2010-09-02 14:36:44

Linux命令行

2019-04-26 13:01:16

ServiceMesh微服务架构

2010-05-13 09:59:50

MySQL数据库

2024-10-15 09:25:08

JDBCMybatis数据库

2022-04-04 07:51:32

Web框架

2021-07-16 06:56:50

边缘计算分布式

2021-03-23 18:32:46

JavaScript编程开发

2021-10-16 12:52:17

Builder模式生成器

2020-05-22 10:02:43

Python语言编程

2024-09-12 09:34:32

2021-02-08 08:04:52

JavaScript语言OOP

2024-07-02 12:25:01

2011-11-30 15:28:32

在线协作系统

2021-05-11 10:56:07

DevOps开发工具

2012-07-30 09:49:44

云计算

2015-02-28 10:11:51

2024-11-04 10:28:08

2019-08-28 07:45:45

数据存储层多线程
点赞
收藏

51CTO技术栈公众号