Replication--复制延迟的诊断和解决
要解决复制延迟问题,需要首先定位复制延迟发生点,再找出复制延迟的原因,再做相应处理。
复制延迟发生点:
1. 发布服务器
2. 分发服务器
3. 订阅服务器
4. 发布服务器与分发服务器和分发服务器与订阅服务器之间的网络
延迟测试方式:
1. 使用复制token
参考:http://www.cnblogs.com/TeyGao/p/3521130.html
2. 使用复制存储过程sp_replmonitorhelpXXX
--========================================================== --参考:http://msdn.microsoft.com/zh-cn/library/ms188073.aspx --返回发布服务器上属于一个或多个发布的订阅的当前状态信息, --并为每个返回的订阅返回一行。 在分发服务器上对分发数据库 --执行此存储过程,用于监视复制。--@publication_type=0:事务发布 --@mode=3:只返回带错误或已生成在达到阈值度量指标时发出的警告的订阅。 EXEC distribution.dbo.sp_replmonitorhelpsubscription @publisher = null, @publisher_db = null, @publication = null, @publication_type =0, @mode = 3, @topnum = 0, @exclude_anonymous = null, @refreshpolicy = 0--=========================================================== --参考:http://msdn.microsoft.com/zh-cn/library/ms186304.aspx --返回发布服务器上一个或多个发布的当前状态信息。 在分发服务器 --的分发数据库上执行此存储过程,用于监视复制。--@publication_type=0:事务发布 EXEC distribution.dbo.sp_replmonitorhelppublication @publisher = null, @publisher_db = null, @publication = null, @publication_type = 1, @refreshpolicy =0 --==============================================================
View Code
3. 使用sp_replcounters
--================================================ --为每个发布数据库返回有关滞后时间、吞吐量和事务计 --数的复制统计信息。 此存储过程在发布服务器的任何数 --据库中执行。 --参考:http://msdn.microsoft.com/zh-cn/library/ms190486.aspxexec sp_replcounters --================================================
View Code
延迟诊断顺序:
1. 如果只有一个订阅延迟,优先检查该订阅服务器
2. 如果有多个订阅延迟,优先检查发布服务器和分发服务器
--==================================================================
发布服务器上延迟分析
原因1: 镜像或ALWAYS ON 阻塞了复制
诊断方式:使用镜像监视器或相关存储过程查看镜像同步情况
处理建议:
建议A:等待镜像同步完成或取消镜像,
建议B:使用TRACE FLAG 1448(慎用)
原因2:磁盘IO存在压力
诊断方式:使用性能计数器查看日志所在磁盘的磁盘队列
处理建议:
建议A:提升日志所在磁盘的性能或将日志文件放于独享磁盘上
原因3:虚拟日志文件数量过多
诊断方式: 使用DBCC LOGINFO来查看虚拟日志数量
处理建议:
建议A: 虚拟日志文件数量应保持一个合理的数量(数量过少和过多都会出现问题)
原因4:数据库事务日志过多,而复制相关日志较少
诊断方式:
--========================================================== --查看是否因为发布库日志太多导致日志读取慢 Use <published database> GO -- Total records in the log SELECT count(*) FROM ::fn_dblog(NULL, NULL) GO -- Records marked for REPLICATION SELECT count(*) FROM ::fn_dblog(NULL, NULL) WHERE Description='REPLICATE' GO
View Code
处理建议:
建议A: 设置合理的索引维护及其他会导致大量日志写入操作的运行时间
建议B: 业务拆分,将与复制不相关的业务拆分出去
原因5:复制发布article上有较大事务运行
诊断方式:
--======================================================== --使用发布库日志来查找大事务 --在发布库上运行 SELECT [Transaction ID],COUNT(1) AS LogCount FROM ::fn_dblog(NULL, NULL) WHERE Description='REPLICATE' GROUP BY [Transaction ID] HAVING COUNT(1)>500 --=============================================================== --在分发库上查找大事务 USE distribution GO SELECT xact_seqno, COUNT(*) AS [COUNT] INTO #MSrepl_commands FROM dbo.MSrepl_commands GROUP BY xact_seqno HAVING COUNT(*)>100 SELECT t.xact_seqno,t.entry_time,c.[count] FROM MSrepl_Transactions t INNER JOIN #MSrepl_commands c ON t.xact_seqno=c.xact_seqno ORDER BY c.count DESC,t.entry_time
View Code
处理建议:
建议A: 按照业务逻辑拆分事务
建议B: 修改复制相关的配置文件设置
--==================================================================
分发服务器上延迟分析
延迟原因1:磁盘IO存在压力
诊断方式:使用性能计数器查看日志所在磁盘的磁盘队列
处理建议:
建议A:提升日志所在磁盘的性能或将日志文件放于独享磁盘上
延迟原因2:分发数据库写日志等待
诊断方式:使用DMV查看在分发数据库上存在写日志等待
处理建议:
建议A:提高磁盘性能
建议B:将不同的发布服务器拆分到不同的分发库上,减少分发库对应的发布数量
延迟原因3:复制分发清理作业和日志读取代理作业相互阻塞
诊断方式:检查分发库上命令数量和事务数量,检查是否因为复制设置不合理保持过多的事务和命令
参考:http://blogs.msdn.com/b/apgcdsd/archive/2012/09/07/10347168.aspx
处理建议:
建议A: 设置合理的事务保持期和发布属性设置
建议B: 修改复制分发清理作业的运行时间
延迟原因4:复制事务表和复制命令表包含过多的数据
诊断方式:检查表中数据分表属于那些发布article
-============================================================= --当前msrepl_commands表中命令涉及表的分布情况 USE distribution; GO WITH cte AS( SELECT a.xact_seqno,b.entry_time, REPLACE(CONVERT(NVARCHAR(1024), SUBSTRING(a.command,17,1024)),'[dbo].[sp_MS','') commands FROM dbo.MSrepl_commands a(NOLOCK) JOIN MSrepl_transactions b(NOLOCK) ON a.xact_seqno=b.xact_seqno ) SELECT SUBSTRING(commands,9,CHARINDEX(']',commands)-9),COUNT(1) FROM cte WHERE CHARINDEX(']',commands)>9 GROUP BY SUBSTRING(commands,9,CHARINDEX(']',commands)-9) ORDER BY COUNT(1) DESC
View Code
处理建议:
建议A: 将不同的发布服务器拆分到不同的分发服务器上。
建议B:分析数据变化情况,是否可以减少数据变更
PS: 曾遇到一个案例,按照开发部门需求,搭建复制订阅,该发布表按天记录数据,当天数据变化特别频繁,导致复制延迟较高。调研发现订阅端业务只访问前一天数据,于是在发布端新增一张表,每天凌晨将头一天数据导入此表,并对该表搭建复制订阅。更改前每天要传递数千万次甚至上亿次事务命令给订阅服务器,更改后只需要传递数百万事务命令道订阅服务器。
--==================================================================
订阅服务器上延迟分析
延迟原因1:订阅库上有阻塞
诊断方式:使用DMV检查事务阻塞
处理建议:
建议A:优化订阅上查询
建议B:使用较低事务隔离级别或NOLOCK
延迟原因2:订阅库日志写等待
诊断方式:使用DMV查看在分发数据库上存在写日志等待
处理建议:
建议A:提高磁盘相应速度。
--==================================================================
相关补充:
1.查看阻塞和资源等待:http://www.cnblogs.com/TeyGao/p/3522958.html
2.查看数据库文件级别IO操作情况:
SELECT * FROM sys.dm_io_virtual_file_stats(DB_ID(),null) AS T2
--====================================================================
转载于:https://www.cnblogs.com/TeyGao/p/3611318.html
Replication--复制延迟的诊断和解决相关推荐
- MySQL备库复制延迟的原因及解决办法
背景 今天有同事问我主从复制延迟会影响高可用切换的 RTO 怎么办,这个不需要做实验,我可以直接回答,所以有了以下赶鸭子的文章,都是一线运维经验之谈,建议四连:点赞.收藏.转发.在看. 复制延迟的原因 ...
- mysql 复制延迟诊断_新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准
转载自公众号:玩转MySQL,作者:洪斌 一直以来 MySQL 复制延迟观测是不完善的,既无法观测到真实的主从延迟,也无法支持复杂的复制拓扑环境,常用的 second_behind_master 指标 ...
- MySQL5.7号称永久解决了复制延迟问题的并行复制
一.缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下. 一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->IO Thread (从) - ...
- MySQL异步复制延迟解决的架构设计与运维架构ppt
<MySQL异步复制延迟解决的架构设计与运维架构ppt> 下载地址:网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731216.html
- mysql5.7延迟_[MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7-阿里云开发者社区...
原文:[MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7 一.缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下. 一般主从复制,有三个线程参与,都是单线程: ...
- MYSQL从节点延迟问题原因及解决
MYSQL从节点延迟问题原因及处理方法 mysql 因为异步同步,只能达到最终一致性,而无法达到实时一致性,所以理论是有延迟在所难免. 在mysql 5.7 版本实现了多线程同步,缓解了延迟问题,但不 ...
- MySQL之 从复制延迟问题排查
一.从库复制延迟问题 1.可能的原因如下 (1)主从服务器处于不同的网络之中,由于网络延迟导致: (2)主从服务器的硬件配置不同,从服务器的硬件配置(包括内存,CPU,网卡等)远低于主服务器: (3) ...
- mysql 两个时间相差大于24小时的数据_MySQL 主从同步延迟的原因及解决办法(仅学习)...
原文链接:https://blog.csdn.net/hao_yunfeng/article/details/82392261 Mysql主从基本原理,主要形式以及主从同步延迟原理 (读写分离)导致主 ...
- mysql 5.7 延迟同步_完全解决 MySQL 5.7 主从复制的延迟问题
1.问题发现 sysbench使用以下配置对MySQL进行测试 sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua \ -- ...
最新文章
- Docker如何将本地镜像发布到阿里云上去
- oracle索引与mysql区别_MySQL和Oracle中的唯一性索引从差别(r12笔记第83天)
- lda 可以处理中文_用python处理文本数据
- 关于SEL的简单总结
- Flask学习之基础知识与功能
- 非刚性人脸跟踪 —— 面部特征检测器
- 2017杭州云栖大会FAQ(持续更新中)
- python资源网站_Python 博客网站资源
- MyEclipse部署,将一个项目引入到两个项目;多项目部署
- CSS选择器之基本选择器总结
- PMP 项目进度管理 -CPI SPI CV SV
- 不花冤枉钱就能回家 --- 程序员教你如何高效抢票
- 【UE4 C++】角色拾取、替换武器(下)
- Windows显卡切换
- 空间矢量数据处理 | 第一讲:矢量数据的读入与保存
- 采样率150KSPS同步触发多板卡同步2路RS485D的3U PXIE采集卡
- 计算机考试题 实操,计算机考试实操题.doc
- css字体改颜色,css怎么改字体颜色?
- bizhubc226说明书_让打印文件不再单调 柯尼卡美能达 bizhub C226为你服务
- 快速恢复三菱M70,M80绝对位置。驱动电池没电丢零点后,重 设零点一时爽,要调换刀点和分中对刀时可就呵呵呵了
热门文章
- 推荐系统遇上深度学习(三十九)-推荐系统中召回策略演进!
- Matlab线性/非线性规划优化算法(2)
- fragtats中平均临近距离(PROX_MN)的具体解释
- oracle数据库报错1033,Oracle联机日志出现错误ORA-16038 ORA-19809 ORA-00312 解决
- 如果服务器开机显示NObootable,电脑开机出现“No bootable device”的解决办法
- 设置linearlayout最大高度_ICEM CFD网格设置参数意义
- 计算机桌面上的公文包怎么加密,公文包的用法
- python把模块装到文件夹中_把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案...
- linux学习查看日志命令
- 信安精品课:第4章网络安全体系与网络安全模型精讲笔记