前言
之前在如何实现百万级数据从Excel导入中有提到一句不建议利用大事务进行一个错误处理。为什么不建议呢。本次来简单说一下。
实现百万级数据从Excel导入的文章:
实现百万级数据从Excel导入到数据库的方式
所谓大事务,通常指包含大量要执行的SQL语句和较长执行时间的事务。
这样的大事务往往会带来诸多问题。如下:
占用数据库连接:这一点很好理解。随着SQL语句的增多,执行时间也会相应延长。大型事务会持续占用数据库连接,由于数据库连接资源有限,长时间占用可能导致其他事务无法获取连接,从而降低系统的吞吐量,影响系统的可用性。
难以回滚:大事务涉及的数据量较大,回滚操作可能变得异常耗时。若事务需要回滚或失败,可能需要花费大量时间才能完全撤销所有修改,对数据库的可靠性和性能造成不利影响。
锁竞争:大事务可能引发繁琐的写操作,导致数据的锁定。这可能导致其他并发事务在访问相同资源时遭遇锁竞争,进而造成性能下降和延迟增加。长时间的锁定还可能导致其他事务的等待和阻塞。
日志空间占用:大事务可能产生大量日志,特别是 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操作、远程调用等)移到事务外部处理。
如有问题,欢迎加微信交流:w714771310,备注- 技术交流 。或微信搜索【码上遇见你】。
免费的Chat GPT可微信搜索【AI贝塔】进行体验,无限使用。
好了,本章节到此告一段落。希望对你有所帮助,祝学习顺利。