SQLServer:镜像监控之oldest unsent transaction告警自愈

本文将介绍sqlserver镜像监控中出现Oldest Unsent Transaction Threshold告警如何自愈

镜像监控的数据及告警由Database Mirroring Monitor Job作业进行记录及触发,当Oldest Unsent Transaction超过Threshold时,触发代码为32040的错误信息。

告警的出现可能跟主体服务器实例和镜像服务器实例中的负载及它们的网络连接相关(博主在维护中遇到的情况大多是这样),但是在负载或网络连接恢复正常后,Oldest Unsent Transaction告警信息依然持续出现,直到backup database或者backup log后,告警才消失。

关于这个问题可在以下连接查看相关详细信息

Spurious Oldest Unsent Transaction alerts for database mirroring

从实例日志中可知告警信息如下:

The alert for ‘oldest unsent transaction‘ has been raised. The current value of ‘35‘ surpasses the threshold ‘30‘.

如果是只有一个数据库配置镜像,那么很容易定位出现告警的数据库;如果是多个数据库配置镜像,从告警信息中,我们无法得知到底是哪个数据库出现告警。

那么,实现自愈难点:

1. 告警数据是哪个

2. 如何计算oldest unsent transaction

通过分析Database Mirroring Monitor Job,我们可以知道Oldest Unsent Transaction告警的出现是由于sys.database_mirroring表的end_of_log_lsn与mirroring_failover_lsn之间相差较大,在Database Mirroring Monitor Job作业中进行Oldest Unsent Transaction计算时结果超出了Threshold,因此触发告警。

我们先总结一下:

(1) 告警是由于sys.database_mirroring表的end_of_log_lsn与mirroring_failover_lsn之间相差较大导致

(2) Database Mirroring Monitor Job作业能分析并得知是哪个数据库告警

(3) backup database、backup log后告警会消失

如何获取告警时的数据库名,有2种方法:

1. 改写Database Mirroring Monitor Job作业中相关的存储过程,自定义错误代码及信息

可参考SQL Sentry(SQL哨兵)的技术支持Steve Wright的博客,有详细的改写代码

2. 提取Database Mirroring Monitor Job作业中相关代码进行改写,自定义代码段进行获取数据

(1)建表

(2)收集数据

获取到告警相关数据后,我们就可以开始制定相关的“自愈”方案

先决条件(可根据实际情况添加):

1. 主体与镜像连接正常

select

database_id,mirroring_role,mirroring_role_desc,

mirroring_state,mirroring_state_desc,

mirroring_partner_instance,mirroring_partner_name

from sys.database_mirroring

where [email protected]_id

2. 主体无长事务正在运行

--查询执行时长超过dbm_monitor_alerts表time_behind阈值的事务

declare @database_id int

declare @time_behind int

set @database_id=5

select @time_behind=time_behind from msdb..dbm_monitor_alerts where [email protected]_id

select count(1) as long_transactions_count from sys.dm_tran_database_transactions dt,sys.dm_tran_active_transactions st

where dt.transaction_id=st.transaction_id

and [email protected]_id

and DATEDIFF(minute, st.transaction_begin_time, GETDATE())>@time_behind

3. 无备份在运行

SELECT *

FROM sys.dm_exec_requests AS er

WHERE [email protected]_id

and er.command in (‘BACKUP LOG‘,‘BACKUP DATABASE‘)

根据先决条件写成Oldest Unsent Transaction告警自愈脚本

部署方式:

1. 创建Sql Agent Alerts监控错误代码:32040,在Response选项中设置Execute Job为镜像告警处理作业

2. 在镜像告警处理作业中第1步为收集数据,第2步为告警自愈

至此,Oldest Unsent Transaction告警自愈已实现,根据实际监控情况进行相关细节的优化

时间: 2024-10-26 22:28:00

SQLServer:镜像监控之oldest unsent transaction告警自愈的相关文章

SQLServer数据库监控代码

SQLServer数据库监控代码: SELECT TOP 500 creation_time, total_worker_time, last_worker_time, max_worker_time, min_worker_time, SUBSTRING(st.text, (qs.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text) ELSE qs.statemen

添加自定义监控项目,配置邮件告警,测试告警,不发邮件的问题处理

添加自定义监控项目 例如需求:监控某台web的80端口连接数,并出图两步:1)zabbix监控中心创建监控项目:2)针对该监控项目以图形展现 对于第一步,需要到客户端定义脚本[[email protected] ~]# vim /usr/local/sbin/estab.sh#!/bin/bash##获取80端口并发连接数netstat -ant |grep ':80 ' |grep -c ESTABLISHED然后给他定义权限chmod 755 /usr/local/sbin/estab.sh

一个非常罕见的SQLServer镜像异常的排查处理过程

本周一晚上,收到一个数据库镜像SUSPEND和SYNCHRONIZING状态来回切换的告警,看到这个错误,其实也蛮常见的. 我们的修复步骤一般是这样的: 1. ALTER DATABASE *** SET PARTNER RESUME 如果这个步骤还不行,就需要触发一个事务,因为偶尔我们遇到SYNCHRONIZING状态的,可以触发事务修复,其原因可能是镜像由于网络原因冰了一下 2. CREATE TABLE dbo.tb_repair_mirroring_****(ID int), 然后删除该

Zabbix监控mysql配置及故障告警配置

本文主要介绍zabbix监控mysql的配置,包含使用zabbix自带模板监控mysql相关信息及自定义key监控mysql同步情况.同时介绍了触发器的创建及zabbix通过邮件方式告警配置. 一.配置自带模板监控mysql 1.提供配置文件模板 文件位置在源码包/usr/local/src/zabbix-3.0.4/conf/zabbix_agentd/userparameter_mysql.conf #cp/usr/local/src/zabbix-3.0.4/conf/zabbix_age

zabbix的添加自定义监控项目、配置邮件告警、测试告警

添加自定义监控项目 1. 需求:监控某台web服务器的80端口并发连接数,并设置图形. 2.分析需求: 在zabbix监控中心创建自定义监控项目; 针对该监控项目以图形展现; 3. 具体操作步骤: 在zabbix-agent端编辑自定义脚本 [[email protected] ~]# vim /usr/local/sbin/estab.sh 编辑脚本内容如下: #!/bin/bash ##获取80端口并发连接数 netstat -ant |grep ':80 ' |grep -c ESTABL

Linux监控(添加自定义监控项,配置邮件告警)

一.添加自定义监控项 需求:监控某台web的80端口连接数,并出图. 步骤: 1):zabbix监控中心创建监控项目 2):针对该监控项目以图形展现 第一步(需要到客户端定义脚本) [[email protected] ~]# vim /usr/local/sbin/estab.sh #!/bin/bash ##获取80端口并发连接数 netstat -ant |grep ':80 ' |grep -c ESTABLISHED [[email protected] ~]# chmod 755 /

linux监控平台搭建(3)添加自定义监控项目、配置邮件告警、测试警报、不发邮件的问题处理

添加自定义监控项目 很多的监控项,我们都是在配置的模板中设置的,但是模板的选择是不能完全满足到我们生产中 的实际需求.所以我们可以自定义监控项目,通过编写Shell脚本或者python脚本,在脚本中获取数据库中所需业务的数,然后在通过在监控项里添加这个脚本,将脚本获取到的数目以图表的形势展现.这样就有利于运维人员及时发现和分析问题. 需求: 需求:监控某台web的80端口连接数,并出图 两步:1)zabbix监控中心创建监控项目:2)针对该监控项目以图形展现 对于第一步,需要到客户端定义脚本 1

六十六、添加自定义监控项目、配置邮件告警、测试告警、不发邮件的问题处理

一.添加自定义监控项目 需求:监控某台web的80端口连接数,并出图 思路:先写一个脚本,能获取到数据,因为成图需要数据,再给这个脚本执行的权限,然后再用zabbix_get命令使服务端可以获得这些数据,再到服务端创建监控项目,再创建图形,有需要报警的再设置触发器. 两步:1)zabbix监控中心创建监控项目:2)针对该监控项目以图形展现 对于第一步,需要到客户端定义脚本,脚本名字位置都可以自定义 # vim /usr/local/sbin/estab.sh //内容如下 #!/bin/bash

添加自定义监控项目、配置邮件告警及不发邮件的问题处理

一.添加自定义监控项目 需求:监控某台web的80端口连接数,并出图两步:1)zabbix监控中心创建监控项目:2)针对该监控项目以图形展现对于第一步,需要到客户端定义脚本vim /usr/local/sbin/estab.sh //内容如下 #!/bin/bash ##获取80端口并发连接数 netstat -ant |grep ':80 ' |grep -c ESTABLISHED 给权限:chmod 755 /usr/local/sbin/estab.sh客户端上编辑配置文件 vim /e