SQL Server 死锁的告警监控

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 原文:SQL Server 死锁的告警监控今天这篇文章总结一下如何监控SQL Server的死锁,其实以前写过MS SQL 监控错误日志的告警信息,这篇文章着重介绍如何监控数据库的死锁,当然这篇文章不分析死锁产生的原因、以及如何解决死锁。
原文: SQL Server 死锁的告警监控

今天这篇文章总结一下如何监控SQL Server的死锁,其实以前写过MS SQL 监控错误日志的告警信息,这篇文章着重介绍如何监控数据库的死锁,当然这篇文章不分析死锁产生的原因、以及如何解决死锁。死锁(Dead Lock)的错误信息在sys.messages中的message_id1205,可以使用下面SQL查看。

 

 

   SELECT * FROM sys.messages WHERE message_id=1205

 

 

那么接下来,我们来设置一下死锁(Dead Lock)告警吧, 如下所示,当然你可以使用UI界面设置。

 

 
USE [msdb]
GO
 
IF NOT EXISTS(SELECT 1 FROM msdb.dbo.syscategories WHERE NAME='DBA_MONITORING' AND category_class=2)
BEGIN
 
EXEC msdb.dbo.sp_add_category
    @class=N'ALERT',
    @type=N'NONE',
    @name=N'DBA_MONITORING' ;
 
END
GO
 
IF EXISTS(SELECT 1 FROM msdb.dbo.sysalerts WHERE name='SQL Server Dead Lock Detected')
BEGIN
    EXEC msdb.dbo.sp_delete_alert @name=N'SQL Server Dead Lock Detected';
END
GO
 
 
IF NOT EXISTS(SELECT 1 FROM msdb.dbo.sysalerts WHERE name='SQL Server Dead Lock Detected')
BEGIN
EXEC msdb.dbo.sp_add_alert @name=N'SQL Server Dead Lock Detected', 
        @message_id=1205, 
        @severity=0, 
        @enabled=1, 
        @delay_between_responses=0, 
        @include_event_description_in=1, 
        @category_name=N'DBA_MONITORING', 
        @job_id=N'00000000-0000-0000-0000-000000000000'
END
GO
 
IF NOT EXISTS ( SELECT  *
                FROM    msdb.dbo.sysnotifications
                WHERE   alert_id = ( SELECT id
                                     FROM   msdb.dbo.sysalerts
                                     WHERE  name = 'SQL Server Dead Lock Detected'
                                   ) )
    BEGIN
 
        EXEC msdb.dbo.sp_add_notification @alert_name = N'SQL Server Dead Lock Detected',
            @operator_name = N'YourSQLDba_Operator', @notification_method = 1;
    END;
GO

 

执行上面脚本后,就会在SQL Server的告警里面新增一个名为SQL Server Dead Lock Detected'的告警,那么现在是否OK了呢?当然不是,我们来测试验证一下吧,首先准备测试的表和数据。

 

 

 

USE YourSQLDba;

GO

CREATE TABLE DEADLOCK1(ID INT DEFAULT(0));

CREATE TABLE DEADLOCK2(ID INT DEFAULT(0));

INSERT INTO DEADLOCK1 VALUES(1);

INSERT INTO DEADLOCK2 VALUES(1);

GO

 

 

 

 

如下所示,在两个会话窗口执行下面脚本,构造死锁出现的场景。

 

 

--会话窗口1执行下面SQL

BEGIN TRAN

  UPDATE DEADLOCK1 SET ID=ID+1;

  WAITFOR DELAY '00:00:20';

  SELECT * FROM DEADLOCK2

ROLLBACK TRAN;

 

 

EXEC master..sp_altermessage 1205, 'WITH_LOG', TRUE;

GO

 

 

 

--会话创建2执行下面SQL

 

BEGIN TRAN

  UPDATE DEADLOCK2 SET ID=ID+1;

  WAITFOR DELAY '00:00:20';

  SELECT * FROM DEADLOCK1

 

ROLLBACK TRAN;

 

 

 

如下截图所示,当死锁出现后,那么这个告警设置是否会发送邮件出来呢? 答案是否定的,你可以检查告警的历史情况,如下所示:

 

 

clip_image001

 

 

 

History界面,我们可以看到这个告警没有被触发,那么这个是什么原因呢?原因其实很简单,因为message_id1205的消息字段is_event_logged默认是0,这意味着出现错误消息将不会记入事件日志。我们可以使用小SQL将其值设置为1

 

 

 

 

clip_image002

 

 

EXEC master..sp_altermessage 1205, 'WITH_LOG', TRUE;

GO

 

 

执行上面脚本后,message_id1205的记录的is_event_logged字段值将被设置为1,当数据库出现死锁时,就会被记录到错误日志,当然这个只是简单消息的记录,如果你要跟踪、解决死锁问题,就需要记录死锁的详细信息,需要在服务端针对所有的Session开启Trace flag 1222

 

DBCC TRACEON(1222,-1);

 

 

clip_image003

 

相关实践学习
使用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
目录
相关文章
|
1天前
|
SQL 数据处理 API
实时计算 Flink版产品使用合集之遇到SQL Server锁表问题如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
7 0
|
1天前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
17 1
|
2天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之当 SQL Server 源数据库中的数据更新后,CDC 吐出的操作(op)是怎样的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 0
|
3天前
|
SQL XML Linux
SQL Server的版本
【5月更文挑战第14天】SQL Server的版本
18 3
|
3天前
|
SQL 关系型数据库 数据管理
Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
【5月更文挑战第14天】Microsoft SQL Server 是微软公司开发的一款关系型数据库管理系统
16 2
|
3天前
|
SQL 存储 数据库连接
LabVIEW与SQL Server 2919 Express通讯
LabVIEW与SQL Server 2919 Express通讯
|
3天前
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
14 4
|
3天前
|
SQL 数据可视化 Oracle
这篇文章教会你:从 SQL Server 移植到 DM(上)
这篇文章教会你:从 SQL Server 移植到 DM(上)
|
3天前
|
SQL 关系型数据库 数据库
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
SQL Server语法基础:入门到精通
|
3天前
|
SQL 存储 网络协议
SQL Server详细使用教程
SQL Server详细使用教程
31 2