MySQL innodb的group commit失效问题

来源:互联网 发布:超人哲学 知乎 编辑:程序博客网 时间:2024/05/05 16:20


问题:当开启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。




原创粉丝点击