sqlserver 死锁监控

sqlserver日志默认没有记录死锁的。所以如果没有提前配置监控的情况下,你无法找到死锁的日志进行定位。所以大家有时候会看到别人文章里写什么事务日志,扩展事件等方式去查找历史的sqlserver出现的死锁原因这是没有办法的。

所以,提前配置死锁监控很重要。

死锁监控配置

(1)sqlserver日志监控

打开1222和1204跟踪,这样子死锁的信息会记录在error log中。这样子可以通过存储过程xp_readerrorlog进行查看。

首先,打开死锁监控

dbcc traceon (1222,-1)

dbcc traceon (1204,-1)

然后,就可以等待死锁再次发生,如果再次发生,则可以通过存储过程查询。

exec xp_readerrorlog

这个存储过程是有参数的,如果你没有写参数,他默认查询的是sqlserve日志编号为0(当前的日志文档,不是当天,指的是前一一个文件的时间节点到当前时间的所有日志)的日志。

如果你想选择参数,从左往右是一共6个,如下解释

1)日志编号——整型,如下图所示的编码,一次只能指定一个编号 ,不能多个。

2)查找的日志类型——整型,1是sqlserver的日志,2是sqlserver代理日志。

3)要查找的字符串,用双引号包着。——字符串

4)要查找的字符串——字符串,3和4没有区别,也就是你规定两个要查找的字符串,如果你只需要查找一个,第二个写NULL就可以。

5)查询的开始日期——字符串,格式是YYYY-MM-DD hh:mm:ss

6)查询的结束日期——字符串,格式是YYYY-MM-DD hh:mm:ss

直接给一个示例(参数一定要用双引号引着,要不然会报错)

exec xp_readerrorlog 1,1,"deadlock",null,"2019-05-01 00:00:00","2019-06-01"

(2)XEvent的session监控

在XEvent(扩展事件)配置死锁监控的一个session。然后开启session就可以监控了。

那如何新建一个Session呢?

右键选中会话,单击【新建会话向导】

不使用任何模板

本来到输入deadlock进行选择的地方就可以停下来,但是个人建议一定要用文件的形式存储,勾选了【启用文件滚动更新】可以在空间不足时新日志直接记录覆盖,保证最新的死锁日志文件存储在系统中。

配置死锁监控

当然,如果你的死锁是可以重现的,那你可以用以下方法进行跟踪:

【工具】->【sql server profile】

出来的界面就可以实时监控是否有死锁,而且如果有死锁的话,可以直接以图形化的方式显示出来,非常的友好。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章