同一删除查询上的页面锁定
Posted
技术标签:
【中文标题】同一删除查询上的页面锁定【英文标题】:Pagelock on same delete query 【发布时间】: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>
对不起,如果这个问题太基本但我不是陷入僵局的专业人士。
【问题讨论】:
【参考方案1】:如果您的删除查询应返回唯一的单个行,则添加一个索引以帮助查找这些行(在您的示例中为“ConId”和“Key”上的索引)。
就目前而言,查询是锁定页面,有时您会在同一页面中有两行,从而导致您遇到死锁
【讨论】:
以上是关于同一删除查询上的页面锁定的主要内容,如果未能解决你的问题,请参考以下文章
使用文件输入后,Javascript 警报会锁定 IOS Chrome 上的页面
MS Access 直通选择查询导致 SQL Server 中的页面锁定