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

2021-02-03 14:37:38 浏览数 (1)

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 statusG”查看同步状态,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参考

  • https://dev.mysql.com/doc/refman/8.0/en/
  • https://www.cnblogs.com/qcloud1001/p/10488735.html

0 人点赞