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

  在两个或多个SQL Server进程中,每一个进程锁定了其他进程试图锁定的资源,就会出现死锁,例如,
    进程process1对table1持有1个排它锁(X),同时process1对table2请求1个排它锁(X),
    进程process2对table2持有1个排它锁(X),同时process2对table1请求1个排它锁(X)

  类似这种情况,就会出现死锁,除非当某个外部进程断开死锁,否则死锁中的两个事务都将无限期等待下去。

  Microsoft SQL Server 数据库引擎死锁监视器定期检查陷入死锁的任务。

  如果监视器检测到循环依赖关系,将选择其中一个任务作为牺牲品(通常是选择占资源比较小的进程作为牺牲品),然后终止其事务并提示错误1205

  这里我们通过SQL Server Profiler来监视分析死锁的发生过程,那样我们就会深刻理解死锁的成因。

  1.创建测试表。

  在 Microsoft SQL Server Management  Studio上,新建一个查询,写创建表DealLockTest_1 & DealLockTest_2两个表:

   脚本:

代码use 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,1Primary 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,1Primary 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
Go
    

it知识库通过SQL Server Profiler来监视分析死锁,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。