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,也就是所有在主库上的操作,在从库上是串行回放的。如果主库上写入压力比较大,那么从库上回放速度很有可能会一直跟不上主库。
例如延迟场景如下:
- 无主键、无索引或索引区分度不高
- 主库上有大事务,导致从库延时
- 主库写入频繁,从库压力跟不上导致延时
- 大量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主从
- 在zabbix-db1上执行“show master status;”查看master日志文件和位置。因为mysql没有数据写入,所以不用锁表防止数据写入。当使用“show slave statusG”查看同步状态,Slave_IO_Running和Slave_SQL_Running都为YES,则表示同步成功。
- 在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