mysql原理~二阶段提交
一 简介:今天咱们来聊聊 mysql 两阶段提交
二 事务过程
perpare-commit 两个过程
1 perpare阶段 redo日志
1.设置undo state=TRX_UNDO_PREPARED; //trx_undo_set_state_at_prepare调用
2.刷事务更新产生的redo日志;【步骤1产生的redo日志也会刷入】
2 commit阶段 binlog日志
1.将事务产生的binlog写入文件,刷入磁盘;
2.设置undo页的状态,置为TRX_UNDO_TO_FREE或TRX_UNDO_TO_PURGE; //标记可以清理回滚段
3.记录事务对应的binlog偏移,写入系统表空间;
三 故障处理流程(只考虑意外down机导致的缓存丢失情况)
1.prepare阶段,redo log落盘前,mysqld crash
事务回滚,没有相关binlog和redo
2.prepare阶段,redo log落盘后,binlog落盘前,mysqld crash
事务回滚,可以搜集到相关redo log,没有相关binlog
3.commit阶段,binlog落盘后,mysqld crash
事务重做,binlog和redo log都有
总结: 对于异常的xa事务,若binlog已落盘,则事务应该提交;binlog未落盘,则事务就应该回滚
四 相关参数
1 innodb_flush_log_at_trx_commit =》redo log
0 每隔1s,每个事务提交,会写入mysqld自己的log buffer中,每隔1秒将log buffer的内容写到log file中,然后flush到磁盘。
1 每次commit时,刷redo日志,确定fsync刷盘
2 当为2时,每个事务提交,就会被写到log file(OS cache),但是log file每隔1秒才会被flush到磁盘,当操作系统crash或断电时,此时至多丢失1秒的事务。
0和2的区别是,
为0时,mysqld或操作系统crash则会导致1秒内的事务被丢失。
为2时,当操作系统crash或断电会导致1秒内的事务被丢失。
2 sync_log
0 由操作系统自己决定什么时候刷新缓存到持久化设置
1 表示每次commit时binlog都会fsync。
N 表示每N次commit时binlog都会fsync。
建议:保险设置为双1,如果为了提高性能,设置为2 N N不宜太大
五 暂时先到这里
mysql原理~二阶段提交的更多相关文章
- Mysql事物与二阶段提交
1.事务的四种特性(ACID) 事务可以是一个非常简单的SQL构成,也可以是一组复杂的SQL语句构成.事务是访问并且更新数据库中数据的一个单元,在事务中的操作,要么都修改,要么都不做修改,这就是事务 ...
- RocketMQ源码分析之RocketMQ事务消息实现原理上篇(二阶段提交)
在阅读本文前,若您对RocketMQ技术感兴趣,请加入 RocketMQ技术交流群 根据上文的描述,发送事务消息的入口为: TransactionMQProducer#sendMessageInTra ...
- 使用golang理解mysql的两阶段提交
使用golang理解mysql的两阶段提交 文章源于一个问题:如果我们现在有两个mysql实例,在我们要尽量简单地完成分布式事务,怎么处理? 场景重现 比如我们现在有两个数据库,mysql3306和m ...
- InnoDB事务的二阶段提交
问题: 什么是二阶段提交 为什么需要二阶段提交 二阶段提交流程 什么是二阶段提交? ### 假设原来id 为10 的记录age 为5 begin; update student set age = 1 ...
- count(*)实现原理+两阶段提交总结
count(*)实现原理 不同引擎的实现: MyISAM引擎把表的总行数存在了磁盘上,执行COUNT(*)就会直接返回,效率很高: InnoDB在count(*)时,需要把数据一行一行的从引擎里面取出 ...
- 分布式事务(一)两阶段提交及JTA
原创文章,同步发自作者个人博客 http://www.jasongj.com/big_data/two_phase_commit/ 分布式事务 分布式事务简介 分布式事务是指会涉及到操作多个数据库(或 ...
- 两阶段提交及JTA
两阶段提交及JTA 分布式事务 分布式事务简介 分布式事务是指会涉及到操作多个数据库(或者提供事务语义的系统,如JMS)的事务.其实就是将对同一数据库事务的概念扩大到了对多个数据库的事务.目的是为了保 ...
- flink-----实时项目---day07-----1.Flink的checkpoint原理分析 2. 自定义两阶段提交sink(MySQL) 3 将数据写入Hbase(使用幂等性结合at least Once实现精确一次性语义) 4 ProtoBuf
1.Flink中exactly once实现原理分析 生产者从kafka拉取数据以及消费者往kafka写数据都需要保证exactly once.目前flink中支持exactly once的sourc ...
- innodb二阶段日志提交机制和组提交解析
前些天在查看关于innodb_flush_log_at_trx_commit的官网解释时产生了一些疑问,关于innodb_flush_log_at_trx_commit参数的详细解释参见官网: htt ...
随机推荐
- 一点点linux系统的学习心得
我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作( ...
- BZOJ2157旅游——树链剖分+线段树
题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路 ...
- NodeJs加载站点的所有页面不存在则404
演示 链接:https://pan.baidu.com/s/1TZ351m3wUWZpq46qGbejjg 密码:ijj5 代码: var http = require("http" ...
- 自学工业控制网络之路1.3-典型的现场总线介绍FF
返回 自学工业控制网络之路 自学工业控制网络之路1.3-典型的现场总线介绍FF 1994年6月,ISP和WORLDFIP合并成立现场总线基金会FF.1998年,FF基金会开发了HSE 10/100Mb ...
- GDB最常用的命令
为了调试我的指针LCT--我学会了如何使用gdb! 粘一个常用命令表(原文地址:https://blog.csdn.net/tzshlyt/article/details/53668885) gcc ...
- Change upload file limit in specified Webapllication in SharePoint (PowerShell)
http://gallery.technet.microsoft.com/office/Change-upload-file-limit-89502ff2 http://sharepointrela ...
- 小trick总结
一个圆上的整点数量不会很多.(Cf AIM TR 5 F) 二分图完美匹配求字典序最小的方案:先一遍匈牙利求出任意一组完美匹配.再跑一遍逐位确定,要求不能修改编号比它小的匹配.(LG 4100) 如果 ...
- bzoj5281/luogu4377 Talent Show (01分数规划+背包dp)
就是01分数规划的思路,只不过当把w[i]-r*t[i]>0的选完以后如果w值还没达到要求,那就再01背包dp一下就好了(dp时w值>W的时候就存在W里就不会爆内存了). (跑得很慢..大 ...
- JS数组冒泡排序&去重
冒泡排序: var a = [2,1,4,3,6,5]; for(var d = 0 ; d< a.length; d++){ for(var b = d+1; b < a.length; ...
- vue router.push(),router.replace(),router.go()
1.router.push(location)=====window.history.pushState 想要导航到不同的 URL,则使用 router.push 方法.这个方法会向 history ...