MySQL 5.6, 5.7并行复制测试(r12笔记第9天)

  
对于主从延迟,其实一直以来就是一个颇有争议的话题,在MySQL阵营中,如果容忍一定的延迟的场景,通过主从来达到读写分离是个很不错的方案,但是延迟率到底有多高可以接受,新版本中的并行复制效果怎么样,在不同的版本中是否有改变,我们能否找到一些参考的数据来佐证,这一点上我们可以通过一些小测试来说明。

   首先来为了基本按照同一个参考标准,我们就在同一台服务器上安装了5.6,5.7的MySQL服务,另外一台服务器上搭建了从库。

   数据库版本为5.6.23 Percona分支, 5.7.17 MySQL官方版本

服务器上安装了pt工具用来检测主从延迟,安装了新版本的sysbench来做加压测试。

      主库:  10.127.128.227   RHEL6U3  32G  R710
      从库:  10.127.128.78    RHEL6U3  32G   R710      为了基本能够达到同一个基准啦进行测试,我先启动5.6的数据库服务,测试完毕,启动5.7的服务。避免多实例的并行干扰。

初始化数据采用了类似下面的脚本,5.6, 5.7版本中都差不多。

创建了10个表,然后插入了500万数据来测试。

sysbench /home/sysbench/sysbench-1.0.3/src/lua/oltp_read_write.lua
--mysql-user=root --mysql-port=3308
--mysql-socket=/home/mysql_5.7.17/mysql.sock --mysql-host=localhost
--mysql-db=sysbenchtest --tables=10 --table-size=5000000 --threads=50 prepare

加压测试使用如下的sysbench脚本,持续时间300秒sysbench /home/sysbench/sysbench-1.0.3/src/lua/oltp_read_write.lua
--mysql-user=root --mysql-port=3308
--mysql-socket=/home/mysql_5.7.17/mysql.sock --mysql-host=localhost
--mysql-db=sysbenchtest --tables=10 --table-size=5000000 --threads=50
--report-interval=5 --time=300 run查看主从延迟,使用pt-heartbeat来完成。

开启后台任务:

pt-heartbeat h='10.127.128.78',u='pt_checksum',p='pt_checksum',P=3307
-D sysbenchtest --create-table --interval=1 --update --replace --daemonize开启主从延迟检测:

pt-heartbeat h='10.127.128.78',u='pt_checksum',p='pt_checksum',P=3308 -D
sysbenchtest --table=heartbeat --monitor --master-server-id=3308
--frames=5s --interval=5 
因为主从复制在5.6, 5.7还是存在一定的差别,我们就分别测试单线程和多线程复制的差别和改进点。

并行复制的基本配置

5.6 开启并行复制

mysql>stop slave;
mysql>set global slave_parallel_workers=8;
mysql>start slave;

5.7 开启并行复制

其中值得一提的是5.7做了一些改进,slave-parallel-type= DATABASE /LOGICAL_CLOCK
-- DATABASE -- 基于库级别的并行复制 与5.6相同
-- LOGICAL_CLOCK -- 逻辑时钟,主上怎么并行执行的,从上也是怎么并行回放的。所以我们开启了logical_clock.

mysql> stop slave;
mysql> set global slave_parallel_type='LOGICAL_CLOCK';
mysql> set global slave_parallel_workers=8;
mysql> stop slave;

并行复制的效果对比图

以下是得到的一个概览图,横轴是测试时间,纵轴是延迟时间。

总体来看,MySQL 5.6中的并行复制效率提升不够明显,5.7中的提升效果非常显著。

时间: 2024-10-23 08:53:57

MySQL 5.6, 5.7并行复制测试(r12笔记第9天)的相关文章

MySQL 5.6, 5.7并行复制测试(二)(r12笔记第10天)

  昨天花了点时间整理了下并行复制在5.6,5.7中的一些差别和测试,当然只是一个开始,因为里面还有不少需要完善的部分,总体的感觉来看MySQL 5.7里的并行复制改进很大,能够极大提高效率,充分利用资源.   那我们来简单回顾一下MySQL的复制里的一些事情,然后继续展开测试.    首先借丁奇大师总结的一个经典的主从复制的流程图来展开. 整个复制的流程中,看似存在多个节点会存在延迟的可能,而如果把这些工作都细化,那么就会有一个很本质的原因,那就是在主库端的更新是多线程,而从库端更新是单线程.

MySQL自增列主从不一致的测试(r12笔记第37天)

    MySQL里面有一个问题尤其值得注意,那就是自增列的重复值问题,之前也简单分析过一篇,但是在后续我想了下,还有很多地方需要解释,一个就是从库的自增列是如何维护的,是否重启从库,自增列会受到影响.    我们继续来测试一下.首先复现这个问题.    创建表t1,插入3行数据. use test; [test]> drop table if exists t1; Query OK, 0 rows affected, 1 warning (0.01 sec) > create table t

MySQL中的double write(二)(r12笔记第17天)

    MySQL里的double write是InnoDB的三大闪亮特性,另外两个是insert buffer 和自适应哈希,其实还有几个比如异步IO,Flush neighbour Page(刷新邻接页),这个和系统层面的关联性较高,所以三大亮点还是更有针对性的.    当然一说到MySQL里的double write,其实主要是要应对一个很自然的问题,那就是partial write. 经典的partial write问题    这个问题比较经典,很多数据库设计中都需要考虑到这样一个临界点

sandbox和MHA快速测试(r12笔记第32天)

昨天写了一篇使用脚本搭建一主多从的脚本之后,奇龙兄建议我看看sandbox的功能,可以秒级搭建主从环境,简单试了下,确实很好很强大.    环境部署其实很简单,如果有网络环境,直接cpan一个命令即可.或者使用wget的方式来安装也可以. 安装sandbox 使用cpan来安装,非常简单,就是下面的命令: cpan MySQL::Sandbox 一些日志的输出之后就提示你安装成功,在/usr/local/bin下面就会多几个make_sandbox相关的命令. [root@grtest bin]

MySQL中的批量初始化数据的对比测试(r12笔记第71天)

  一直以来对于MySQL的存储过程性能还是颇有微词的,说实话够慢的.有时候想做一些对比测试,存储过程初始化几万条数据都得好一会儿,这功夫Oracle类似的测试早都做完了,今天就赶个晚班车,把这个没做完的任务完成了.     我大体测试了一下,以100万数据为基准,初始化性能的提升会从近8分钟提升到10多秒钟.      我自己尝试了以下4种方案.      1.存储过程批量导入(近8分钟)      2.存储过程批量导入内存表,内存表导入目标表(近5分钟)      3.使用shell脚本生成

MySQL主从不一致发现的细小问题分析(r12笔记第63天)

   今天和同事一起看了一个问题,她在一个主从环境中发现了数据不一致,存在主键冲突.     show slave status的报错信息大概是下面的样子. Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 0 failed executing transaction '0e454161-3169-11e7-98f6

MySQL · 特性分析 · LOGICAL_CLOCK 并行复制原理及实现分析

在MySQL5.7 引入基于Logical clock的并行复制方案前,MySQL使用基于Schema的并行复制,使不同db下的DML操作可以在备库并发回放.在优化后,可以做到不同表table下并发.但是如果业务在Master端高并发写入一个库(或者优化后的表),那么slave端就会出现较大的延迟.基于schema的并行复制,Slave作为只读实例提供读取功能时候可以保证同schema下事务的因果序(Causal Consistency,本文讨论Consistency的时候均假设Slave端为只

MySQL中GTID和自增列的数据测试(r12笔记第38天)

  昨天的一篇文章,今天有不少网友向我确认一些细节,我想最近正好在看GTID的东西,可以揉在一起来说说.    GTID这个概念看似简单,实际上还是有不少的门道. 我们来从架构的设计角度来看看存在哪些场景需要考虑GTID的变化.   一主两从的架构模式下GTID的变化   我们就以一主两从的架构为基准进行阐述.在这个架构模式下我们会用到MHA的方案.    如果这个时候Master节点宕机了,MHA就会开启检查机制. 这个时候Slave 1节点就会变为新的Master,Slave 2会从Slav

MySQL内核月报 2014.12-MySQL· 性能优化·并行复制外建约束问题

背景: mysql 主备同步是通过binlog来进行的,备库的 IO 线程从主库拉取binlog,SQL线程将拉取的binlog应用到备库,在5.6之前,备库只有一个线程应用binlog,主库的更新量大,且备库的执行效率低时,就会造成了大量从主库拉取的binlog来不及执行,因此造成了主备延迟问题.为了解决主备延迟,需要提高备库的执行效率,阿里MySQL 设计并开发了并行复制功能,所谓并行复制,指的是应用binlog的线程数量是多个的,而不是原生的单个线程,经过测试可以极大的提高复制性能(有3X