mysql主从延迟的原因及解决方法
slave延迟的原因:
场景1 无主键、无索引或索引区分度不高.
场景2 主库上有大事务,导致从库延时
场景3 数据库中存在大量myisam表,在备份的时候导致slave 延迟
场景4 从库的硬件没有主库的好,经常忽略从库的重要性。
场景5 主库写入频繁,从库压力跟不上导致延时.
场景6 网络抖动导致I/O线程复制延迟。
slave延迟解决方法:
场景1:在主库上给表上区分度较大的列添加索引,注意设置set sql_log_bin=0,
或者备库设置slave_rows_search_algorithms=‘TABLE_SCAN,INDEX_SCAN,HASH_SCAN’;
场景2:找出大的事物,结合业务与开发沟通解决;
场景3:myisamb表备份后会有锁表操作,导致备机sql线程夯住,从而导致延迟,建议修改表引擎;
场景4:升级备机硬件设备。
场景5:
建议1,使用PSC架构,实现多节点写入。
建议2:使用5.7的并行复制,
slave_parallel_workers>0
global.slave_parallel_type=’LOGICAL_CLOCK’
即主库在ordered_commit中的第二阶段,将同一批commit的 binlog 打上一个相同的seqno标签,同一时间戳的事务在备库是可以同时执行的,因此大大简化了并行复制的逻辑,
启用并行复制之后查看processlist,系统多了几个线程 Waiting for an event from Coordinato;
核心参数:
binlog_group_commit_sync_no_delay_count:(生产0)一组里面有多少事物才提交,单位 (ms)
binlog_group_commit_sync_delay:(生产0)等待多少时间后才进行组提交
场景6:提高网络的高可用。