控制mysqldump导出的SQL文件的事务大小
背景 今天群里有人问mysqldump出来的insert语句,是否可以按每 10 row 一条insert语句的形式组织。 思考1: 参数--extended-insert 回忆过去所学: 我只知道有一对参数 --extended-insert(默认值) 表示使用长 INSERT ,多 row 在合并一起批量 INSERT,提高导入效率 --skip-extended-insert 一行一个的短INSERT 均不满足群友需求,无法控制按每 10 row 一条 insert 语句的形式组织。 思考2: “避免大事务” 之前一直没有考虑过这个问题。这个问题的提出,相信主要是为了“避免大事务”。所以满足 insert 均为小事务即可。 下面,我们来探讨一下以下问题: 什么是大事务? 那么 mysqldump 出来的 insert 语句可能是大事务吗? 什么是大事务? 定义:运行时间比较长,操作的数据比较多的事务我们称之为大事务。 大事务风险: 锁定太多的数据,造成大量的阻塞和锁超时,回滚所需要的时间比较长。 执行时间长,容易造成主从延迟。 undo log膨胀 避免大事务:我这里按公司实际场景,规定了,每次操作/获取数据量应该少于5000条,结果集应该小于2M mysqldump出来的SQL文件有大事务吗? 前提,MySQL 默认是自提交的,所以如果没有明确地开启事务,一条 SQL