【发布时间】:2014-07-21 16:39:25
【问题描述】:
尝试执行delete 语句时有时会出现死锁。死锁图在受害者和“赢家”列表中显示相同的 delete 语句(process list 显示具有 2 个不同进程 ID 的相同查询)。资源列表显示相同的objectname,但不同的pageid。
谁能解释这里出了什么问题以及为什么会发生这种死锁?两个进程如何在同一个对象上获得UIX?它与表索引有关吗?如果是这样,我在表的复合主键上有一个聚集索引,另外还有一个非聚集索引......
<deadlock>
<victim-list>
<victimProcess id="process7b8d0784e8" />
</victim-list>
<process-list>
<process id="process7b8d0784e8" taskpriority="0" logused="1048" waitresource="PAGE: 103:10:395854 " waittime="1007" ownerId="11148456875" lockMode="U" status="suspended" isolationlevel="read committed (2)" currentdb="103">
<inputbuf>
(@0 nvarchar(128),@1 nvarchar(128))DELETE [dbo].[MyDummyTable]
WHERE (([ConId] = @0) AND ([Key] = @1))
</inputbuf>
</process>
<process id="process59bbdd2108" taskpriority="0" logused="2508" waitresource="PAGE: 103:11:334598 " waittime="921" ownerId="11148454338" lockMode="U" status="suspended" isolationlevel="read committed (2)" currentdb="103">
<inputbuf>
(@0 nvarchar(128),@1 nvarchar(128))DELETE [dbo].[MyDummyTable]
WHERE (([ConId] = @0) AND ([Key] = @1)) </inputbuf>
</process>
</process-list>
<resource-list>
<pagelock fileid="10" pageid="395854" dbid="103" subresource="FULL" objectname="7C91.dbo.MyDummyTable" id="lock3c5c753480" mode="UIX" associatedObjectId="498496">
<owner-list>
<owner id="process59bbdd2108" mode="UIX" />
</owner-list>
<waiter-list>
<waiter id="process7b8d0784e8" mode="U" requestType="wait" />
</waiter-list>
</pagelock>
<pagelock fileid="11" pageid="334598" dbid="103" subresource="FULL" objectname="7C91.dbo.MyDummyTable" id="lock46e37fdc80" mode="UIX" associatedObjectId="498496">
<owner-list>
<owner id="process7b8d0784e8" mode="UIX" />
</owner-list>
<waiter-list>
<waiter id="process59bbdd2108" mode="U" requestType="wait" />
</waiter-list>
</pagelock>
</resource-list>
</deadlock>
对不起,如果这个问题太基本但我不是陷入僵局的专业人士。
【问题讨论】:
标签: sql sql-server deadlock