千家信息网

sql server中怎么排查死锁

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,sql server中怎么排查死锁,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。死锁的四个必要条件:互斥条件(Mutual excl
千家信息网最后更新 2026年10月31日sql server中怎么排查死锁

sql server中怎么排查死锁,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

死锁的四个必要条件:

互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。 非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。 循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

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

第一种是图形化监听:

sqlserver -->工具--> sql server profiler 登录后在跟踪属性中选择如下图:

监听到的死锁图形如下图

这里的描述大致是:有二个进程 一个进程ID是96, 另一个ID是348. 系统自动kill 掉了进程ID:96,保留了进程ID:348 的事务Commit。

上面死锁是由于批量更新出现PAG范围锁, 双方进程在同一分区索引资源上。ID96,348都请求想获取更新锁(U),各占排它锁(x)不释放,直到锁超时。

第二种是使用日志跟踪(errorlog)

以全局方式打开指定的跟踪标记

DBCC TRACEON(1222,-1)

DBCC TRACEON(1204,-1)

使用 EXEC master..xp_readerrorlog 查看日志。 由于记录的死锁信息太多,贴出几个重点说下(红色加粗表示)

Deadlock encountered .... Printing deadlock informationWait-for graphNULLNode:1 PAGE: 7:1:6229275 CleanCnt:2 Mode:IX Flags: 0x3Grant List 3:Owner:0x00000004E99B7880 Mode: IX Flg:0x40 Ref:1 Life:02000000 SPID:219 ECID:0 XactLockInfo: 0x0000000575C7E970SPID: 219 ECID: 0 Statement Type: UPDATE Line #: 84Input Buf: Language Event: exec proc_PUB_StockDataImportRequested by: ResType:LockOwner Stype:'OR'Xdes:0x0000000C7A905D30 Mode: U SPID:64 BatchID:0 ECID:59 TaskProxy:(0x0000000E440AAFE0) Value:0x8d160240 Cost:(0/0)NULLNode:2 PAGE: 7:1:5692366 CleanCnt:2 Mode:U Flags: 0x3Grant List 3:Owner:0x0000000D12099B80 Mode: U Flg:0x40 Ref:0 Life:00000001 SPID:64 ECID:0 XactLockInfo: 0x000000136B4758F0SPID: 64 ECID: 0 Statement Type: UPDATE Line #: 108Input Buf: RPC Event: Proc [Database Id = 7 Object Id = 907150277]

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

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

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

SPID: 219 进程ID

Event: exec proc_PUB_StockDataImport 执行的存储过程名

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

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

Mode:U 锁的模式 更新锁

RPC Event: Proc 远程调用

SPID: 64 进程ID

Victim Resource Owner:ResType:LockOwner Stype:'OR'Xdes:0x0000000C7A905D30 Mode: U SPID:64 BatchID:0 ECID:59 TaskProxy:(0x0000000E440AAFE0) Value:0x8d160240 Cost:(0/0)deadlock-listdeadlock victim=process956f4c8process-listprocess id=process956f4c8 taskpriority=0 logused=0 waitresource=PAGE: 7:1:6229275 waittime=2034 ownerId=2988267079 transactionname=UPDATE lasttranstarted=2018-04-19T13:54:00.360 XDES=0xc7a905d30 lockMode=U schedulerid=24 kpid=1308 status=suspended spid=64 sbid=0 ecid=59 priority=0 trancount=0 lastbatchstarted=2018-04-19T13:53:58.033 lastbatchcompleted=2018-04-19T13:53:58.033 clientapp=.Net SqlClient Data Provider hostname=VMSERVER76 hostpid=16328 isolationlevel=read committed (2) xactid=2988267079 currentdb=7 lockTimeout=4294967295 clientoption1=671088672 clientoption2=128056executionStackframe procname=Test.dbo.proc_CnofStock line=108 stmtstart=9068 stmtend=9336 sqlhandle=0x03000700c503123601ba25019ca800000100000000000000update dbo.pub_stockset UpdateTime=GETDATE()from pub_stock ajoin PUB_PlatfromStocktemp b on a.GUID=b.StockGuid

从上面的信息能看到kill 掉的是进程id是process956f4c8,

进程spid=64

lockMode=U 获取更新锁

isolationlevel=read committed

executionStack 执行的堆信息:

存储名 procname=Test.dbo.proc_CnofStock

语句 update dbo.pub_stock set UpdateTime=GETDATE() ..

clientapp 发起事件的来源

最后总结 避免死锁的解决方法

按同一顺序访问对象。

优化索引,避免全表扫描,减少锁的申请数目.

避免事务中的用户交互。

使用基于行版本控制的隔离级别。

将事务默认隔离级别的已提交读改成快照

SET TRANSACTION ISOLATION LEVEL SNAPSHOT

使用nolock去掉共享锁,但死锁发生在u锁或x锁上,则nolock不起作用

升级锁颗粒度(页锁,表锁), 以阻塞还代替死锁

关于sql server中怎么排查死锁问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

进程 死锁 资源 信息 条件 更新 事务 问题 跟踪 关键 图形 所在 数据 数据库 方式 方法 日志 更多 模式 环路 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 广州淘业互联网络科技 疫情对互联网科技公司影响 互联网科技开发公司 上海互联网科技有限公司 金融科技 互联网金融 百单互联网科技有限公司 互联网 科技服务平台 衡水科技产业互联网平台 农村开互联网科技讲堂 中盈科技互联网信息有限公司 科技互联网的估值 福建科技产业互联网发展 知域互联网科技有限公司大骗子 哈尔滨屹滨互联网科技有限公司 互联网在线教育科技创业 深圳无忧互联网科技 互联网科技股为什么大涨 图游互联网科技 上海万顺科技互联网有限公司招聘 合肥互联网科技公司 互联网科技的未来发展 国外互联网科技网站 济南华为互联网科技产业总部基地 广西互联网科技孵化中心 互联网企业科技类企业如何做账 中国互联网有什么科技 上海创道互联网络科技有限公司 互联网时代高科技布局 山东亿川互联网科技有限责任公司
0