≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

SQL Server deadlock跟踪的4种的简单示例

人气:420 时间:2020-06-07

这篇文章主要为大家详细介绍了SQL Server deadlock跟踪的4种的简单示例,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

 

前言

 

最近写程序常会遇到deadlock victim,每次一脸懵逼。研究了下怎么跟踪,写下来记录下。文中介绍的非常详细,对大家具有一定的参考学习价值,下面话不多说了,来一起看看详细的介绍吧

 

建测试数据

 

代码如下:


CREATE DATABASE testdb;
 
GO
 
USE testdb;
 
CREATE TABLE table1
(
id INT IDENTITY PRIMARY KEY,
student_name NVARCHAR(50)
 
)
 
INSERT INTO table1 values ('James')
INSERT INTO table1 values ('Andy')
INSERT INTO table1 values ('Sal')
INSERT INTO table1 values ('Helen')
INSERT INTO table1 values ('Jo')
INSERT INTO table1 values ('Wik')
 
 
CREATE TABLE table2
(
id INT IDENTITY PRIMARY KEY,
student_name NVARCHAR(50)
 
)
 
INSERT INTO table2 values ('Alan')
INSERT INTO table2 values ('Rik')
INSERT INTO table2 values ('Jack')
INSERT INTO table2 values ('Mark')
INSERT INTO table2 values ('Josh')
INSERT INTO table2 values ('Fred')

第一段sql,先运行只更新table1部分

代码如下:


USE testdb;
 
-- Transaction1
BEGIN TRAN
 
UPDATE table1
SET student_name = student_name + 'Transaction1'
WHERE id IN (1,2,3,4,5)
 
UPDATE table2
SET student_name = student_name + 'Transaction1'
WHERE id = 1
 
COMMIT TRANSACTION

第二段sql,只运行更新table2部分

代码如下:


USE testdb;
 
-- Transaction2
BEGIN TRAN
 
UPDATE table2
SET student_name = student_name + 'Transaction2'
WHERE id = 1
 
UPDATE table1
SET student_name = student_name + 'Transaction2'
WHERE id IN (1,2,3,4,5)
 
COMMIT TRANSACTION

再运行,第一段sql更新table2,运行第二段sql更新table1,死锁问题重现。

【图片暂缺】

 

说下跟踪死锁的方法:

 

 

1.使用trace log跟踪,执行如下sql开启1222和1204 flag,死锁信息会在sql server 日志中输出。

 

代码如下:


DBCC TRACEON (1204, -1)
DBCC TRACEON (1222, -1)

下图是1204输出的信息

【图片暂缺】

下图是1222输出的信息

【图片暂缺】

 

2.使用sql server profiler进行跟踪

 

点击Tools -> sql server profiler 选择sql locks模板

【图片暂缺】

运行当发生死锁时会自动捕获,点击dead lock paragraph查看死锁

【图片暂缺】

 

3.使用扩展事件跟踪,方法只适用于sql server 2012版本,08r2版本无法直接使用。

 

依次点击Management -> Extended Events - >system health - >package0.event_file

【图片暂缺】

输入deadlock回车,可以点击details 把内容另存为xdl文件再打开,或点击deadlock查看图

【图片暂缺】

 

4.使用windows性能计数器检测到死锁再去sql中查询

 

命令行输入:perfmon 或者 perfmon /sys

选择实例:SQL Server :Locks \\ Number of DeadLocks/sec \\ _Total

实时查看:

【图片暂缺】

下面的查询提供了自从上次重启以来在本服务器上发生的所有死锁:

SELECT cntr_value AS NumOfDeadLocks

FROM sys.dm_os_performance_counters

WHERE object_name = 'SQLServer:Locks'

AND counter_name = 'Number of Deadlocks/sec'

AND instance_name = '_Total'

 

总结

 

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对四海网的支持。

本文来自:http://www.q1010.com/179/9048-0.html

注:关于SQL Server deadlock跟踪的4种的简单示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • 解决SqlServer 各版本 sa帐户不能登录问题
  • Windows使用性能监视器监控SqlServer的常见指标示例
  • 调整SQLServer2000运行数据库结构的简单示例
  • 解决SQLServer远程连接失败的问题
  • 数据库触发器DB2和SqlServer区别解析
  • 解决在Azure上部署Sqlserver网络访问不了示例
  • 在sqlserver中如何使用CTE解决复杂查询问题
  • SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(下)
  • SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
  • SQLServer中merge函数用法分析
上一篇:SQL Server 2012数据库自动备份的简单示例
下一篇:SQL Server GO命令循环使用的简单示例
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。