当前位置:Gxlcms > 数据库问题 > 使用SQL SERVER PROFILER 捕获和分析思索

使用SQL SERVER PROFILER 捕获和分析思索

时间:2021-07-01 10:21:17 帮助过:23人阅读

Test --创建分析死锁使用到的两个表DealLockTest_1&DealLockTest_2 go Set Nocount On Go if object_id(DealLockTest_1)Is Not Null Drop Table DealLockTest_1 go Create Table DealLockTest_1 ( ID int Identity(1,1)Primary Key, Name nvarchar(512) ) if object_id(DealLockTest_2)Is Not Null Drop Table DealLockTest_2 go Create Table DealLockTest_2 ( ID int Identity(1,1)Primary Key, Name nvarchar(512) ) Go Insert Into DealLockTest_1(Name) Select name From sys.all_objects Insert Into DealLockTest_2(Name) Select name From sys.all_objects --SELECT * FROM DealLockTest_1 --SELECT * FROM DealLockTest_2

 创建好表和插入测试数据后,先执行脚本代码(因为我们不需要跟踪该代码),紧接着,我们就模拟两个会话,一个会话里面包含一个事务。这里我们就新建两个查询,其中第一个会话,是更新DealLockTest_1表后,等待5秒钟,更新DealLocktest_2.

--第一个会话 
Begin Tran 
Update DealLockTest_1 
Set Name=Ntest1
Where ID>0 
/*这里的Waitfor等待,是为了容易获取死锁的发生*/ 
Waitfor Delay00:00:15
--Update DealLockTest_2 
--Set Name=N‘test2‘
--Where ID>0 
SELECT * FROM DealLockTest_2
Commit Tran 
Go

 

代码写好后,我们先不要执行代码,接下来就写第二个会话代码; 第二个会话更新表的顺序,刚好与第一个会话相反,是更新DealLockTest_2表后,等待5秒钟,更新DealLocktest_1.

--第二个会话 
Begin Tran 
Update DealLockTest_2 
Set Name=Ntest1
Where ID>0 
/*这里的Waitfor等待,是为了容易获取死锁的发生*/ 
Waitfor Delay00:00:15 
--Update DealLockTest_1 
--Set Name=N‘test2‘
--Where ID>0 
SELECT * FROM DealLockTest_1
Commit Tran 

 

第二个会话代码,也先不要执行。

2.启动SQL Server Profiler,创建一个跟踪,使用: TSQL_Locks模板,在这个基础上面可以增加些自己想要的事件或者事件列,这里需要注意下,你可能只想筛选某个DB的资料,但是不能直接在DB那里进行筛选,不然的话你看不到 Deadlock graph事件,需要的话你可以将监控结果存在某个表里面再进行筛选。

技术图片

当然精简一些就是:

技术图片

点执行按钮,启动Trace。

 

3.执行测试代码&监视死锁。

转到 Microsoft SQL Server Management Studio界面,依次执行第一个会话和第二个会话的代码,稍稍等待15秒钟,我们就会发现其中一个会话收到报错消息

 

使用SQL SERVER PROFILER 捕获和分析思索

标签:lock   wait   studio   har   rac   前言   图片   死锁   dead   

人气教程排行