前天同事问了个问题,今天又再翻了下group commit。关于这个话题Kristian Nielsen有一个很详尽的系列文章(http://kristiannielsen.livejournal.com/12254.html), 有四个页面,文中有链接。这里列出一些细节,主要是对上面文章补充一下。
Q:什么是group commit。
A:1) 简单说就是:好几个线程写文件,然后一个线程fsync;
2) 只有事务日志(ib_logfile)用到;
3) 注意是多个线程(多用户)。一个线程在一个事务过程中若出现多次写事务日志,是不能一起提交的。
Q: 既然是多个线程,那怎么决定由哪个线程去”commit”
A:其实每个线程都会试着去fsync。成功fsync之后线程会修改log_sys->written_to_all_lsn。 另外一个线程在fsync之前若判断log_sys->written_to_all_lsn大于自己的lsn,说明自己要作的事儿已经被别的线程做掉了,直接返回(group commit获益)。
Q:group commit怎么保证事务日志顺序和bin-log顺序一致。
A:这个问题是在Kristian Nielsen那篇文章中纠结最多的。目前的做法,是在写binlog前的prepare阶段加了个锁,这个锁直到binlog写完,然后将新的binlog位置填到trx->mysql_log_offset才解开。因此两个日志上的事务顺序是保证一致的。
在这个机制下,binlog是无法实现group commit的,所以直到最新的5.6版本中的log_xid函数的注释中依旧写着”todo: group commit”。
(补充说明:Percona 5.5.18版本以后已经有binlog group commit的功能)
分享到:
相关推荐
MySQL内核 InnoDB存储引擎 卷1 超高清 带书签 pdf文档
MySQL 技术内幕:InnoDB存储引擎
最近在学习MySQL技术内幕 InnoDB存储引擎 第2版,整理了一些文档分享出来,同时也方便以后查看。若有不当之处,烦请批评指正。 1. MySQL体系结构和存储引擎 2. InnoDB存储引擎 2.1 InnoDB体系结构 2.2 ...
《MySQL内核:InnoDB存储引擎 卷1》由资深MySQL专家,机工畅销图书作者亲自执笔,在以往出版的两本InnoDB介绍性图书的基础之上,更深入地介绍InnoDB存储引擎的内核,例如latch、B+树索引、事务、锁等,从源代码的...
MYSQL内核:INNODB存储引擎 卷1.part2.rar
MySQL技术内幕InnoDB存储引擎-读书笔记.pdf
MySQL技术内幕:InnoDB存储引擎.docx
可作为深入理解MySQL InnoDB存储引擎实现细节的研究学习。
《MySQL技术内幕:InnoDB存储引擎》是国内目前唯一的一本关于InnoDB的著作,由资深MySQL专家亲自执笔,中外数据库专家联袂推荐,权威性毋庸置疑。内容深入,从源代码的角度深度解析了InnoDB的体系结构、实现原理、...
MYSQL内核:INNODB存储引擎 卷1.part3.rar
MYSQL内核:INNODB存储引擎 卷1.part1.rar
第一章:mysql存储引擎1.innodb存储引擎支持事务;行锁设计;支持外键;支持非锁定读。4种事务隔离级别,默认为repeatable,同时使用next-k
MySQL Innodb 索引原理详解
MySQL内核_InnoDB存储引擎(卷1)_753281.pdf
《高性能mysql(第3版)》是最具代表性的进阶书籍没有之一,它是 MySQL 领域的经典之作,内容涵盖 MySQL 架构和历史,性能分析,优化,复制、备份和恢复,高可用与高可扩展性。值得每一个后端工程师多次阅读,无论是...
主要介绍了MySQL启动报错问题InnoDB:Unable to lock/ibdata1 error,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
mysql 5.6 新特性 innodb
MySQL体系结构及原理(innodb)图文完美解析
MySQL内核 INNODB存储引擎-卷1-高清-完整目录-2014年5月