`
CtripMySQLDBA
  • 浏览: 57289 次
  • 来自: 上海
社区版块
存档分类
最新评论

MySQL 5.6性能提升的武器:Binlog Group Commit

阅读更多

在MySQL发布第一个5.6的GA版本时,我们对5.5.28 VS 5.6.10 做了个简单的sysbench性能对比测试(见之前的博客),测试是基于我们自己的标准配置(innodb_flush_log_at_trx_commit=1 & sync_binlog=1)。从测试结果来看,5.6的性能提升非常明显,但是我们当时并没有进行深入研究,定位到实际带来性能提升的最大原因。

后来有次读到一篇Dimitri Kravtchuk关于MySQL 5.6的Binlog Group Commit的文章(

http://planet.mysql.com/entry/?id=33502),我突然意识到这可能正是MySQL 5.6在我们的测试中有如此明显性能提升的原因,因此,我们进一步针对Binlog Group Commit的特性对5.5和5.6进行的对比测试。

 

关于 binary logs group commit:
a) 什么是 group commit
一般情况下,对于 Innodb 在每次事务提交时,需要通过 fsync 操作来告诉文件系统将可能在缓存中的数据刷新到磁盘,以此来保证数据持久化到磁盘中。
而对于文件系统来说, fsync 操作本身要消耗很多的 IO 资源,响应比较慢。所以,对于 IO 密集性的数据库来说,如果每一次事务提交都要进行一次 fsync 操作,那么 fsync 操作将会是数据库的一个很大的瓶颈,所以就有了 group commit 的概念。
也就是说当多个事务并发时,将多个在等待提交的 fsync 操作,合并到为仅调用一次 fsync 操作。,
b) Innodb 与 group commit
Mysql 从 5.0 开始由于支持“分布式事务和两阶段提交协议”(distributed transactions and Two Phase Commit /2PC),在代码实现时为了保证Binlog中的事务顺序和InnoDB Log(Transaction Log或者叫redo log)事务顺序一致,被动放弃了Group Commit。如果Binlog顺序不一致,那么备库就无法确保和主库有一致的数据。
这个问题直到 mysql 5.5 才开始部分修复,到 mysql 5.6 完全修复。在 mysql 5.5 中,只有当 sync_binlog = 0 时,才能使用 group commit,在 mysql 5.6中都可以进行 group commit。

 

测试环境:

16核+32G内存的HP580服务器,磁盘是4块15000转 150GB的Raid10

在同一台服务器上分别安装5.5.28和5.6.10进行对比测试。

 

测试场景:

对以下不同场合进行测试

  • log_bin=0/1
  • sync_binlog =0/1
  • 是/否有semi-sync的半同步从机

测试结果:

图例说明

  • mysql 5.5_11 tps 表示 mysql 5.5 的tps
  • mysql 5.5_11 sync 表示 mysql 5.5 每秒 fsync 的次数
  • mysql 5.5_11 groups 表示 mysql 5.5 的 group commit 的比例
  • 11 表示 log_bin 和 sync_binlog 参数的值
    其他以此类推 



 

 

 

 

  

 

 总结:

  1. Binary logs group commit 特性对 tps 的影响非常大,在 mysql 5.5 中使用 group commit 时的 tps 比不使用 group commit 时的 tps 要高将近 10倍的样子。
  2. Mysql 5.5 在使用 group commit 的情况下,tps 与 mysql 5.6 相比并不低,并且在某些时候可能要比 mysql 5.6 的 tps表现的还要好。
  3. 半同步复制情况下,由于 master 要确认 binglog 在 slave 上写入到中转日志,所以,如果从库的 IO 性能不好,或者网络有瓶颈的情况,会比较大的影响master的tps,在本测试中下降了将近 40%,但是就是在这种情况下,如果使用了 group commit,tps 还是要比不使用group commit时要高将近5倍。
  4. Group commit 的效果在一定范围内时会随着并发的加大,效果越好,tps也会相应的越高。

 

 

  • 大小: 27.3 KB
  • 大小: 31.9 KB
  • 大小: 31.6 KB
  • 大小: 26.4 KB
  • 大小: 28.9 KB
2
1
分享到:
评论

相关推荐

    数据架构设计与实践MySQL在高可用演进之路V2.pdf

    此外,主库实现了binlog group commit,从库支持基于事务的并行复制,显著提升了性能。代表产品包括MySQL Replication Manager、Orchestrator以及青云的Xenon(MySQL Plus)。 4. **第四代MySQL原生高可用:InnoDB ...

    MySQL数据库在高可用演进之路.pptx

    以MySQL 5.7为代表,增强了半同步复制,将主从的确认线程独立,实现了binlog group commit和基于事务的并行复制。这一代产品如MySQL Replication Manager和Xenon(青云开源),通过raft协议构建集群,利用GTID进行...

    MySQL并行复制(MTS)原理(完整版).doc

    MySQL通过设置`binlog_group_commit_sync_delay`和`binlog_group_commit_sync_no_delay_count`参数来控制组提交的同步行为,以优化性能。 在从库端,MySQL 5.7开始采用基于`last_committed`的分发策略,即根据事务...

    MySQL Relication技术深入 MySQL数据库 Relication新功能介绍 共18页.pptx

    **Binlog Group Commit**优化了事务提交,减少了磁盘I/O,提高了性能。 **Remote Binlog Backup**支持远程日志备份,增强了数据保护。 综上所述,MySQL Replication技术的这些新功能显著提升了数据复制的可靠性、...

    MySQL数据库在高可用演进之路.pdf

    MySQL 5.7增强了半同步机制,主库实现了binlog group commit,从库则支持基于事务的并行复制,显著提升了并行度。此外,还引入了raft共识算法来选举主节点,确保写服务的高可用。 4. **第四代MySQL原生高可用:...

    MySQL面试题和答案

    - MySQL 5.7实现了真正的多线程复制,基于group commit机制,可以在slave端通过多个worker线程并行执行事务,显著减少了复制延迟。 #### 数据恢复 - 当Master服务器意外宕机时,未成功传输至Slave的binlog数据需要...

    Oracle的努力.pdf

    5.6版本还引入了group commit功能,充分利用系统并行处理能力,这对于分布式存储系统尤其有利。 在商业策略上,Oracle通过MySQL团队开发的新功能保持了MySQL的开源特性,用户可以享受到类似商用产品的功能,而只需...

    深入浅出讲解MySQL的并行复制

    总的来说,MySQL的并行复制从最初的基于数据库到基于group commit,再到基于write-set,不断优化,以提供更高的并发性和更低的延迟。理解这些概念和技术,对于DBA在设计和优化复制架构时至关重要,有助于提升整体...

    mysql 5.5 配置文档

    MySQL 5.5 版本相对于之前的版本有显著的变化,特别是在性能优化和稳定性方面。配置文件是数据库高效运行的关键,因为它定义了服务器的行为和资源分配。以下是一些关键的配置参数及其作用: 1. `character-set-...

    浅析MySQL并行复制

    通过调整`binlog_group_commit_sync_delay`和`binlog_group_commit_sync_no_delay_count`参数,可以控制binlog写入和同步的时机,从而增加并行度,减少等待时间。 【并行复制的策略】 并行复制的关键在于事务之间...

    MySQL 5.7增强版Semisync Replication性能优化

    这样一来,即使在ack collector线程等待ACK时,dump线程也能继续发送下一组group commit的binlog事件,显著提升了TPS。 2. **支持在事务commit前等待ACK** MySQL 5.7引入了新的参数`rpl_semi_sync_master_wait_...

Global site tag (gtag.js) - Google Analytics