千家信息网

分析数据库Seconds_Behind_Master延迟的原因

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容主要讲解"分析数据库Seconds_Behind_Master延迟的原因",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"分析数据库Seconds_B
千家信息网最后更新 2026年11月03日分析数据库Seconds_Behind_Master延迟的原因

本篇内容主要讲解"分析数据库Seconds_Behind_Master延迟的原因",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"分析数据库Seconds_Behind_Master延迟的原因"吧!

一、总结

(1)第一类:

这一类延迟情况可能造成服务器有较高的负载,可能是CPU/IO的负载。因为从库在实际执行Event,如果我们服务器的负载比较高应该考虑这几种情况。

  • 大事务造成的延迟,其延迟会不会从0开始增加,而是直接从主库执行了多久开始。比如主库执行这个事务花费的20秒,要么延迟就会从20开始,可以自己细心观察一下很容易看到。这是因为Query Event中没有准确的执行时间。

  • 大表DDL造成的延迟,其延迟会从0开始增加,因为Query Event记录了准确的执行时间

  • 表没有合理的使用主键或者唯一键造成的延迟。这种情况不要以为设置slave_rows_search_algorithms参数为 INDEX_SCAN,HASH_SCAN就可以完全解决问题。

  • 由于参数sync_relay_log,sync_master_info,sync_relay_log_info不合理导致,特别是sync_relay_log会极大的影响从库的性能。原因我们在第26节进行过描述,因为sync_relay_log设置为1会导致大量relay log刷盘操作。

  • 是否从库开启了记录binary log功能即log_slave_updates参数开启,如果不是必要可以关闭掉。这种情况我遇到很多次了。

(2)第二类:

这一类延迟情况往往不会造成服务器有较高的负载。它们要么没有实际的执行Event,要么就是做了特殊的操作造成的。

  • 长期未提交的事务可能造成延迟瞬间增加,因为GTID_EVENT和XID_EVENT是提交时间其他Event是命令发起的时间。这个我们在第27节中举例描述过了。

  • Innodb层的行锁造成的延迟,这种是在从库有修改操作并且和SQL线程修改的数据有冲突的情况下造成的,因为我们前面23节说过SQL线程执行Event也会开启事务和获取行锁,下面我们进行测试。

  • MySQL层的MDL LOCK造成的延迟,这种情况可能是由于SQL线程执行某些DDL操作但是从库上做了锁表操作造成。

  • MTS中不合理的设置参数slave_checkpoint_period参数导致。

  • 在从库运行期间手动改大了从库服务器时间。

二、相关测试

因为上面的延迟情形很多我们都已经测试和讲述过了。下面我们测试锁造成的延迟情形。

(1)Innodb层的行锁造成的延迟

这个很容测试,我只要先在从库做一个事务和SQL线程修改的数据相同即可以出现,大概测试如下:

从库:mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> delete from tmpk;Query OK, 4 rows affected (0.00 sec)不要提交主库执行同样的语句mysql> delete from tmpk;Query OK, 4 rows affected (0.30 sec)

这个时候你会观察到延迟如下:

如果查看sys.innodb_lock_waits能看到如下的结果:

当然如果查看INNODB_TRX也可以观察到事务的存在,这里就不截图了,大家可以自己试试。

(2)MySQL层的MDL LOCK造成的延迟

这种情况也非常容易测试,我们只需要开启一个事务做一个select,然后主库对同样的表做DDL就可以出现如下:

从库:mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> mysql> mysql> select * from tkkk limit 1;+------+------+------+| a    | b    | c    |+------+------+------+|    3 |    3 |  100 |+------+------+------+1 row in set (0.00 sec)不要提交,表上MDL LOCK就不会释放主库执行语句:mysql> alter table tmpk add testc int ;Query OK, 0 rows affected (1.14 sec)Records: 0  Duplicates: 0  Warnings: 0

这个时候你将会看到如下的信息:

我们可以通过state看到这是等待MDL lock获取而导致的延迟

三、总结

通过整个系列,我们应该清楚了Seconds_Behind_Master计算的方法,同时如果出现了延迟,我们首先查看从库是否有负载,根据是否有负载进行区别对待,注意这里的负载一定要使用top -H查看io/sql/woker线程的负载。我曾不止一次的遇到朋友问我延迟问题,当我问他负载如何的时候他告诉我负载不高啊整体负载也就不到2,这里我们应该注意的是对于一个线程只能使用到一个CPU核,虽然整体负载不到2但是可能io/sql/worker线程已经跑满了,实际上负载已经很高了,我们来看下面的这个截图就是sql线程负载高的截图如下:

这个截图我们发现虽然整体负载不高在1多一点,但是Lwp号20092的线程已经跑满了,这个线程就是我们的sql线程,这个时候出现延迟是很可能的,这个截图正是来自一个没有合理使用主键或者唯一键造成的延迟的案例。

我们查看CPU负载应该使用top -H去查看,查看io负载可以使用iotop,iostat等工具。我需要强调一下看MySQL负载的时候我们必须用线程的眼光去看。

到此,相信大家对"分析数据库Seconds_Behind_Master延迟的原因"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

延迟 线程 情况 事务 测试 数据 参数 截图 时候 时间 原因 实际 服务器 服务 数据库 分析 就是 整体 要么 观察 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 美国互联网保险保险科技 长亮科技互联网金融 互联网实体化科技化 西藏七维空间互联网科技有限公司 互联网为啥属于高科技 速维有品互联网信息科技(苏州)有限公司 米聚互联网科技南京有限公司排面 河南住房之家互联网科技 乌鲁木齐新华智原互联网科技学校 东莞新华互联网科技学校 佛山市翊博互联网络科技有限公司 互联网行业科技股 深圳市罗太互联网科技有限公司 互联网方面的科技前沿 图游互联网科技 广州燕处互联网科技有限公司 互联网科技手抄报图片 北京互联网科技类企业分布 科技互联网经济论坛 科技发展第三阶段互联网时代 亿人帮互联网科技有限公司 互联网科技集团 四川狮子座互联网科技 央行互联网金融科技公司 现代互联网科技股 辽宁互联网新科技 电子商务与互联网科技的关系 梅州GM互联网络科技有限公司 第三届互联网大会安防黑科技 互联网的黑科技实验室
0