oracle主从表分离怎么实时更新数据_高可用数据库UDB主从复制延时的解决

8a1f88755d9e05a06039a81d73c4f54f.png

MySQL主从复制的延时一直是业界困扰已久的问题。延时的出现会降低主从读写分离的价值,不利于数据实时性较高的业务使用MySQL。

UDB是UCloud推出的云数据库服务,上线已达六年,运营了数以万计的UDB MySQL实例。除了提供高可用、高性能、便捷易用的产品特性,团队还平均每天帮助用户解决2-3起MySQL实例主从复制延时的问题。从大量实践中我们总结了主从复制延时的各种成因和解决方法,现分享于此。

延时问题的重要性

主从复制机制广泛应用在UDB的内部实现中:UDB创建的从库和主库就采用了“主从复制”的数据复制;另外,UDB的主打产品“UDB MySQL高可用实例”,也是采用2个数据库互为主从的“双主模式”来进行数据复制,而双主模式的核心就是主从复制机制。

如果主从复制之间出现延时,就会影响主从数据的一致性。

在高可用复制场景下,我们在UDB高可用容灾设计上考虑到,若出现主备数据不一致的场景,默认是不允许进行高可用容灾切换的。因为在主备数据不一致的情况下,此时发生容灾切换,且在新的主库写入了数据,那么从业务角度上,会产生意想不到的严重后果。

复制延时问题,不仅在UDB高可用中会带来不良后果,在只读从库的场景下,若从库产生复制延时,也可能会对业务造成一定影响,比如在业务上表现为读写不一致——新增/修改数据查不到等现象。

由此可见,主从复制的延时问题在数据库运营中需要特别关注。一般来说,DBA在库上执行’SHOW SLAVE STATUS’,并且观察

‘Seconds_Behind_Master’的值,就能够了解当前某个数据库和它的主库之间的数据复制延时。这个值是如此的重要,因此在UDB的监控界面上,我们将这个值单独抽取来,设计了“从库同步延时”监控项,以便于运维人员能够直接在控制台上观察。

7e75c9ecc911202f73dcb131182611a2.png

生产环境中延时问题的分析及解决

我们将最常见的主从复制延时案例总结为几类,以下是相关案例的现象描述、原因分析和解决方法汇总。

◆ 案例一:主库DML请求频繁

某些用户在业务高峰期间,特别是对于数据库主库有大量的写请求操作,即大量insert、delete、update等并发操作的情况下,会出现主从复制延时问题。

现象描述

我们通过观察主库的写操作的QPS的值,会看到主库的写操作的QPS值突然升高,伴随主从复制延时的上升,可以判断是由于主库DML请求频繁原因造成的。

34a5051e6164901bf817bf1400dea84d.png

如上图,可以看出,在17:58分左右QPS突增,查看控制台上的写相关QPS,也有相应提升。而QPS突增的时间,对应的延时也在逐步上升,如下图所示。

1b782088909e545543a5a6df00d73e98.png

原因分析

经过分析,我们认为这是由于主库大量的写请求操作,在短时间产生了大量的binlog。这些操作需要全部同步到从库,并且执行,因此产生了主从的数据复制延时。

从深层次分析原因,是因为在业务高峰期间的主库写入数据是并发写入的,而从库SQL Thread为单线程回放binlog日志,很容易造成relaylog堆积,产生延时。

解决思路

如果是MySQL 5.7以下的版本,可以做分片(sharding),通过水平扩展(scale out)的方法打散写请求,提升写请求写入binlog的并行度。

如果是MySQL 5.7以上的版本,在MySQL 5.7,使用了基于逻辑时钟(Group Commit)的并行复制。而在MySQL 8.0,使用了基于Write Set的并行复制。这两种方案都能够提升回放binlog的性能,减少延时。

29d0aaa75a4a4fe3a0083962244631b2.png

◆ 案例二:主库执行大事务

大事务指一个事务的执行,耗时非常长。常见产生大事务的语句有:

  • 使用了大量速度很慢的导入数据语句,比如:INSERT INTO $tb、SELECT * FROM $tb、LOAD DATA INFILE等;
  • 使用了UPDATE、DELETE语句,对于一个很大的表进行全表的UPDATE和DELETE等。

当这个事务在从库执行回放执行操作时,就有可能会产生主从复制延时。

现象描述

我们从SHOW SLAVE STATUS的结果进行分析,会发现 Exec_Master_Log_Pos 字段一直未变,且second_behinds_master持续增加,而 Slave_SQL_Running_State 字段的值为”Reading event from the relay log”;同时,分析主库binlog,看主库当前执行的事务,会发现有一些大事务,这样基本可以判定是执行大事务的原因导致的主从复制延时。

d91d3f5f414c6d38c34fe22915e94d9d.png

原因分析

当大事务记录入binlog并同步到从库之后,从库执行这个事务的操作耗时也非常长,这段时间,就会产生主从复制延时。

举个例子,假如主库花费200s更新了一张大表,在主从库配置相近的情况下,从库也需要花几乎同样的时间更新这张大表,此时从库延时开始堆积,后续的events无法更新。

解决思路

对于这种情况引起的主从复制延时,我们的改进方法是:拆分大事务语句到若干小事务中,这样能够进行及时提交,减小主从复制延时。

◆ 案例三:主库对大表执行DDL语句

DDL全称为 Data Definition Language ,指一些对表结构进行修改操作的语句,比如,对表加一个字段或者加一个索引等等。当DDL对主库大表执行DDL语句的情况下,可能会产生主从复制延时。

现象描述

从现象上,如果从库执行SHOW SLAVE STATUS的输出中,检查Exec_Master_Log_Pos一直未动,在排除主库执行大事务的情况下,那么就有可能是在执行大表的 DDL。这一点结合分析主库binlog,看主库当前执行的事务就可以进行确认。

DDL语句的执行情况,可以进一步细分现象来更好地判断:

1. DDL未开始,被阻塞,这时SHOW SLAVE STATUS的结果能检查到Slave_SQL_Running_State为waiting for table metadata lock,且Exec_Master_Log_Pos不变;

b7d29b137fc513dadca5707922b8f809.png

2. DDL正在执行,SQL Thread单线程应用导致延时增加。这种情况下观察SHOW SLAVE STATU的结果能发现Slave_SQL_Running_State为altering table,而Exec_Master_Log_Pos不变。

942d667c6905c751584d6ae1ecb4f88b.png

如果有上述的现象,那么很有可能主库对大表执行DDL语句,同步到从库并在从库回放时,就产生了主从复制延时。

原因分析

DDL导致的主从复制延时的原因和大事务类似,也是因为从库执行DDL的binlog较慢而产生了主从复制延时。

解决思路

遇到这种情况,我们主要通过SHOW PROCESSLIST或对information_schema.innodb_trx做查询,来找到阻塞DDL语句,并KILL掉相关查询,让DDL正常在从库执行。

DDL本身造成的延时难以避免,建议考虑:

  • 避免业务高峰,尽量安排在业务低峰期执行 ;
  • set sql_log_bin=0后,分别在主从库上手动执行DDL(此操作对于某些DDL操作会造成数据不一致,请务必严格测试),这一条如果用户使用云数据库UDB,可以联系UCloud UDB运维团队进行协助操作。

◆ 案例四:主库与从库配置不一致

如果主库和从库使用了不同的计算资源和存储资源,或者使用了不同的内核调教参数,可能会造成主从不一致。

现象描述

我们会详细比对主库和从库的性能监控数据,如果发现监控数据差异巨大,结合查看主从的各个配置情况,即可作出明确判断。

原因分析

各种硬件或者资源的配置差异都有可能导致主从的性能差异,从而导致主从复制延时发生:

  • 硬件上:比如,主库实例服务器使用SSD磁盘,而从库实例服务器使用普通SAS盘,那么主库产生的写入操作在从库上不能马上消化掉,就产生了主从复制延时;
  • 配置上:比如,RAID卡写策略不一致、OS内核参数设置不一致、MySQL落盘策略不一致等,都是可能的原因。

解决思路

考虑尽量统一DB机器的配置(包括硬件及选项参数)。甚至对于某些OLAP业务,从库实例硬件配置需要略高于主库。

◆ 案例五:表缺乏主键或合适索引

如果数据库的表缺少主键或者合适索引,在主从复制的binlog_format设置为’row’的情况下,可能会产生主从复制延时。

现象描述

我们进行数据库检查时,会发现:

  • 观察SHOW SLAVE STATUS的输出,发现Slave_SQL_Running_State为Reading event from the relay log;
  • SHOW OPEN TABLES WHERE in_use=1的表一直存在;
  • 观察SHOW SLAVE STATUS的Exec_Master_Log_Pos字段不变;
  • mysqld进程的CPU接近100%(无读业务时),IO压力不大。

这些现象出现的情况下,可以认为很可能有表缺乏主键或唯一索引。

原因分析

在主从复制的binlog_format设置为’row’的情况下,比如有这样的一个场景,主库更新一张500万表中的20万行数据。binlog在row格式下,记录到binlog的为20万次update操作,也就是每次操作更新1条记录。如果这条语句恰好有不好的执行计划,如发生全表扫描,那么每一条update语句需要全表扫描。此时SQL Thread重放将特别慢,造成严重的主从复制延时。

解决思路

这种情况下,我们会去检查表结构,保证每个表都有显式自增主键,并协助用户建立合适索引。

◆ 案例六:从库自身压力过大

有时候,从库性能压力很大的情况下,跟不上主库的更新速度,就产生了主从复制延时。

现象描述

观察数据库实例时,会发现CPU负载过高,IO利用率过高等现象,这些导致SQL Thread应用过慢。这样就可以判断是因为从库自身压力过大引起主从复制延时。

原因分析

部分UCloud用户对于数据库的主从会使用读写分离模式,读请求大部分在从库上执行。在业务有大量读请求的场景下,从库会产生比主库大得多的性能压力。有的用户甚至会在从库运行十分耗费计算资源的OLAP业务,这也对从库造成了更高的性能挑战,这些都会造成主从复制的延时。

解决思路

这种情况下,我们会建议用户建立更多从库,打散读请求,降低现有从库实例的压力。对于OLAP业务来说,可以专门建立一个从库来做OLAP业务,并对这个从库,允许适当的主从复制延时。

总结

在使用MySQL的主从复制模式进行数据复制时,主从复制延时是一个需要考量的关键因素。它会影响数据的一致性,进而影响数据库高可用的容灾切换。

在遇到数据库之间出现主从复制延时的情况下,我们团队基于过往经验,归纳出以下方法与流程来协助排查问题:

  • 通过SHOW SLAVE STATUS与SHOW PROCESSLIST查看现在从库的情况。(顺便也可排除在从库备份时的类似原因);
  • 若Exec_Master_Log_Pos不变,考虑大事务、DDL、无主键,检查主库对应的binlog及position即可;
  • 若Exec_Master_Log_Pos变化,延时逐步增加,考虑从库机器负载,如IO、CPU等,并考虑主库写操作与从库自身压力是否过大。

UDB的高可用、高性能、便捷易用,可以大量减轻使用者的运维负担。在使用过程中, UDB团队也会利用多年累积的运营经验,帮助用户及时分析、排查问题原因,并给出合理的解决方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vp翻N_VP刀叨叨:如何让G胖给你唱生日歌

VS看起来好凶喵▼ESL欧洲&独联体区VP发推庆祝击败OG昨晚第九个比赛日,OG与VP的比赛无疑是大家关注的焦点,一边是TI双冠王,一边是状态开始回升的俄罗斯毛熊,大家都很期待他们能给我们带来精彩的比赛。不过比赛结果却出乎了不少…

秒后面的单位是什么_为什么兰州马拉松很难跑出好成绩?

如果要评选中国最难PB的马拉松,西北第一马兰州马拉松当之无愧可以排名第一。为什么这么说呢?先来看下今年兰马的一组数据,不管是精英选手还是大众选手,成绩都要比个人PB慢。国内男子冠军是管油胜,成绩为2小时18分58秒&…

surface php老是用不了,surface pro7触摸屏没反应怎么办

发生该问题的原因可能是:有很多可能原因,从校准到硬件或者固件。故障排查可以找到根本原因。1. 清洁屏幕将柔软的无绒布蘸上水或眼镜清洗液来清洁屏幕,但不要直接在屏幕上喷洒液体。2. 重启 Surface注意:你将需要连接键盘或鼠标到…

小优优(u盘歌曲顺序调整)_电脑从U盘启动,这三种方式你知道吗?

Windows 可以运行在数千台不同配置的电脑上, 但安装 Windows 10又是另一回事, 具体取决于你的电脑是否安装了现有的 Windows 10,以及早期版本,像是 Windows7, Windows XP, 或完全不同的操作系统(如 macOS 或 Linux)。大多数情况, 安装系统都依赖于主硬盘HDD或SSD以外的设备启动…

unity vs没有智能提示_Unity博主营地你不可不知的Unity C#代码小技巧

「Unity博主营地第一期」于2019年11月开启,现已收到数百篇原创投稿。每周根据Unity Connect社区反馈,帮助大家发现最优质、最干货、最受欢迎的博文作品。开门见山的说,这篇文章干到挤不出一点水分。文章主要针对Unity初学者,相信读…

python123数值运算_python123中 Hello World的条件输出 和数值运算

描述 获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪…

苹果sf字体_苹果UI设计的改变意味着什么?

WWDC虽然已经过去了一段时间,虽然没有什么硬件产品,但还是给我们带来了许多新的惊喜。但我们这篇文章不谈技术问题,只谈苹果的UI变化。因为这可能是近10年来苹果第二次颠覆性的升级,上次还是2013年的iOS7的全面扁平化。从设计的层…

cuda卸载_Ubuntu18.04英伟达显卡驱动、Cuda安装

一、显卡驱动安装1. 准备工作禁用BIOS中的secure boot,因为此方法使用第三方源安装显卡驱动,不禁止secure boot会导致安装的驱动不能使用,禁用也不会有多大安全隐患。2. 禁用nouveau禁用nouveau,这是ubuntu默认使用的开源显卡驱动…

内存条能4+8混插吗?_笔记本内存条双通道提升有多大?实测FORESEE,你知道好处在哪吗...

不知道大家发现了没,最近存储类产品、内存条普遍价格都涨起来了,后悔年前没买内存条给我的暗夜精灵3升升级,至今还插着一根8G的条子,其实日常用也够了。不过,今年打算做做视频,搞搞线上直播,所以…

python计算期望值_机器学习:计算方差时为何除以n-1

小弟准备了数据结构、Java、大数据、AI、面试题、python等各种资料 需要领取等朋友麻烦 转发此文,然后私信【学习】即可获取设样本均值为​,样本方差为​,总体均值为​,总体方差为​,那么样本方差​有如下公式&#xf…

程序的图标无法改变_安卓微信7.0.7内测版发布,细节更新,小程序功能优化

昨天,微信 7.0.7 for Android 内测版悄然发布,如何参加内测可以咨询本人。按照近来的惯例,安卓的内测版的功能会在随后的更新iOS正式版中体现,并且要先于安卓正式版发布。下面我们就来简单介绍一下本次更新的具体内容。一、「…」…

linux设置系统自动开机,Linux系统中设置开机自动运行的两种方法

有时可能会需要在重启时或者每次系统启动时运行某些命令或者脚本。我们要怎样做呢?本文中我们就对此进行讨论。 我们会用两种方法来描述如何在 CentOS/RHEL 以及 Ubuntu 系统上做到重启或者系统启动时执行命令和脚本。 两种方法都通过了测试。方法 1 – 使用 rc.loc…

论文页眉奇偶页不同怎么设置_怎样设置Word页眉页脚奇偶页不同?

来自Excel之家,侵联系删有伙伴问,怎么设置满足下列要求的页眉页脚:页眉要求正文部分偶数页居中对齐为“XXXX毕业设计(论文)”,奇数页居中对齐是各章章名;字体采用宋体5号。页眉之下有一条下划线。封面和目录页没有页眉…

如何检测python是否安装_使用Python检查系统中是否安装了一个软件包?

How can I check is some package is installed in my system. My system is Linux, but even better if it could works in other OSs. I mean OS specific package (like could be *.rpm or *.deb). Is there any python module or script that could do it? 解决方案 To fi…

android 自定义控件的宽高_巧用Handler获取View控件信息

众所周知,在Android实际开发中,对于某些复杂多变的情况,控件的位置摆放、大小控制并非是xml类型的layout文件完全可以搞定的。此时,我们通常会使用Java代码来通过动态计算,将指定的控件摆放在相应的位置,并…

如何ping端口_干货 | 如何正确处理常见的8大网络故障

网络故障是最容易出现的,也是比较难解决的问题,尤其是经常跟电脑及交换机打交道的朋友。今天就和大家来说说日常工作中,常见的网络故障详细分析及解决方法。交换机刚加电时网络无法通信【故障现象】交换机刚刚开启的时候无法连接至其他网络&a…

c语言程序设计第2章,C语言程序设计第2章 结构化程序设计与算法.ppt

C语言程序设计第2章 结构化程序设计与算法.ppt现在人们公认的具有“良好风格”的程序设计方法之一是所谓的“结构化程序设计方法”。其核心是规定了算法的三种基本结构顺序结构、选择结构和循环结构。按照结构化程序设计的观点,任何算法功能都可以通过三种基本程序结…

python读取word指定内容_python读取word 中指定位置的表格及表格数据

1.Word文档如下:2.代码 # -*- coding: UTF-8 -*- from docx import Document def readSpecTable(filename, specText): document Document(filename) paragraphs document.paragraphs allTables document.tables specText specText.encode(utf-8).decode(utf-8)…

xml建模包括以下_为什么要进行建模仿真?

没有“模型”作为基础的话,很多当今的前沿概念将无法真正落地!今天,数字孪生、人工智能、工业互联网、边缘计算这些概念在整个产业里非常的火热,但是,要知道,如果这些概念没有“模型”作为基础的话&#xf…

中兴没有云服务器_中国移动携手中兴通讯推进5G网络云建设

11月23日消息今年8月,中国移动通信集团公司党组成员、副总裁李慧镝在“中国信息化百人会2020年峰会”上表示,中国移动正大力推进网络云化部署,实现云网融合,NFV网络云服务器规模达6万台。2020北京国际信息通信展期间,中…