Sql Server Profiler跟踪死锁

Sql Server Profiler一个很重要的应用场景就是监视分析死锁。

下面通过一个例子来学习Profiler是如何监视死锁的。

1. 创建测试数据模拟死锁, 创建表Table_A和Table_B并插入测试数据。

CREATE TABLE Table_A
(
    id int,
    num int
)

CREATE TABLE Table_B
(
    id int,
    num int
)

INSERT INTO Table_A VALUES(1,20)
INSERT INTO Table_A VALUES(2,33)

INSERT INTO Table_B VALUES(3,23)
INSERT INTO Table_B VALUES(4,32)

2. 打开SQL Server Profiler, 新建跟踪监视死锁,在事件选择中选择要监视的事件,运行跟踪:

3. 新建两个查询窗口,按照步骤执行语句。

-- 查询窗口1
BEGIN TRANSACTION   --step 1
UPDATE Table_A SET num = 55 WHERE id = 1 --step 1

SELECT * FROM Table_B --step 3

COMMIT TRANSACTION
-- 查询窗口2
BEGIN TRANSACTION  --step 2
UPDATE Table_B SET num = 66 WHERE id = 4 --step 2

SELECT * FROM Table_A --step 4
COMMIT TRANSACTION

4. 执行完step 4之后会发现有死锁发生,但是只有一个不是太详细的错误消息。

5. 回到Profiler界面,选择Deadlock graph,可以看到比较详细的死锁原因,鼠标放到椭圆上还可以显示死锁的语句,通过这些信息我们就可以更快更准确的找到死锁原因。

时间: 2024-10-15 06:18:10

Sql Server Profiler跟踪死锁的相关文章

SQL Server Profiler -- 调试死锁

SQL Server Profiler -- 调试死锁 跟踪一般的异常很简单,但处理死锁很难,死锁的消息号为1205,严重度为13.从服务器无法得到足够的数据来帮助判断到底发生了什么及为什么会发生这种状况,甚至服务器返回的错误消息也没有价值,这种消息所提供的唯一建议就是可以"重新运行该事务". SQL跟踪有提供帮助隔离和调试死锁状态的工具,但是SQL Server 2005把这些工具提升到了一个新的层次,它提供了一个非常有用的图形界面,帮助用户解决这些难以应付的问题.为了阐明到底提供了

SQL Server 2012笔记分享-33:SQL Server profiler跟踪

需求 使用SQL server profiler跟踪当前实例的所有常见活动,并将结果保存到文件中. ================================================================ 开始程序中选择SQL server profiler,如图. 选择文件--新建跟踪,如图. 连接到当前的SQL server实例,如图. 在跟踪属性里面配置跟踪名称.保存到的文件地址.保存到SQL报表.启用跟踪停止时间等,如图. 下图是一个跟踪启动后实时的跟踪情况,如图

统计分析SQL Server Profiler 跟踪的SQL

--跟踪文件读入到表中分析 SELECT * INTO ZGSJY FROM fn_trace_gettable('E:\wxxcdbprofiler.trc', default); --某时间内,最耗时SQL select TOP 100 SUBSTRING(Textdata,1,660) as '名称', count(*) as '数量', sum(duration/1000) as '总运行时间ms', avg(duration/1000) as '平均运行时间ms', avg(cpu)

怎样在sql server profiler跟踪时只显示自己关心的内容

当我们想知道.net程序到底执行了哪些SQL的时候,通常会使用sql server profiler,但是如果不加设置,我们程序执行的sql通常会被系统的SQL淹没,通过以下的方法,可以只显示我们需要的SQL. 跟踪属性-->事件选择-->列筛选器-->ApplicationName-->类似于-->输入.Net SqlClient Data Provider 此时跟踪的就是来自.Net开发的系统执行的sql语句. 如果不确定ApplicationName是什么,就先不过滤,

解决 SQL Server Profiler 跟踪[不断]出现检索数据

问题简单回顾: 当我们使用SQL Server Profiler根据数据时,有时刚打开什么也没干呢,就显示很多数据了,当我们用橡皮擦清除,没过两秒就又有了,如图: 是不是很恼火!~不怕,解决方案如下: 关掉Report服务就行了,打开Reporting Services停掉服务,总算清静了.

SQL Server Profiler的简单使用

SQL Server Profiler可以检测在数据上执行的语句,特别是有的项目不直接使用sql语句,直接使用ORM框架的系统处理数据库的项目,在调试sql语句时,给了很大的帮助. 之前写了使用SQL Server Profiler追踪死锁的文章<SQL Server Profiler追踪数据库死锁>,这里再简单写SQL Server Profiler使用过程中常用到的功能. 这里使用SQL Server 2008 R2版本 1. 在安装SQL Server 数据库时,请保证安装了SQL Se

Sql Server Profiler保存与重演跟踪

重演跟踪的作用 可以将一个跟踪当做测试工具,当按照正确的顺序调用某些存储过程是肯能会重新生成特定的故障. 跟踪模板 保存跟踪有四个选项(文件->另存为) 1. 跟踪文件选项用来将数据保存成二进制格式的文件中,保存数据最快速,同时也是占用磁盘字节最少的方法. 2. 跟踪表选项用来将数据保存至用户选择的数据库中一个新的或预先创建好的表.适用于适用T-SQL 操作或报告数据. 3. 跟踪XML文件选项将数据保存到一个XML格式的文件中. 4. 重演跟踪XML文件选项将数据保存至一个XML文本文件,但是

通过SQL Server Profiler来监视分析死锁

在两个或多个SQL Server进程中,每一个进程锁定了其他进程试图锁定的资源,就会出现死锁,例如,进程process1对table1持有1个排它锁(X),同时process1对table2请求1个排它锁(X),进程process2对table2持有1个排它锁(X),同时process2对table1请求1个排它锁(X) 类似这种情况,就会出现死锁,除非当某个外部进程断开死锁,否则死锁中的两个事务都将无限期等待下去. Microsoft SQL Server 数据库引擎死锁监视器定期检查陷入死锁

SQL Server Profiler查询跟踪的简单使用

1.打开SQL Server Management Studio,选择工具->SQL Server Profiler,或者直接从路径:开始/程序/Microsoft SQL Server 2008 R2 /性能工具/SQL Server Profiler. 2.连接数据库后,直接打开跟踪新增界面,或者在路径:文件->新建跟踪下新增跟踪,连接数据库 3.点击事件选择页,选择事件,将需要显示的列打上勾,这样才会在跟踪的时候,显示出这些列: 4.只看当前用户需要查看的数据库,这就用到列筛选器功能,点