是这样的。之前公司赶工做的一个项目,做的有点糟糕。现在公司突然用起来了。最近发现数据量变大,大概 50w 级别的时候,凌晨 1 点的跑批,RDS 的 CPU 使用率长时间百分百。
原先这个跑批是有加事务的,有事务的情况下没有出现过 CPU 使用率那么高的情况。前两天这个跑批上的事务注解去掉了,然后 1 点到 3 点的跑批阶段 CPU 长期维持在 90~100 的使用率。
想问下这种情况事务的有无会对 RDS 的 CPU 使用率有影响吗。
原先一个事务每晚跑批的 insert 数量大概是在 30w 条左右
1
Samuelcc 2021-12-24 00:53:52 +08:00 via Android
用事务批量跑会快非常多,仅 io 次数就会少很多。
|
2
Leviathann 2021-12-24 01:24:50 +08:00 1
没事务就是一条一个事务
|
3
xuanbg 2021-12-24 08:24:52 +08:00 1
楼主你需要的不是事务,是批量插入! insert table (id, c1, c2, c3) values (1,x,y,z),(2,x,y,z),……
|
4
ragnaroks 2021-12-24 08:30:44 +08:00
上面说的都对,默认配置下,每次执行语句(提交)都是事务,batch insert 和 begin insert insert end 效果几乎相同(产生的日志和可回滚粒度不同)
|
5
cheng6563 2021-12-24 10:22:41 +08:00
另外,MySQL 驱动的 JDBC 内的批量插入功能,必须要在连接字符串上加参数 rewriteBatchedStatements=true ,默认情况下的批量插入就是摆设
|