sql server中死锁排查的示例分析

  介绍

这篇文章主要介绍sql server中死锁排查的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强>死锁的四个必要条件:

<李>

互斥条件(互斥):资源不能被共享,只能由一个进程使用。

<李>

请求与保持条件(持有和等待):已经得到资源的进程可以再次申请新的资源。

<李>

非剥夺条件(没有优先购买权):已经分配的资源不能从相应的进程中被强制地剥夺。

<李>

循环等待条件(循环等待):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

<强>现总结下查看死锁的常用二种方式:

<强>第一种是图形化监听:

,——在状态"置疑"工具——比;sql server profiler ,登录后在跟踪属性中选择如下图:

 sql server中死锁排查的示例分析”>,,</p> <p>,,监听到的死锁图形如下图</p> <p> <img src=

 sql server中死锁排查的示例分析”>,,,</p> <p>这里的描述大致是:有二个进程一个进程ID是96,另一个ID是348只,系统自动杀死掉了进程ID: 96年,保留了进程ID: 348的事务提交。</p> <p>上面死锁是由于批量更新出现PAG范围锁,双方进程在同一分区索引资源上.ID96,348都请求想获取更新锁(U),各占排它锁(x)不释放,直到锁超时。</p> <p> <强>第二种是使用日志跟踪(errorlog) </强> </p> <p>以全局方式打开指定的跟踪标记</p> <p>,,,,,,,DBCC TRACEON (1222 1) </p> <p>,,,,,,DBCC TRACEON (1204 1) </p> <p>使用,<代码>执行主. .xp_readerrorlog> </代码查看日志。由于记录的死锁信息太多,贴出几个重点说下(红色加粗表示)</p> <pre类= Deadlock  encountered  .... Printing  Deadlock 信息   Wait-for 图   零   节点:1,   页面:7:1:6229275  CleanCnt: 2,模式:IX 旗帜:0 x3   Grant  List  3:   老板:0 x00000004e99b7880 模式:IX  Flg: 0 x40 裁判:1,生活:02000000,SPID: 219年,ECID: 0, XactLockInfo: 0 x0000000575c7e970   SPID:, 219, ECID:, 0, Statement 类型:,UPDATE  Line  #: 84   Input  Buf:, Language 事件:exec  proc_PUB_StockDataImport   Requested 通过:   ResType: LockOwner 药栓:& # 39;或# 39;xd: 0 x0000000c7a905d30 模式:,U  SPID: 64年,BatchID: 0, ECID: 59, TaskProxy: (0 x0000000e440aafe0),值:0 x8d160240 成本:(0/0)   零      节点:2,   页面:7:1:5692366  CleanCnt: 2,模式:U 旗帜:0 x3   Grant  List  3:   老板:0 x0000000d12099b80 模式:U  Flg: 0 x40 裁判:0,生活:00000001,SPID: 64年,ECID: 0, XactLockInfo: 0 x000000136b4758f0   SPID:, 64, ECID:, 0, Statement 类型:,UPDATE  Line  #: 108   Input  Buf:, RPC 事件:,Proc  [Database  Id =, 7, Object  Id =, 907150277)

- - - - - - - - - -节点:1部分显示的几个关键信息:

,页7:1:6229275 (所在数据库ID 7,1分区,6229275行数)

,模式:IX 锁的模式,意向排它锁

, SPID: 219,进程ID

,事件:exec proc_PUB_StockDataImport 执行的存储过程名

- - - - - - - node: 2部分显示的几个关键信息

,页7:1:5692366 (所在数据库ID 7,1分区,5692366行数)

,模式:U锁的模式,更新锁

, RPC事件:Proc远程调用

, SPID: 64,进程ID

Victim  Resource 所有者:   ResType: LockOwner 药栓:& # 39;或# 39;xd: 0 x0000000c7a905d30 模式:,U  SPID: 64年,BatchID: 0, ECID: 59, TaskProxy: (0 x0000000e440aafe0),值:0 x8d160240 成本:(0/0)   deadlock-list   deadlock =process956f4c8受害者   进程列表   process  id=process956f4c8  taskpriority=0, logused=0, waitresource=页:,7:1:6229275  waittime=2034, ownerId=2988267079, transactionname=UPDATE    lasttranstarted=2018 - 04 - 19 t13:54:00.360  xd=0 xc7a905d30  lockMode=U  schedulerid=24, kpid=1308,状态=suspended  spid=64, sbid=0, ecid=59,优先级=0,trancount=0,   lastbatchstarted=2018 - 04 - 19 t13:53:58.033  lastbatchcompleted=2018 - 04 - 19 t13:53:58.033  clientapp=.Net  SqlClient  Data  Provider 主机名=VMSERVER76  hostpid=16328,   isolationlevel=read  committed  (2), xactid=2988267079, currentdb=7, lockTimeout=4294967295, clientoption1=671088672, clientoption2=128056   executionStack   frame  procname=Test.dbo.proc_CnofStock 行=108,stmtstart=9068, stmtend=9336, sqlhandle x03000700c503123601ba25019ca800000100000000000000=0   update  dbo.pub_stock   set  UpdateTime=获取当前日期()   得到pub_stock    join  PUB_PlatfromStocktemp  b 提醒a.GUID=b.StockGuid

sql server中死锁排查的示例分析