常见slave延迟原因以及解决方法

conanwang-qq:26738256 conanwang-qq:26738256     2022-08-03     455

关键词:

一  序言
在运维线上M-M 架构的MySQL数据库时,接收的比较多关于主备延时的报警:

点击(此处)折叠或打开

  1. check_ins_slave_lag (err_cnt:1)critical-slavelag on ins:3306=39438

相信slave 延迟是MySQL dba 遇到的一个老生长谈的问题了。先来分析一下slave延迟带来的风险
  1. 异常情况下,主从HA无法切换。HA 软件需要检查数据的一致性,延迟时,主备不一致。 
  2. 备库复制hang会导致备份失败(flush tables with read lock会900s超时)
  3. 以 slave 为基准进行的备份,数据不是最新的,而是延迟。

二  如何解决
面对此类问题我们如何解决 ,如何规避?分析一下导致备库延迟的几种原因
1. ROW模式无主键、无索引或索引区分度不高.有如下特征
   a. show slave status 显示position一直没有变
   b. show open tables 显示某个表一直是 in_use 为 1
   c. show create table 查看表结构可以看到无主键,或者无任何索引,或者索引区分度很差。

解决方法:
   a. 找到表区分度比较高的几个字段, 可以使用这个方法判断:
    select count(*) from xx; 
    select count(*) from (select distinct xx from xxx) t;
    如果2个查询count(*)的结果差不多,说明可以对这些字段加索引
   b. 备库stop slave;
    可能会执行比较久,因为需要回滚事务。
  c. 备库
    set sql_log_bin=0;
    alter table xx add key xx(xx);
   老的版本slave应用binlog时只会选择第一个索引,需要把新加的索引放在最前面,可以先把老的索引删掉,建新的索引,再把老的索引建上。可以放到一个sql中执行。
  d. 备库start slave
    如果是innodb,可以通过show innodb status来查看 rows_inserted,updated,deleted,selected这几个指标来判断。
    如果每秒修改的记录数比较多,说明复制正在以比较快的速度执行。

2 MIXED模式无索引或SQL慢
   在从库上show full processlist 查看到正在执行的SQL。
解决方法:
  a.  SQL比较简单, 则检查是否缺少索引,并添加索引。
  b. 另一类是 insert into select from的语句,如果select 里包含group by,多表关联,可能效率会比较低。
      这类可以到主库把binlog_format改成row。

3 主库上有大事务,导致从库延时
现象解析binlog 发现类似于下图的情况看
技术分享
解决方法:
与开发沟通,增加缓存,异步写入数据库,减少直接对db的大量写入。

4. 主库写入频繁,从库压力跟不上导致延时
  此类原因的主要现象是数据库的 IUD 操作非常多,slave由于sql_thread单线程的原因追不上主库。
 解决方法:
 a 升级从库的硬件配置,比如ssd,fio.
 b 使用@丁奇的预热工具-relay fetch
   在备库sql线程执行更新之前,预先将相应的数据加载到内存中,并不能提高sql_thread线程执行sql的能力,也不能加快io_thread线程读取日志的速度。
 c 使用多线程复制 阿里MySQL团队实现的方案--基于行的并行复制。
   该方案允许对同一张表进行修改的两个事务并行执行,只要这两个事务修改了表中的不同的行。这个方案可以达到事务间更高的并发度,但是局限是必须使用Row格式的binlog。因为只有使用      Row格式的binlog才可以知道一个事务所修改的行的范围,而使用Statement格式的binlog只能知道修改的表对象。

5. 数据库中存在大量myisam表,在备份的时候导致slave 延迟
技术分享
 技术分享
 由于xtrabackup 工具备份到最后会执行flash tables with read lock ,对数据库进行锁表以便进行一致性备份,然后对于myisam表 锁,会阻碍salve_sql_thread 停滞运行进而导致hang
该问题目前的比较好的解决方式是修改表结构为innodb存储引擎的表。
 
 三 拓展阅读
 [1] 怎样解决MySQL数据库主从复制延迟的问题 
 [2] 三种MySQL并行复制方案的分析                
 [3] 一种MySQL主从同步加速方案-改进
 [4] MySQL多线程同步MySQL-Transfer介绍

mysql主从同步延迟原因及解决办法

MySQL主从延迟原因以及解决方案:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高。slave的S... 查看详情

mysql主从同步延迟原因及解决办法

MySQL主从延迟原因以及解决方案:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高。slave的S... 查看详情

mysql主从同步延迟原因及解决办法

MySQL主从延迟原因以及解决方案:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高。slave的S... 查看详情

mysql主从同步延迟原因及解决办法

MySQL主从延迟原因以及解决方案:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高。slave的S... 查看详情

mysql主从延迟原因以及解决方案

MySQL数据库主从同步延迟原理。MySQL数据库主从同步延迟是怎么产生的。MySQL数据库主从同步延迟解决方案。MySQL数据库主从同步延迟产生的因素。1.MySQL数据库主从同步延迟原理。答:谈到MySQL数据库主从同步延迟原理,得从mysql... 查看详情

slave延迟很大优化方法

一般而言,slave相对master延迟较大,其根本原因就是slave上的复制线程没办法真正做到并发。简单说,在master上是并发模式(以InnoDB引擎为主)完成事务提交的,而在slave上,复制线程只有一个sqlthread用于binlog的apply,所以难怪slav... 查看详情

分析电脑死机的常见的几种原因,以及对应的解决方法

...花屏、黑屏、又或者是电脑无法开机、死机等等都是比较常见的故障,为了修好电脑,我们今天就来了解下,当电脑经常死机,我们用什么方法解决呢?下面就跟随小编一起来看下吧。造成电脑死机的因素有哪些呢,小编咨询了... 查看详情

[mysql优化案例]系列—slave延迟很大优化方法

...当还请及时告知:)一般而言,slave相对master延迟较大,其根本原因就是slave上的复制线程没办法真正做到并发。简单说,在master上是并发模式(以InnoDB引擎为主)完成事务提交的,而在slave上, 查看详情

coreseek常见错误原因及解决方法

coreseek常见错误原因及解决方法  Coreseek中文全文检索引擎Coreseek是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索、论坛/站内搜索... 查看详情

常见网络问题以及解决方法

Mac系统网络接口的status:500(服务器内部发生错误,一般是后台的问题)后端如果没有问题,前端可以尝试下 sudokillall-HUPmDNSResponder&&echomacOSDNSCacheRese来清除DNS缓存 查看详情

原创xaf常见错误以及对应解决方法

1.AppearanceCriteria设置错误Exceptionoccurswhileassigningthe‘DetailView,ID:xxx_DetailView‘viewtoWinWindow:singlecriterionexpected参数名:stringCriteria  解决方法:检查此Bo的AppearanceCriteria是否存在错误下面是我手滑的效果。 2.&n 查看详情

20180117mysql出现waitingfortablemetadatalock的原因以及解决方法

转自http://www.cnblogs.com/digdeep/p/4892953.html转自:http://ctripmysqldba.iteye.com/blog/1938150(有修改)MySQL在进行altertable等DDL操作时,有时会出现Waitingfortablemetadatalock的等待场景。而且,一旦altertableTableA的操作停滞在Waitingfort 查看详情

lamp常见安装编辑错误以及解决方法

Apache常见报错1apr-util在编译apr-util中make&&makeinstall发生这报错信息,解决方法:安装expat-devel依赖包即可#yuminstall-yexpat-devel2 httpd2.4.33进行make&&makeinstall的时候,发生的报错。分析说明:缺少了xml相关的库,需要安装... 查看详情

一些常见warning的原因和解决方法

  在入职三周后,终于赶齐了接手项目落下两个月的项目,有了一些自己的空闲时间对项目进行整理。主要整理包括类目的整合,从原来一个系统文件夹下几百个文件整改为以MVC设计思想为原则的分文件夹整理类目,井然有序... 查看详情

faq接入hmscore推送服务,服务端下发消息常见错误码原因分析及解决方法

...下行消息给终端设备。这篇文章汇总了服务端下发消息最常见的6个错误码,并提供了原因分析和解决方法,有遇到类似问题的开发者们快了解一下吧。错误码一:80200001,"Oauth认证错误"原因分析:下发消息未添加Authorization请求... 查看详情

spring事务异常unexpectedrollbackexception出现原因以及解决方法(代码片段)

异常信息:org.springframework.transaction.UnexpectedRollbackException:Transactionsilentlyrolledbackbecauseithasbeenmarkedasrollback-only atorg.springframework.transaction.support.AbstractPlatformTra 查看详情

无法启动maya集成的qtdesigner的解决方法和原因以及中英文切换

无法启动Maya集成的qtdesigner的解决方法和原因以及中英文切换前言:   Maya集成了PySide,同时集成了qtdesigner,在Maya的安装目录下的bin文件夹中可以找到designer.exe。运行designer.exe报错解决方法和原因  当我们单独运行Maya中的... 查看详情

死锁产生的原因以及解决方法

一.什么是死锁?   死锁是由于两个或以上的线程互相持有对方需要的资源,导致这些线程处于等待状态,无法执行。二.产生死锁的四个必要条件   1.互斥性:线程对资源的占有是排他性的,一个资源只能被一个线程占... 查看详情