【发布时间】:2016-05-16 11:23:23
【问题描述】:
在某些报表生成中,我们在 SQL Server 中面临死锁问题,所以我能做的是
select *
from sys.sysprocesses
where dbid = db_id()
and spid <> @@SPID
and blocked <> 0
and lastwaittype LIKE 'LCK%'
dbcc inputbuffer (SPID from above query result)
dbcc inputbuffer (blocked from above query result)
如果EventInfo 列包含“mytext”,我想终止该部分
Kill 53
53 不是 SPID 或在我看到我想终止其连接的特定文本时被阻止
每当死锁创建并且找到特定单词时,我想自动执行此过程以终止这些会话。没有用户间隔或动作。
【问题讨论】:
-
SQL 将在它认为合适的时候分配它自己的死锁受害者(iirc 它基于查询的估计操作员成本)。为什么你觉得有必要自己做这件事?最好先查看 SQL Server 中的隔离级别以阻止死锁。
-
发生这种情况时,所有用户都会收到错误消息并且条目无法保存。除非我做上述练习。 (现在有完成时间,这种情况经常发生)
-
如果你要走极端的自动杀死进程,那么你不妨走极端的开启读取提交快照隔离。
-
您可以将“SET DEADLOCK_PRIORITY LOW”添加到使用“mytext”运行查询的会话中。这样,如果发生死锁情况,如果与另一个优先级正常(默认)或高的会话发生死锁,该会话将被选为牺牲品
-
恭喜,检查dbareaction :)
标签: sql-server deadlock