title: SQLServer · CASE分析 · 镜像状态异常排查

author: 天铭

问题

用户实例的某个DB一直处于Synchronizing无法达到SYNCHRONIZED状态,用了很多修复方法并且进行了镜像重搭,但依旧没有达到正常同步态

排查

Synchronizing态通常和redo queue或者send queue有关

主库的问题DB当前的TPS在3K左右

begin tran
DECLARE @value int
DECLARE @value2 int
select @value=CONVERT(int,cntr_value) from sys.dm_os_performance_counters
where object_name like '****:database%%'and instance_name='businesscard' and counter_name like 'Transactions/    sec%%'
waitfor delay '00:00:01'
select @value2=CONVERT(int,cntr_value) from sys.dm_os_performance_counters
where object_name like '****:database%%'and instance_name='businesscard' and counter_name like 'Transactions/    sec%%'
select @value2-@value
commit tran

主库的发送队列

begin tran
DECLARE @value int
DECLARE @value2 int
select @value=CONVERT(int,cntr_value) from sys.dm_os_performance_counters
where counter_name = 'Log Send Queue KB' and instance_name='businesscard';
waitfor delay '00:00:01'
select @value2=CONVERT(int,cntr_value) from sys.dm_os_performance_counters
where counter_name = 'Log Send Queue KB' and instance_name='businesscard';
select @value*1./1024 as first_second_MB,@value2*1./1024 as second_second_MB,(@value2-@value)*1./1024 as diff_MB
commit tran

备库的应用队列

begin tran
DECLARE @value int
DECLARE @value2 int
select @value=CONVERT(int,cntr_value) from sys.dm_os_performance_counters
where counter_name = 'Redo Queue KB' and instance_name='businesscard'
waitfor delay '00:00:01'
select @value2=CONVERT(int,cntr_value) from sys.dm_os_performance_counters
where counter_name = 'Redo Queue KB' and instance_name='businesscard';
select @value*1./1024 as first_second_MB,@value2*1./1024 as second_second_MB,(@value2-@value)*1./1024 as diff_MB
commit tran

备库的应用速度大概在 14MB

begin tran
DECLARE @value bigint
DECLARE @value2 bigint
select @value=CONVERT(bigint,cntr_value)*1./1024/1024 from sys.dm_os_performance_counters
where counter_name = 'Redo Bytes/sec' and instance_name='businesscard';
waitfor delay '00:00:01'
select @value2=CONVERT(bigint,cntr_value)*1./1024/1024 from sys.dm_os_performance_counters
where counter_name = 'Redo Bytes/sec' and instance_name='businesscard';
select (@value2-@value) as speed_MB
commit tran

假设忽略主库新产生的日志,追上主库需要的时间 32min
select 27338.278320/14/60 =32.545569428566
如果再算上主库新产生的大概在40min左右

查看其它counter值

select cntr_value,* from sys.dm_os_performance_counters
where counter_name in(
'Log Send Flow Control Time (ms)','Bytes Sent/sec','Log Bytes Sent/sec',
'Log Compressed Bytes Sent/sec','Log Harden Time (ms)','Log Send Flow Control Time (ms)',
'Log Send Queue KB','Mirrored Write Transactions/sec','Pages Sent/sec',
'Send/Receive Ack Time','Sends/sec','Transaction Delay' )
and instance_name='businesscard';

Send/Receive Ack Time:
Milliseconds that messages waited for acknowledgement from the partner, in the last second.
This counter is helpful in troubleshooting a problem that might be caused by a network bottleneck, such as unexplained failovers, a large send queue, or high transaction latency. In such cases, you can analyze the value of this counter to determine whether the network is causing the problem.

开始怀疑问题在网络上,该主机某个网络组建已经升级了,但是备机的组件未升级
等待确认的时间稳定在800ms左右,对比主备网络组件都升级的主机在100ms左右,这个值跟事务大小有关,目前发现有问题的地方可能是这里

begin tran
DECLARE @value bigint
DECLARE @value2 bigint
select @value=CONVERT(bigint,cntr_value) from sys.dm_os_performance_counters
where counter_name = 'Send/Receive Ack Time' and instance_name='_Total';
waitfor delay '00:00:01'
select @value2=CONVERT(bigint,cntr_value) from sys.dm_os_performance_counters
where counter_name = 'Send/Receive Ack Time' and instance_name='_Total';
select (@value2-@value) as 'Send/Receive Ack Time'
commit tran

另外查看errorlog,时有告警镜像的状态应该是介于suspended和SYNCHRONIZING之间,错误类似KB,2008r2 应该已经修复。

半小时后发送队列又变大了

备库的应用队列减小的也非常慢

考虑单点时间过久,只能重搭解决,但重搭后追日志还是出现此问题,怀疑可能有坏页或者其它未知情况,计划在维护时间做checkdb。

--- ---
checkdb发现没有坏页,说明数据是ok的,那么问题可能在日志了。

select log_reuse_wait,log_reuse_wait_desc,* from sys.databases where name='businesscard'

log_reuse_wait_desc 为 ACTIVE_TRANSACTION

ACTIVE_TRANSACTION:事务处于活动状态。
一个长时间运行的事务可能存在于日志备份的开头。在这种情况下,可能需要进行另一个日志备份才能释放空间。
事务被延迟(仅适用于 SQL Server 2005 Enterprise Edition 及更高版本)。“延迟的事务”是有效的活动事务,因为某些资源不可用,其回滚受阻。

dbcc opentran('businesscard')

15号的事务今天19号,导致中间的日志全是活动日志无法截断,跟用户确认kill掉后,再次查看活动日志

dbcc opentran('businesscard')

发现结果一直在变化,可以理解为活动日志一直在往前走(越来越少),再次备份后活动日志恢复到7G左右,重搭成功。

事实上这是很早以前处理的一个CASE,当时排查了很久才找到root cause但现在看来问题其实很简单,希望大家下次遇到可以很快处理好

SQLServer镜像状态异常排查相关推荐

  1. 咕咕机显示服务器请求异常,咕咕机云服务器状态异常

    咕咕机云服务器状态异常 内容精选 换一换 如果对弹性云服务器执行重启/关机操作,弹性云服务器长时间(大于30分钟)处于"正在重启"/"正在关机"状态时,建议执行 ...

  2. 【视频点播最佳实践】视频点播播放异常排查

    阿里云视频点播是集音视频采集.编辑.上传.自动化转码处理.媒体资源管理.分发加速.视频播放于一体的一站式音视频点播解决方案.但是对于使用者来说经常遇到的问题即是视频点播中的视频如何对外提供服务,并且当 ...

  3. K8S集群中Pod挂载Storageclass存储卷异常排查思路

    K8S集群中Pod挂载Storageclass存储卷异常排查思路 故障描述: Jenkins是在K8S集群中部署的,Jenkins使用的各种资源以及全部创建了,但是Jenkins的Pod依旧无法启动, ...

  4. openStack镜像状态以及创建流程学习

    glance镜像组件介绍 目录 什么是 Image 以及为什么要用 Image? 什么是Glance镜像服务 Glance几个重要概念 Glance的基本架构和三大核心模块 Glance数据库设计 G ...

  5. 采购订单的审批状态异常的处理,审批状态为:预审批或是处理中的单据

    针对采购订单的审批状态异常的处理,审批状态为:预审批或是处理中的单据 可删除最后一次审批历史 select hr.name, poh.segment1, poh.org_id from po_head ...

  6. 服务器流量异常排查步骤(查看进程的流量)

    服务器流量异常排查步骤(查看进程的流量) 参考文章: (1)服务器流量异常排查步骤(查看进程的流量) (2)https://www.cnblogs.com/pangguoping/p/5836725. ...

  7. java.net.SocketTimeoutException: Read timed out 异常排查

    java.net.SocketTimeoutException: Read timed out 异常排查 参考文章: (1)java.net.SocketTimeoutException: Read ...

  8. HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查

    HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查 参考文章: (1)HttpCli ...

  9. 一次SocketException:Connection reset 异常排查

    一次SocketException:Connection reset 异常排查 参考文章: (1)一次SocketException:Connection reset 异常排查 (2)https:// ...

最新文章

  1. linux 内核调试方法
  2. Buck开关电源拓扑结构分析
  3. matlab-游标及查询
  4. SpringCloud动态获取yml文件里面的自定义配置
  5. linux mysql select_MySQL-Select语句高级应用
  6. java和asp.net core,VS 2019教程:创建ASP.NET Core Web App
  7. ajax中的url怎么写_简历中的自我评价怎么写,才能成功吸引HR?
  8. python正则表达式怎么看_python如何使用正则表达式
  9. Android Phonebook编写联系人UI加载及联系人保存流程(六)
  10. 电脑常见故障_笔记本电脑常见故障键盘失效
  11. js中的Math对象及属性
  12. 云原生发展趋势-2022
  13. k8s关于Orphaned pod <pod_id> found,volume paths are still present on disk 的解决方法
  14. 绘制 polygons and polylines:OpenCV版本
  15. 12个EMC设计标准电路
  16. 多多买菜代收被叫停?拼多多这样回应
  17. C++动态开辟数组空间
  18. 推荐常用算法之-基于内容的推荐
  19. vue打开外部页面_vue项目中嵌套外部网页
  20. 《iPad开发从入门到精通》——6.3节站站查询

热门文章

  1. 路径中 “./“、“../“、“/“ 代表的意思
  2. 盖瑞解剖学: 临床实践的解剖学基础 Gray‘s Anatomy: The Anatomical Basis of Clinical Practice 高清英文原版
  3. 社区医学的研究方法:调查、流行病学研究、方案评估、临床试验Research Methods in Community Medicine: Surveys, Epidemiological Resear
  4. 单片机学习--3D动画演示单片机工作原理
  5. 北斗导航 | Python实现读取GPS(txt)数据并画轨迹
  6. java struts 框架_java struts 框架编程
  7. 64 大小_32位和64位Windows系统差别在哪里
  8. java 微信群发多图文_[Java教程]httpClient实现微信公众号消息群发
  9. JVM实战与原理---内存回收策略
  10. Python-OpenCV 笔记5 -- 几何变换(Geometric Transformations)