问题:当开启binlog时,导致group commit失效
prepare_commit_mutext
write and fsync binlog
commit
如果一个事务A在commit阶段,可能会持有prepare_commit锁,其他事务将被阻塞,直到获得锁才能写binlog,这样
传统的group commit就被打破了。导致一次事务的提交可能会产生3次fsync,大大降低了系统的性能
解决:http://kristiannielsen.livejournal.com/12810.html
1. prepare阶段,第一次fsync(),对innodb trx log做group commit
2.将事务加入队列,确定提交顺序
3.队列头的事务在获得binlog的控制后,将所有事务写入binlog,并进行第二次fsync,并按顺序运行每个事务的fast part,也就是在内存中操作的部分
4.运行事务提交时的slow part ,第3次fsync。