Seconds_Behind_Master越来越大,主从同步延迟
问题现象
发现从库mysql_slave的参数Seconds_Behind_Master越来越大。已排除主从服务器时间不一致;那么主要就判断两点:是io thread慢还是 sql thread慢?先观察show slave status\G 。
判断3个参数(参数后面的值是默认空闲时候的正常值):
Slave_IO_State: Waiting for master to send event
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Seconds_Behind_Master: 0
1.sql thread慢的表现:
Seconds_Behind_Master越来越大
Slave_SQL_Running_State: Reading event from the relay log
2.io thread慢的表现:
Seconds_Behind_Master为0
Slave_SQL_Running_State: 显示正常值
Slave_IO_State:显示忙碌状态
本文观察到的值:
Slave_IO_State: Queueing master event to the relay log
Seconds_Behind_Master: 30880
Slave_SQL_Running_State: Reading event from the relay log
上述三个参数,推断是sql thread慢
同步延迟信息详见如下:
mysql> show master status \G*************************** 1. row ***************************File: mysql-bin.000057Position: 214873221Binlog_Do_DB:Binlog_Ignore_DB:Executed_Gtid_Set: 838ad3df-a43d-11e8-8b02-6c92bf7daa8d:1,efd10b43-a43c-11e8-85d8-6c92bf7d9fd1:1-1342023811 row in set (0.00 sec)
从库延迟:
mysql> show slave status \G*************************** 1. row ***************************Slave_IO_State: Queueing master event to the relay logMaster_Host: 192.168.10.111Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000057Read_Master_Log_Pos: 214813221Relay_Log_File: relay-bin.00045Relay_Log_Pos: 28055325Relay_Master_Log_File: mysql-bin.000057Slave_IO_Running: YesSlave_SQL_Running: YesExec_Master_Log_Pos: 94286319Relay_Log_Space: 956058939Seconds_Behind_Master: 30880Master_Server_Id: 113306Master_UUID: efd10b43-a43c-11e8-85d8-6c92bf7d9fd1Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Reading event from the relay logMaster_Retry_Count: 86400Retrieved_Gtid_Set: efd10b43-a43c-11e8-85d8-6c92bf7d9fd1:153917-55474510Executed_Gtid_Set: 838ad3df-a43d-11e8-8b02-6c92bf7daa8d:1,efd10b43-a43c-11e8-85d8-6c92bf7d9fd1:1-54003557Auto_Position: 11 row in set (0.00 sec)
注意: Seconds_Behind_Master: 30880
分析步骤:
开始怀疑是参数配置的差异,比对/etc/my.cnf后发现,发现配置并无差异。
从库使用操作系统命令dstat观察,发现繁忙时候,slave的IO写速度上不去
[root@mysql ~]# dstatYou did not select any stats, using -cdngy by default.----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai hiq siq| read writ| recv send| in out | int csw0 0 100 0 0 0| 19k 686k| 0 0 | 0 0 | 231 6480 0 99 1 0 0| 0 1388k| 798B 396B| 0 0 | 358 15960 0 99 1 0 0| 0 1676k| 244B 170B| 0 0 | 397 19490 0 99 1 0 0| 0 1796k|1490B 236B| 0 0 | 451 21070 0 99 1 0 0| 0 1764k| 244B 170B| 0 0 | 414 21040 0 100 0 0 0| 0 1536k|1068B 170B| 0 0 | 390 16490 0 99 1 0 0| 0 1516k| 244B 170B| 0 0 | 373 15750 0 99 1 0 0| 0 1552k| 34k 500B| 0 0 | 410 16020 0 100 0 0 0| 0 1556k| 126B 236B| 0 0 | 363 15270 0 99 1 0 0| 0 1384k| 60B 170B| 0 0 | 349 13690 0 99 1 0 0| 0 1440k| 13k 434B| 0 0 | 400 15130 0 100 0 0 0| 0 1800k| 612B 170B| 0 0 | 418 19050 0 99 0 0 0| 0 1484k| 246B 236B| 0 0 | 622 15680 0 99 1 0 0| 0 1272k| 60B 170B| 0 0 | 347 12940 0 99 1 0 0| 0 1624k| 126B 236B| 0 0 | 400 18150 0 99 1 0 0| 0 1580k| 60B 170B| 0 0 | 358 17120 0 100 0 0 0| 0 1536k| 22k 302B| 0 0 | 395 15830 0 100 0 0 0| 0 1440k| 514B 368B| 0 0 | 383 17650 0 99 1 0 0| 0 1596k| 28k 500B| 0 0 | 446 2151看到从库的写只能达到每秒1.5M左右,IO性能不是很好,也印证了初步的推测。
那么问题来了,
要如何优化IO性能比较差的slave呢?
简单,本文做了如下两个参数的修改:
mysql> set global innodb_flush_log_at_trx_commit=2;Query OK, 0 rows affected (0.00 sec)mysql> set global sync_binlog=20 ;Query OK, 0 rows affected (0.00 sec)
innodb_flush_log_at_trx_commit和sync_binlog这两个参数又是个啥?
innodb_flush_log_at_trx_commit
1. innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
2. innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去.
3. innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
注意:
由于进程调度策略问题,这个“每秒执行一次 flush(刷到磁盘)操作”并不是标准意义上的保证100%的“每秒”。
sync_binlog
sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
当sync_binlog =N (N>0) ,MySQL 在每写 N次二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
注意:
如果启用了autocommit,那么每一个语句statement就会有一次写操作;否则每个事务对应一个写操作。mysql服务默认是autocommit打开的。
如上sync_binlog,autocommit,innodb_flush_log_at_trx_commit三个参数,详见从库mysql_slave设置如下:
mysql> show variables like '%sync_binlog%';+---------------+-------+| Variable_name | Value |+---------------+-------+| sync_binlog | 0 |+---------------+-------+1 row in set (0.01 sec)mysql>mysql> show variables like '%innodb_flush_log_at_trx_commit%';+--------------------------------+-------+| Variable_name | Value |+--------------------------------+-------+| innodb_flush_log_at_trx_commit | 1 |+--------------------------------+-------+1 row in set (0.00 sec)mysql> show variables like '%autocommit%';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | ON |+---------------+-------+1 row in set (0.00 sec)
根据上述分析过程,修改如下值:
mysql> set global sync_binlog=20;mysql> set global innodb_flush_log_at_trx_commit=2;
接下来,我们观察和验证从库同步情况
1. 使用dstat命令观察磁盘IO,下图可以看到从库的写有原来的每秒1.5M左右提升为4M以上,
[root@mysql ~]# dstatYou did not select any stats, using -cdngy by default.----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--usr sys idl wai hiq siq| read writ| recv send| in out | int csw0 0 100 0 0 0| 19k 686k| 0 0 | 0 0 | 231 6480 0 99 1 0 0| 0 4756k| 882B 462B| 0 0 | 601 66900 0 99 1 0 0| 0 4208k| 430B 236B| 0 0 | 642 87710 0 99 1 0 0| 0 4452k| 428B 170B| 0 0 | 607 78030 0 99 1 0 0| 0 7964k| 26k 500B| 0 0 | 589 68350 0 99 1 0 0| 0 3832k|1166B 170B| 0 0 | 368 24670 0 99 1 0 0| 0 4584k|2042B 236B| 0 0 | 523 46320 0 99 1 0 0| 0 4972k|1296B 170B| 0 0 | 661 92980 0 99 1 0 0| 0 4792k|1046B 236B| 0 0 | 606 96340 0 99 1 0 0| 0 5244k|3032B 212B| 0 0 | 745 99650 0 99 0 0 0| 0 4648k| 796B 170B| 0 0 |1166 19k0 0 99 1 0 0| 0 4608k| 21k 434B| 0 0 | 827 14k0 0 99 0 0 0| 0 4552k|1858B 236B| 0 0 | 971 17k0 0 99 0 0 0| 0 4580k| 980B 170B| 0 0 | 936 17k0 0 99 1 0 0| 0 8332k| 21k 434B| 0 0 | 940 13k0 0 99 0 0 0| 0 4136k|1112B 236B| 0 0 |1112 20k0 0 99 0 0 0| 0 4940k| 796B 170B| 0 0 |1045 19k0 0 99 0 0 0| 0 4496k| 22k 500B| 0 0 | 951 15k0 0 99 0 0 0| 0 4652k| 862B 170B| 0 0 |1022 18k0 0 99 0 0 0| 0 5472k|1546B 236B| 0 0 | 950 15k0 0 99 0 0 0| 0 2616k| 20k 434B| 0 0 | 901 15k0 0 99 1 0 0| 0 9564k|2410B 170B| 0 0 | 958 14
2. 从库使用 show slave status \G,观察到Seconds_Behind_Master: 21202在持续缩小和主库的差距。Seconds_Behind_Master:由原来的30880降为21202,且在持续减少中。
mysql> show slave status \G*************************** 1. row ***************************Slave_IO_State: Queueing master event to the relay logMaster_Host: 192.168.10.111Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000057Read_Master_Log_Pos: 214833221Relay_Log_File: relay-bin.00045Relay_Log_Pos: 28064325Relay_Master_Log_File: mysql-bin.000057Slave_IO_Running: YesSlave_SQL_Running: YesExec_Master_Log_Pos: 544925182Relay_Log_Space: 973436169Master_SSL_Allowed: NoSeconds_Behind_Master: 21202Replicate_Ignore_Server_Ids:Master_Server_Id: 113306Master_UUID: efd10b43-a43c-11e8-85d8-6c92bf7d9fd1Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Waiting for dependent transaction to commitMaster_Retry_Count: 86400Retrieved_Gtid_Set: efd10b43-a43c-11e8-85d8-6c92bf7d9fd1:153917-55504200Executed_Gtid_Set: 838ad3df-a43d-11e8-8b02-6c92bf7daa8d:1,efd10b43-a43c-11e8-85d8-6c92bf7d9fd1:1-54771730Auto_Position: 11 row in set (4.98 sec)
至此,Seconds_Behind_Master越来越打的问题得到解决。
相关文章:
Seconds_Behind_Master越来越大,主从同步延迟
问题现象 发现从库mysql_slave的参数Seconds_Behind_Master越来越大。已排除主从服务器时间不一致;那么主要就判断两点:是io thread慢还是 sql thread慢?先观察show slave status\G 。 判断3个参数(参数后面的值是默认空闲时候的…...
除法求值[中等]
一、题目 给你一个变量对数组equations和一个实数值数组values作为已知条件,其中equations[i] [Ai, Bi]和values[i]共同表示等式Ai / Bi values[i]。每个Ai或Bi是一个表示单个变量的字符串。另有一些以数组queries表示的问题,其中queries[j] [Cj, Dj…...
新时代商业市场:AR技术的挑战与机遇并存
随着科技的不断发展,增强现实(AR)技术逐渐成为当今社会的一个重要组成部分。AR技术能够将虚拟世界与现实世界相结合,为人们提供更加丰富、多样化的体验。在新时代的社会商业市场中,AR技术也正逐渐被应用于各种商业活动…...
RHEL8中ansible的使用
编写ansible.cfg和清单文件ansible的基本用法 本章实验三台RHEL8系统(rhel801,rhel802,rhel803),其中rhel801是ansible主机 这里要确保ansible主机能够解析所有被管理的机器,这里通过配置/etc/hosts来实现…...
【1.6计算机组成与体系结构】存储系统
目录 1.层次化存储结构2.Cache2.1 Cache的介绍2.2 局部性原理2.3 Cache应用 1.层次化存储结构 由 ⬆ CPU:寄存器。 快 ⬆ Cache:按内容存取(相联存储器)。 到 ⬆内存(主存):DRAM。 慢 ⬆ 外存(辅存&#…...
TCP/UDP 协议
目录 一.TCP协议 1.介绍 2.报文格式 编辑 确认号 控制位 窗口大小 3.TCP特性 二.TCP协议的三次握手 1.tcp 三次握手的过程 三.四次挥手 2.有限状态机 四.tcp协议和udp协议的区别 五.udp协议 UDP特性 六.telnet协议 一.TCP协议 1.介绍 TCP(Transm…...
如何正确理解和使用 Golang 中 nil ?
目录 指针中的 nil 切片中的 nil map 中的 nil 通道中的 nil 函数中的 nil 接口中的 nil 避免 nil 相关问题的最佳实践 小结 在 Golang 中,nil 是一个预定义的标识符,在不同的上下文环境中有不同的含义,但通常表示“无”、“空”或“…...
IDEA新建jdk8 spring boot项目
今天新建spring boot项目发现JDK版本最低可选17。 但是目前用的最多的还是JDK8啊。 解决办法 Server URL中设置: https://start.aliyun.com/设置完成后,又可以愉快的用jdk8创建项目了。 参考 https://blog.csdn.net/imbzz/article/details/13469117…...
Qt/C++音视频开发59-使用mdk-sdk组件/原qtav作者力作/性能凶残/超级跨平台
一、前言 最近一个月一直在研究mdk-sdk音视频组件,这个组件是原qtav作者的最新力作,提供了各种各样的示例demo,不仅限于支持C,其他各种比如java/flutter/web/android等全部支持,性能上也是杠杠的,目前大概…...
智安网络|企业网络安全工具对比:云桌面与堡垒机,哪个更适合您的需求
随着云计算技术的快速发展,越来越多的企业开始采用云计算解决方案来提高效率和灵活性。在云计算环境下,云桌面和堡垒机被广泛应用于企业网络安全和办公环境中。尽管它们都有助于提升企业的安全和效率,但云桌面和堡垒机在功能和应用方面存在着…...
Git忽略已经提交的文件
原理类似于 Android修改submodule的lib包名...
MVVM和MVC以及MVP的原理以及它们的区别
MVVM、MVC 和 MVP 都是前端架构模式,它们各自有不同的原理和特点。 MVC(Model-View-Controller) 原理:MVC 将应用程序分为三个部分:模型(Model)、视图(View)和控制器&a…...
WeChatMsg: 导出微信聊天记录 | 开源日报 No.108
Mozilla-Ocho/llamafile Stars: 3.5k License: NOASSERTION llamafile 是一个开源项目,旨在通过将 lama.cpp 与 Cosmopolitan Libc 结合成一个框架,将 LLM (Large Language Models) 的复杂性折叠到单个文件可执行程序中,并使其能够在大多数…...
Python学习之复习MySQL-Day3(DQL)
目录 文章声明⭐⭐⭐让我们开始今天的学习吧!DQL简介基本查询查询多个/全部字段设置别名去除重复记录 条件查询条件查询介绍实例演示 聚合函数什么是聚合函数?常见的聚合函数实例演示 分组查询分组查询语法where 和 having 的区别实例演示 排序查询语法实…...
AI超级个体:ChatGPT与AIGC实战指南
目录 前言 一、ChatGPT在日常工作中的应用场景 1. 客户服务与支持 2. 内部沟通与协作 3. 创新与问题解决 二、巧用ChatGPT提升工作效率 1. 自动化工作流程 2. 信息整合与共享 3. 提高决策效率 三、巧用ChatGPT创造价值 1. 优化产品和服务 2. 提高员工满意度和留任率…...
SpringBoot集成websocket(5)|(使用OkHttpClient实现websocket以及详细介绍)
SpringBoot集成websocket(5)|(使用OkHttpClient实现websocket以及详细介绍) 文章目录 SpringBoot集成websocket(5)|(使用OkHttpClient实现websocket以及详细介绍)[TOC] 前言一、初始…...
Kafka-Kafka基本原理与集群快速搭建(实践)
Kafka单机搭建 下载Kafka Apache Download Mirrors 解压 tar -zxvf kafka_2.12-3.4.0.tgz -C /usr/local/src/software/kafkakafka内部bin目录下有个内置的zookeeper(用于单机) 启动zookeeper(在后台启动) nohup bin/zookeeper-server-start.sh conf…...
Elasticsearch 进阶(索引、类型、字段、分片、副本、集群等详细说明)-06
笔记来源:Elasticsearch Elasticsearch进阶 进阶-核心概念 索引Index 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字…...
hive的分区表和分桶表详解
分区表 Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多。 静态分区表基本语法 创建分区表 create table dept_p…...
verilog语法进阶-分布式ram
概述: FPGA的LUT查找表是用RAM设计的,所以LUT可以当成ram来使用,也并不是所有的LUT都可以当成ram来使用,sliceM的ram可以当成分布式ram来使用,而sliceL的ram只能当成rom来使用,也就是只能读,不能写&#x…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
