V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Renco
V2EX  ›  程序员

MySQL 事务提交和单条单条 SQL 执行 是否有性能影响

  •  
  •   Renco · 2021-12-24 00:51:34 +08:00 · 1776 次点击
    这是一个创建于 1058 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是这样的。之前公司赶工做的一个项目,做的有点糟糕。现在公司突然用起来了。最近发现数据量变大,大概 50w 级别的时候,凌晨 1 点的跑批,RDS 的 CPU 使用率长时间百分百。

    原先这个跑批是有加事务的,有事务的情况下没有出现过 CPU 使用率那么高的情况。前两天这个跑批上的事务注解去掉了,然后 1 点到 3 点的跑批阶段 CPU 长期维持在 90~100 的使用率。

    想问下这种情况事务的有无会对 RDS 的 CPU 使用率有影响吗。

    原先一个事务每晚跑批的 insert 数量大概是在 30w 条左右

    5 条回复    2021-12-24 10:22:41 +08:00
    Samuelcc
        1
    Samuelcc  
       2021-12-24 00:53:52 +08:00 via Android
    用事务批量跑会快非常多,仅 io 次数就会少很多。
    Leviathann
        2
    Leviathann  
       2021-12-24 01:24:50 +08:00   ❤️ 1
    没事务就是一条一个事务
    xuanbg
        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),……
    ragnaroks
        4
    ragnaroks  
       2021-12-24 08:30:44 +08:00
    上面说的都对,默认配置下,每次执行语句(提交)都是事务,batch insert 和 begin insert insert end 效果几乎相同(产生的日志和可回滚粒度不同)
    cheng6563
        5
    cheng6563  
       2021-12-24 10:22:41 +08:00
    另外,MySQL 驱动的 JDBC 内的批量插入功能,必须要在连接字符串上加参数 rewriteBatchedStatements=true ,默认情况下的批量插入就是摆设
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2800 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:49 · PVG 17:49 · LAX 01:49 · JFK 04:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.