前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql解决主从慢同步问题(下)

Mysql解决主从慢同步问题(下)

原创
作者头像
陈不成i
修改2021-06-17 14:15:34
修改2021-06-17 14:15:34
2.3K0
举报
文章被收录于专栏:ops技术分享

三.解决办法

参数

关闭binlog日志可以减轻从库的负载

配置文件添加如下,将不缓冲直接写入,从而加速性能

  1. sync_binlog=0
  2. innodb_flushlog
  3. innodb_flush_log_at_trx_commi=0

多线程

5.6开始MySQL正式支持多线程复制,如下命令查看有多少个线程在同步。 show variables like '%slave_parallel%'

slave_parallel_type 为DATABASE时,基于数据库的并发,也就是每一个数据库都有一个线程去同步,如果只有一个数据库,那其它线程不工作。不同库下的表并发提交时的数据不会相互影响,即slave节点可以用对relay log中不同的库各分配一个类似SQL功能的线程,来重放relay log中主库已经提交的事务,保持数据与主库一致。

为LOGICAL_CLOCK时,则可以一个数据库一个多线程同步。一个组提交的事务都是可以并行回放(配合binary log group commit)。

slave_parallel_workers 代表启动多少个线程用于同步,0就是默认1个。

静态设置:

  1. slave_parallel_type='LOGICAL_CLOCK'
  2. slave_parallel_workers=8

动态设置:

SET GLOBAL slave_parallel_type='LOGICAL_CLOCK';

SET GLOBAL slave_parallel_workers=8;

组提交

在5.7中,多线程复制的功能有很很大的改善,支持LOGICAL_CLOCK的方式,在这种方式下,并发执行的多个事务只要能在同一时刻commit,就说明线程之间没有锁冲突,那么Master就可以将这一组的事务标记并在slave机器上安全的进行并发执行。

因此,可以尽可能地使所有线程能在同一时刻提交,这样就能很大程度上提升从机的执行的并行度,从而减少从机的延迟。

有了这个猜想后,很自然想到了人为控制尽可能多地使所有线程在同一时刻提交,其实官方已经给我们提供了类似的参数,参数如下: binlog_group_commit_sync_delay

备注:这个参数会对延迟SQL的响应,对延迟非常敏感的环境需要特别注意,单位是微秒。

由于是监控的DB,主要是load数据,然后进行展示,1秒左右的导入延迟对业务没什么影响,因此将两个参数调整为: SET GLOBAL binlog_group_commit_sync_delay = 1000000; SET GLOBAL binlog_group_commit_sync_no_delay_count = 20;

备注:这两个参数请根据业务特性进行调整,以免造成线上故障。

为了防止导入SQL堆积,设置SET GLOBAL binlog_group_commit_sync_no_delay_count为20,在达到20个事务时不管是否达到了1秒都进行提交,来减少对业务的影响。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三.解决办法
    • 参数
      • 多线程
        • 组提交
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档