暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

好文 | Zabbix监控 MYSQL,Mysql 版本基准性能比较,Mysql8.0主主配置

Zabbix开源社区 2019-08-23
264

Zabbix监控Mysql | Mysql 5.7,8.0基准性能比较,Mysql8.0主主配置


MySQL同步复制模型架构

01

点击查看大图

复制模型:

MySQL的主从架构依赖于 MySQL Binlog 功能, Master节点上产生Binlog并将Binlog写入到Binlog文件中。Slave节点上启动两个线程:一个IO线程,从MySQL上捞取Binlog日志并写入到本地的RelayLog日志;另一个SQL线程,不断的从RelayLog日志中读取日志并解析执行。通过主库增加文件的顺序读写操作,保证主库上执行过的SQL语句都在从库上一摸一样的执行一遍。



slave延迟及场景描述

02

点击查看大图

从架构图上可以看到主从复制涉及三个线程,一个运行到主节点(log dump thread),其余两个(I/O thread,SQL thread)运行在从节点,只有一个线程负责执行 Relaylog,也就是所有在主库上的操作,在从库上是串行回放的。如果主库上写入压力比较大,那么从库上回放速度很有可能会一直跟不上主库。

例如延迟场景如下:

  1. 无主键、无索引或索引区分度不高

  2. 主库上有大事务,导致从库延时

  3. 主库写入频繁,从库压力跟不上导致延时

  4. 大量myisam表,在备份时导致slave延迟



Mysql5.7 与Mysql8.0性能比较

03

参数配置

innodb_max_dirty_pages_pct= 90    #MySQL 8默认值。

innodb_max_dirty_pages_pct_lwm= 10    # MySQL 8默认值

innodb_dedicated_serve=OFF    # MySQL 8新功能默认值

innodb_flush_neighbors=0

innodb_buffer_pool_instances=8

innodb_buffer_pool_size=8GiB

InnoDB行操作对比图

点击查看大图

点击查看大图

点击查看大图

说明:

性能显著提高,特别是在高负载服务器上。MySQL 5.7和MySQL 8.0在InnoDB行操作上的区别,存在很大的不同,特别是当线程数增加的时候。MySQL 8.0表明无论工作负载如何,它都能高效地运行。


事务处理

点击查看大图

点击查看大图

说明:

MySQL 8.0的结果趋势显示出其处理事务所需的时间的巨大变化。纵轴数值越低,表示性能越好,处理事务的速度越快。(图二)处理的事务统计表显示出两个版本处理事务数量没有差异。两个版本处理事务数量几乎相同,但完成速度不同。MySQL 5.7在较低的负载下可以执行大量事务,但是实际负载或生产中可能更高,特别是在繁忙时期。

点击查看大图

通过官网发现MySQL 8.0具有很大改进,对于读取表现在写操作效率上,对于高负载服务Mysql8.0版本影响MySQL读取性能的重要新增:按降序(或正向索引扫描)创建索引。以前版本只有升序或反向索引扫描,如果降序MySQL必须执行filesort时就要检查max_length_for_sort_data的值。最有效的扫描顺序混合某些列的升序和其他列的降序时,降序索引还使优化器可以使用多列索引。


CPU资源

点击查看大图

说明:

MySQL 8.0消耗了大量的CPU,超过MySQL 5.7,由于MySQL 8.0可能消耗了额外CPU可能在于变量配置。由MySQL 8.0重新设计的InnoDB写入REDO日志方式,有几个变量可配置处理重做日志使用CPU资源。例如:MySQL 8.0变量innodb_log_spin_cpu_pct_hwm CPU具有亲和性,如果mysql仅绑定到4个内核,它将忽略其他CPU内核。对于并行读取线程在MySQL 8.0中添加了一个新变量,可以调整使用的线程数:

  innodb_log_spin_cpu_abs_lwm = 80

innodb_log_spin_cpu_pct_hwm = 50

  innodb_log_wait_for_flush_spin_hwm = 400

 innodb_parallel_read_threads = 4

综上所述

结合MySQL 8.0官网发现此版本有很大改进。MySQL 5.7与 MySQL 8.0不仅在处理读、读写混合高负载下性能都有很大明显的优化改进。在性能上已经远远要比MySQL 5.7要强。



Zabbix监控Mysql增删改查比较

04

点击查看大图

说明:

Mysql8.0结合zabbix性能还有待测试,由于测试环境跟生产环境数据库压力存在很大差异。根据mysql8.0在版本上的改进及性能测试是优于MySQL 5.7。



Mysql8.0主主配置

05

修改配置创建用户

vi etc/my.cnf

点击查看大图

systemctl restart mysqld        #重启服务


Zabbix-db2主从

  1. 在zabbix-db1上执行“show master status;”查看master日志文件和位置。因为mysql没有数据写入,所以不用锁表防止数据写入。当使用“show slave status\G”查看同步状态,Slave_IO_Running和Slave_SQL_Running都为YES,则表示同步成功。

  2. 在zabbix-db2上声明master:

点击查看大图


Zabbix-db1主从

在zabbix-db2上执行“show master status;”查看master日志文件和位置。

在zabbix-db1上声明master:

点击查看大图


测试

db1主库

db2主库


Mysql8.0参考

欢迎投稿

Z投稿专栏为大家提供一个展现自己的平台,作者观点不等同社区观点,欢迎读者在评论区留言讨论

文章内容

与运维、Zabbix相关即可

投稿方式

私信Z小秘

(微信/电话 13817720274)

小福利

投稿可以获得Z积分*5

每月评选,阅读量TOP3可获得积分10/5/3分

ps:公众号回复【签到】查看积分小惊喜

点击查看积分

在线课程来了!

课程简介:

Zabbix预处理允许定义和对接收到的监控值进行数据转换,在监控项收集的数据存储到数据库前,预先对数据进行处理,还可以用于从属关系,大大简化数据采集过程,降低数据采集负载,提高工作效率!让Zabbix专家告诉你怎么操作~

8月28日,20:00 

讲师简介:

米宏 - Zabbix高级认证专家(ZCP)

点击报名

一键关注

关注公众号

加入社区群

Zabbix社区,因你而更美好


文章转载自Zabbix开源社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论