SQLServer镜像状态异常排查

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

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        

1

备库的应用队列

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

2

备库的应用速度大概在 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';

3

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 应该已经修复。

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

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

考虑单点时间过久,只能重搭解决,但重搭后追日志还是出现此问题,怀疑可能有坏页或者其它未知情况,计划在维护时间做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')

6

7

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

dbcc opentran('businesscard')

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

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

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
2月前
|
SQL 数据库
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)之解决方案
271 0
|
4月前
|
SQL 存储 测试技术
SQL Server 查询超时问题排查
【8月更文挑战第14天】遇到SQL Server查询超时,先检查查询复杂度与索引使用;审视服务器CPU、内存及磁盘I/O负载;审查SQL Server配置与超时设置;检测锁和阻塞状况;最后审查应用代码与网络环境。每步定位问题根源,针对性优化以提升查询效率。务必先行备份并在测试环境验证改动。
321 0
|
5月前
|
SQL 监控 数据库
SQL Server 查询超时问题排查
【7月更文挑战第8天】排查 SQL Server 查询超时涉及五个主要方面:检查复杂查询、评估服务器性能、审视配置参数、更新统计信息和分析执行计划。关注点包括查询的结构(如连接、子查询和索引),服务器资源(CPU、内存、网络延迟),连接和内存设置,以及统计信息的时效性。通过这些步骤可定位并解决性能瓶颈。
128 0
|
7月前
|
SQL
sqlserver死锁排查
sqlserver死锁排查
140 0
|
SQL 监控 安全
SQL Server 高可用性(五)数据库镜像
数据库镜像是SQL Server 2005 sp1正式引入的一项数据库级的高可用性技术。
344 1
SQL Server 高可用性(五)数据库镜像
|
SQL 安全 关系型数据库
RDS SQL Server通过配置镜像为高性能模式提高写入性能
RDS SQL Server通过配置镜像为高性能模式提高写入性能
|
SQL 关系型数据库 数据库
RDS for SQL server 空间问题排查汇总
SQL server的空间问题一直有客户在询问,今天就给大家汇总讲解下SQL server 的全部空间开销
RDS for SQL server 空间问题排查汇总
|
关系型数据库 索引 RDS
用 ssms 排查 rds for sqlserver 性能问题
ssms 即Microsoft sqlserver management studio , 需要在本地安装后才能使用. 本文以 sqlserver 2017 management studio 工具排查日常使用中遇到的性能问题.
2621 0
|
数据库 数据安全/隐私保护 Windows
SQLSERVER权限异常小记
前一段突然发现原来能正常使用的ssms 在连接 sqlserver 后所有库都打不开了.无论打开哪个库都提示无法访问数据库xxx(objectExplorer).如图: 初步怀疑是 ssms 的哪个组件损坏了, 那就用命令打开吧.
2309 0
|
SQL Go 数据库
SQLSERVER排查CPU占用高的情况
SQLSERVER排查CPU占用高的情况 原文地址为:SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据.
1452 0

相关产品

  • 云数据库 RDS SQL Server 版