为什么建议MySQL innodb默认开启autocommit

一、 MySQL innodb默认启用autocommit的优缺点

  1. 优点:
    a) 避免执行SQL后没提交而导致其它会话看不到数据,甚至夯住;
    b) 避免不可控的大事务发生;
    c) 避免MySQL 5.7多线程并发复制时因主库某个SQL没有显性提交,导致从库其它线程一直等待提交,从而导致从库延迟越来越大,复制线程夯住,且故障原因很难排查;
    d) 减少数据库异常宕机后,数据库recover的时间,减少数据丢失。
  2. 缺点:
    在做变更时,执行的SQL语句会立刻生效,如有SQL语句变更错误,导致无法用rollback立刻回滚。
    解决方案:
    a) DBA在做变更时,先执行set autocommit=0; 将会话级的自动提交取消,检查变更条数与预期相同时再显式提交commit;
    b) 程序中的简单事务可用begin显式开启,如:begin;SQL语句…;commit;或在程序中先执行set autocommit=0;待该事务commit提交完毕后再设置set autocommit=1;
    c) 程序中如嵌套包含多个事务,可在程序中先执行set autocommit=0;待这些事务按预定的顺序commit提交完毕后再设置set autocommit=1。
    二、 MySQL innodb关闭autocommit的优缺点
  3. 优点:
    a) DBA在做变更时,如变更条数与预期不符方便用rollback回滚;
    b) 程序中如嵌套包含多个事务时,可方便控制事务的提交顺序。
  4. 缺点:
    a) 执行SQL后没提交会导致其它会话看不到数据,甚至夯住;
    b) 可能会有不可控的大事务发生;
    c) MySQL 5.7多线程并发复制时因主库某个SQL没有显性提交,导致从库其它线程一直等待提交,从而导致从库延迟越来越大,复制线程夯住,且故障原因很难排查;
    d) 数据库异常宕机后,数据库recover的时间与数据的丢失量不可控,与最近一次commit有关。
    e) 如执行了很多SQL后需要回滚,则回滚时间可能会很长,很可能导致数据库夯住。
    通过以上内容的对比,显然开启自动提交autocommit更为合适。另外默认设置自动提交的数据库并非只有MySQL数据库,大名鼎鼎的SQLServer以及后来居上的PostgreSQL、GreenPlum数据库默认也都是自动提交。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值