欢迎投稿

今日深度:

MariaDB与MySQL的主从复制效率对比,mariadbmysql

MariaDB与MySQL的主从复制效率对比,mariadbmysql


TalkingData统计分析产品线中,多维度交叉计算大量使用了Bitmap结构,这些Bitmap以及Bitmap计算的中间结果(也都是Bitmap结构)都存放在MySQL主从集群中,并作读写分离。正常一个Bitmap结构,经过压缩以后大小在几KB到几MB之间。

从2015年开始,随着TalkingData覆盖智能设备的数量急剧增多,以及设备属性维度的增加,Bitmap的数量也在不断增大。我们发现MySQL的主从复制渐渐出现一定的性能瓶颈,从库会有一定的滞后。尤其是在周末或傍晚,游戏和应用的活跃高峰时段,从库的复制甚至会滞后6到12个小时,导致用户在界面看到的数据同样出现延迟,影响用户体验。在调整各种MySQL参数依然无法解决问题的情况下,我们也在考虑替代方案,其中就包括MariaDB,因为MariaDB的主从同步在多线程上支持的更好,其效率可能比MySQL高。

MariaDB 由MySQL的创始人MichaelWidenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。Oracle收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB目前主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。MariaDB在扩展功能、存储引擎(使用XtraDB来代替MySQL的InnoDB)以及一些新的功能改进方面都强过MySQL,而且从MySQL迁移到MariaDB也是非常简单的,因此,大型互联网用户以及Linux发行商越来越多的抛弃MySQL,转投MariaDB阵营。甚至在2013年的时候,谷歌高级系统工程师也透露说,谷歌的开源数据中心正在从MySQL迁移至MariaDB。维基百科、RedHat、SUSE也都逐步迁移到了MariaDB。

MariaDB目前实现以下两种并行模式:

1、 乐观模式

从10.1.3开始支持,事物总是并行执行,如果有冲突,后面的语句回滚,再重新执行。Myisam、DDL操作不支持并行。

2、 保守模式

1)基于组提交的有序并行

组提交默认开启,同时提交的事务可以并行复制,也可以通过binlog_commit_wait_usec、binlog_commit_wait_count这两个参数控制事务提交,这两个参数的意思是允许事务等待binlog_commit_wait_usec指定的毫秒直到有binlog_commit_wait_count个事务一起提交。

2)基于gtid_domain_id的乱序并行

如果两个会话的gtid_domain_id不同,则任务可以并行,比如会话A在表A上操作索引,会话B没有操作A表,则这两个回话可以并行复制,多用于DDL及多主复制。

例如:

Session A:
SET SESSION gtid_domain_id=1
ALTER TABLE t ADD INDEX myidx(b)
SET SESSION gtid_domain_id=0

Session B:
delete from B where id=?;

于是我们测试了一下二者的复制效率。

【测试环境】

内存64G,双CPU Intel(R)Xeon(R) CPU E5-2620 v2 @ 2.10GH,内核:2.6.32-358.el6.x86_64,OS:CentOS release 6.5。

参数:

innodb_buffer_pool_size = 10G
sync_bin_log=0
innodb_flush_log_at_trx_commit=2
log_slave_updates=off

主库 :10.0.19-MariaDB-logSource distribution

从库1:10.0.19-MariaDB-logSource distribution

从库2:MySQL 5.6.22-logSource distribution

【测试方法】

3个实例在同一主机,先在主库并行执行10个任务,运行1小时后停止,然后分别在MariaDB及MySQL从库开启复制。

【测试结果】

1、 开启组提交,并设置相关参数,观察从库执行效率。

binlog_commit_wait_usec=10000
binlog_commit_wait_count=4

每秒insert数对比为:

CPU Idle的对比为:

结论:

MariaDB复制效率是MySQL的2倍。

2、 复制参数对主库效率的影响

1)设置binlog_commit_wait_count=0,此时binlog_commit_wait_usec被忽略,主库每秒可以完成25000次insert操作。

2)设置binlog_commit_wait_count=12,binlog_commit_wait_usec=10000,主库每秒可以完成1000次insert操作。

3)设置binlog_commit_wait_count=8,binlog_commit_wait_usec=10000,主库每秒可以完成20000次insert操作。

4)设置binlog_commit_wait_count=8,binlog_commit_wait_usec=100000,主库每秒可以完成20000次insert操作。

结论:

主库开启了10个并行任务,测试结果发现当binlog_commit_wait_count=12时,对插入效率影响非常大,而binlog_commit_wait_count=8时,影响可以接受。而binlog_commit_wait_usec设置为10毫秒或者100毫秒对整体效率影响不大。binlog_commit_wait_count不能超过实际并行事务数,否则严重影响性能。

从测试中可以看出,MariaDB 在主从复制性能上大大优于MySQL。而且,当我们在生产环境中把MySQL切换到MariaDB以后(因为MariaDB对MySQL的兼容性,切换非常顺利),发现不仅主从复制性能提升很大,普通读写性能也有一定程度的提升,主从复制延迟的问题得到解决。



更多内容,请关注我的知乎专栏:【峰言峰语


www.htsjk.Com true http://www.htsjk.com/mariadb/31214.html NewsArticle MariaDB与MySQL的主从复制效率对比,mariadbmysql TalkingData统计分析产品线中,多维度交叉计算大量使用了Bitmap结构,这些Bitmap以及Bitmap计算的中间结果(也都是Bitmap结构)都存放在MySQL主从...
相关文章
    暂无相关文章
评论暂时关闭