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

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

从2015年开始,随着TalkingData覆盖智能设备的数量n D c z M H f y $急剧增多,以及设备属性维度的增加,Bitmap的数量也在不断增大。我们发现MySQL的主从复制渐s ) ; ! u . 8 Q渐出现一定的性能瓶颈,从库会有Q O 0 A一定的滞后。尤其是在周末或傍晚,游戏和应用的活跃高峰时段,S O 1 L j = d $从库的复制甚至会滞后6到12个小时,导致用户在界面看到的数据同样出现延迟,影响用户体验。在调整各种MySQL参数依然无法解决问题的情o 0 J { 2 R P 4 k况下,我们也在考虑替代方案,其中就包括MariaDB,因为MariaDB的主从同步在多线程上支持的更好,其效K V ( I I g率可能比MySQL高。

MariaDB 由MySQL的创始人Michael Widenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。Oracle收购了MySQL后,有将MySQL闭{ ) L源的潜在风险,因此社区采用分支的方式来避~ u n h v开这个风险。

MariaDB目前主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MK ^ ) %ySQL,包括API和命令行,使之能轻松成为MySQL的. b ~代替品R . C r a d $。MariaDB在扩展功能、存储引擎(使用XtraDB来代替MySQL的InnoDB)以及一些新的功能改进方面都强过MySQL,而且从MySQL迁移到MariaDB也是非常简单的,因此,大型互联网用户以及Linux发行商越来越多的抛弃M p ^ 1 wMySQL,转投MariaDB阵营。甚至在2013年的时候,谷歌高级系统工程师也透露说,谷歌的开源数据中心正在从MySQL迁移至MariG q / iaDB。维基百科、Red
Hat、SUSEs ~ M b o m e 5也都逐步迁移到了MariaDB。

MarP - P AiaDB目前实现以下两种并行模式

1、乐观模式

从10.1.3开始支持,事物总是并行执行,如果有冲突,后面的语I t S [ ? q S V )句回滚,再重新执行。Myisam、DDLY q C - l G r操作不支持并行。

2、保守模式

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

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

  • 2)基于gtid_domai. j $ j yn_id的乱序并行

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

例如:

Se* y 9 ` M O : a Zssion A:
SET SESSION / # a @ s n R s gtid_domain_id=3 } 6 k e h W C 61
ALTER TABLE t ADr T u a A } V $ .D INDEX myidx(b)
SET SESSION gtid_domain_id=0
Session B:P c 2 g j
delet; B Me from B where id=?;

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

【测试环境】

内存- y O u D A64G,双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
syn( : F w , p h P ,c_bin_log=0
innodb_flush_log_at_trx_commit=2
log_slave_u, a c 0 | &pdates=off

**主库 :10.0.19-MariaDBF q R 1-log
Source distribution**

**从库1:10.0.19-MariaDB-log
Source distribution**

**从库2:MySQL 5.6.22-log
Sourc- % z 8e distribution**

【测试方法】

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

【测试结果】

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

binlog_co| J d  d N 4 Gmmit_wait_usec=10000
binlog_commit_wait_count=4

每秒insert数对比为:

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

CPU Idle的对比为:

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

结论

MariaDB复制效率是9 O Z 8 E a .MySQL的2倍。

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

  • 1)设置binlog_commit_wait_count=0,此时binlog_commit_wait_uG / ^ j % C h Dsec被忽略,主库每E V w }秒可以完成25000次insert操作。
  • 2)设置binlog_commN $ Y z n , %it_wait_] = ocount=12binl$ Q Q Y * ~ Gog_commit_wait_usec=10000,主库每秒可以完成1000次insert操作。
  • 3)设置binlog_commit_wait_= % z ( ` 8 Wcount=8binlog_commit_wait_usec=10000,主库每秒可以完成20000次insert操作。
  • 4)设置binlog_commit_wai0 ; y X w R @ jt_count=8binlog_commz [ T } e 0it_wait_usec=100000,主库每秒可以完成20000次insek C 2 1rt操作。E ^ ] m m 7 ? F

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

结论

主库开启了10个并行任务,测试结果发现当binlog_commit_wait_count=12时,对插入效率影响非常g G 7 d h a 6大,f t W # }binlog_commit_wait_count=8时,影响& J L 6 i x t |可以接受。而binlog_commit_wait_usec设置为10毫秒或者100毫秒对整c ) % r 0体效率影响不大。bit F c q 7nlog_commit_wait_count不能超过实际并行事务数,否则严重影响性能

从测试中可以看出h 2 U i { T R W 5,MariaDB 在主从复制性能上大大优于MySQL。而且,当我们在生产环境中把MySQL切换到Mar1 @ V N k [iaDB以后(因为MariaDB对My( T h a o 0SQL的兼容性,切换非常顺利),发现不仅主从复制性能提升很大,普通读写性能也有一定程度的提升,主从复制延迟的问题得到解决