在实践中MYSQL数据库大事务(即扫描行数大小)高会引发性能问题。
事务是一个最小的不可在分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务是一个最小的工作单元)
一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。
事务的特征:
通常相关指标为单次执行影响行数不得超过100000,总执行次数不得超过200次。
单次执行影响行数超过100000,总执行次数超过200次。增删改操作会生成UNDO LOG,大量数据操作将生成大量的UNDO LOG,所在表上的其他查询及DML也将会受到影响,尤其是大事务发生回滚将会耗时漫长,严重影响业务。同时SQL语句影响行数过多,容易造成从库延迟过大,甚至无法追平主库;更新记录时间长,锁持有时间长,容易引发行级锁阻塞;
解决方案:进行记录控制,减少DML影响行数。对于高并发表的记录更新,单次更新10万行的还是太大了,建议将单事务更新控制在1000行以内,单事务更新时间控制在1秒以内。
更多内容请关注公众号“测试小号等闲之辈”~