什么是事务(进程 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)死锁锁定?的主要内容,如果未能解决你的问题,请参考以下文章

减少SQL Server数据库死锁的技巧

MySQL 5.6 死锁两次锁定相同的行?

Innodb 死锁,看起来像 tx 锁定了自己

由于 2 个会话同时访问相同的存储过程,导致事务(进程 ID)死锁

关于死锁的问题

同一删除查询上的页面锁定