组提交丶二阶段提交及Mysql双1操作

组提交:
优点:每条SQL刷写一次磁盘肯定是非常影响效率的,所以MySQL引入了组提交的概念,用时间和数量来控制,让一次提交尽可能多附带一些数据进行提交。从而达到少量的刷写磁盘的效果。对于脏数据及数据不一致问题,InnoDB登引擎都实现了,如果要查询或修改数据,会优先查询缓存。
缺点:如果100个事务才刷写一次磁盘,如果99个事务的时候,重启,断网,断电了,数据将会丢失。

双1操作:

sync_binlog=0,表示每次提交事务都只write,不fsync(刷写磁盘)
sync_binlog=1,表示每次提交事务都fsync(刷写磁盘)
sync_binlog=N,表示每次提交事务都write,但积累N个事务后才fsync(刷写磁盘)

不建议设置为0

innodb_flush_log_at_trx_commit:每一次事务提交是否把日志写入磁盘
0:写入到应用分配内存,一秒钟刷写一次
1:每次事务刷写一次
2:写入到os(系统)内存(缓存),一秒钟刷写一次

建议设置为2,这样可以保证,服务挂了,服务(应用)内存被回收,也可以在重启后从系统缓存中恢复。

二阶段提交:
二阶段提交图解:
在这里插入图片描述
在Mysql中的二阶段提交:
说到Mysql中的二阶段提交,就不能不提2个日志文件:
redolog:InnoDB引擎中,为了防止断电,在事务操作过程中,无论提交与否,都会进行记录,好用来恢复。
binlog:Mysql中,用来备份SQL语句的,只有在事务提交后,才会记录,
为了保证数据的一致性。采用二阶段提交协议:
redolog中有记录处于prepare阶段,但binlog中没有记录,表示事务未提交
redolog中有记录处于prepare阶段,binlog中有记录,表示事务需要重新恢复,因为binlog已记录,如果开启主从备份,从库很可能已经备份,所以需要主库中重新commit事务,并将redolog修改为commit阶段。

ps: 而恰巧二阶段提交也是咱们分布式事务中的核心思想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值