一、背景
因为业务量的突然增加,并发dml增多,造成了主从延迟,所以这里总结下主从延迟的产生原因及解决办法
二、原因及解决
1.慢查询
解释:因为慢查询占用了大量资源,如cpu,io(主要影响),这时候就会造成从库的延迟
解决方案:kill慢查询
2.大量dml并发
解释:产生的原因有几点
2.1 binlog_row_image影响
默认为full(记录所有列),改成minimal (仅记录更改的列,以及识别行所需的列)可以节省io和网络,但是会影响闪回和一些第三方工具的同步
2.2 binlog_format影响
默认为row,可以改成MIXED,这样对根据条件一次更改或删除多行的事务复制效果好,不过也要考虑下游是否有第三方同步工具,且官方的推荐也是row
2.3 innodb_flush_log_at_trx_commit影响
默认为1,也可以改成0或者2,同步延迟也有可能是从库刷盘次数太多引起的,短暂改成0或者2后会减少刷盘次数,但要主要数据安全性,自己均衡
2.4 relay_log_info_repository影响
默认为file,设置为table可以减少磁盘io
2.5 多线程复制
slave_parallel_type=LOGICAL_CLOCK,
slave_parallel_workers>0
这样开启了多线程复制,在高并发的时候会有用处
2.6 刷盘友好
innodb_flush_method=O_DIRECT
innodb_buffer_pool_size,innodb_log_file_size,innodb_log_files_in_group这几个参数适当调整,减少刷盘次数
以上涉及到的参数详解链接:稍后补充