什么是事务(进程 ID 116)死锁锁定?
Posted
技术标签:
【中文标题】什么是事务(进程 ID 116)死锁锁定?【英文标题】:What is transaction(Process ID 116 )deadlocked on Lock? 【发布时间】:2018-08-24 10:08:20 【问题描述】:我从应用程序收到以下错误消息:
事务(进程 ID 116)在 Lock | 上被死锁沟通 与另一个进程缓冲资源并被选为死进程 锁定受害者。退回交易。
我已经阅读了博客 "https://blog.sqlauthority.com/2007/05/16/sql-server-fix-error-1205-transaction-process-id-was-deadlocked-on-resources-with-another-process-and-has-been-chosen-as-the-deadlock-victim-rerun-the-transaction/"
但我想知道什么是(进程 ID 116)以及错误的原因是什么?
问候,
拉胡尔。
【问题讨论】:
它是当时运行事务的 sessionid。您可以运行 dbcc inputbuffer(116),这将找到运行的查询。 您能发布示例代码和场景详细信息吗?它可以帮助我们了解您的问题。 【参考方案1】:Rahul,这表示 session_id。如果您熟悉 Adam Machanic 的 sp_WhoIsActive,您可以运行它。或通过http://whoisactive.com/下载。
除了您的特定问题之外,此存储过程还提供了许多很好的见解,包括阻止信息和其他诊断信息。这可能有助于您检查错误原因。
【讨论】:
【参考方案2】:什么是(进程 ID 116)?
SQL Server 中的 SPID 是一个服务器进程 ID。这些进程 ID 本质上是 SQL Server 中的会话。每次应用程序连接到 SQL Server 时,都会创建一个新连接(或 SPID)。进程 ID 116 只不过是 SPID 116
使用 EXEC sp_who2
查找 SQL Server 中的所有会话。
什么原因出错??
当任何两个 SQL Server 进程 ID 锁定一个 单独的资源,他们每个人都试图访问 资源被其他进程锁定。
修复/解决方案:
尝试使用 SQL Server Profiler 分析死锁。 http://msdn.microsoft.com/en-us/library/ms188246.aspx
在每个涉及事务(锁定)的脚本中,尽可能晚地开始事务并尽快提交。
尝试根据您的脚本设置最佳锁定时间值。使用@@LOCK_TIMEOUT
在每个脚本中设置 DEADLOCK_PRIORITY 值,这样优先进程就不会死锁。使用SET DEADLOCK_PRIORITY
对每个 TSQL 查询使用查询提示。
在 select 语句中使用WITH NOLOCK
(不需要等待/锁定时)
【讨论】:
以上是关于什么是事务(进程 ID 116)死锁锁定?的主要内容,如果未能解决你的问题,请参考以下文章