slave复制延迟较大优化
默认mysql从库SQL为单线程,所以从库同步执行速度相对较慢,进而导致延迟增大。在MySQL5.7版本可以通过设置逻辑时钟来实现从库多线程复制
查看从库复制线程状态
主从环境部署完毕后,查看从库当前的线程状态
1 | mysql> show processlist; |
可以看到当前只有一个复制线程
配置从库多线程复制
1. 在从库上停止复制
1 | mysql> stop slave; |
2. 设置并发同步类型为逻辑时钟方式
先看下现在 slave 的并发类型
1 | show variables like 'slave_parallel_type'; |
默认是database,每个线程只能处理一个数据库
配置成基于逻辑时钟的方式
1 | set global slave_parallel_type='logical_clock'; |
3. 设置复制线程的数量
先看下当前的并发量
1 | mysql> show variables like 'slave_parallel_workers'; |
修改并发量为8
1 | mysql> set global slave_parallel_workers=8; |
4. 启动从库复制
1 | mysql> start slave; |
验证配置结果
1 | mysql> show processlist; |
多线程复制好处
多源线程,即每个sql线程处理不同的database,提高了并发性能,即使某database的某条语句暂时卡住,也不会影响到后续对其它的database进行操作。多线程复制在一定程度上解决了从库延迟主库并且很难追上的问题。
其他问题与解决方案
如果一个生产场景,在某一时刻,有大量的数据向同一个数据库执行写操作,这个时候,多线程复制功能便失去了从库降低延迟的作用。这个时候还需要继续优化
配置sync_binlog和innodb_flush_log参数
1 | mysql> show variables like 'sync_binlog'; |
含义:当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
1 | mysql> SHOW VARIABLES LIKE '%innodb_flush_log_at_trx_commit%'; |
含义:innodb_flush_log_at_trx_commit设置为【0或2, 默认为1】不同的值,性能差别很明显。可以通过设置为0或者2来提高事物提高性能。但是这种设置丧失了ACID特性。
附加:从库配置my.cnf文件参数
1 | slave-parallel-type=LOGICAL_CLOCK |
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2019/03/26/mysql从库降低延迟/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!