在试图IX锁我不明白为什么这种僵局正在发生。 右边的交易影响(更新)只有一行,它看起来像这样:
update table1
set column1 = 'value1'
where key1 = 1
我假设IX请求是其中行(正在更新)所在的页面,对不对?但这不可能,因为这个页面上有一个共享锁。或者是其他页面的IX请求?
也有可能防止IX锁(也许一些提示)?因为我知道我只更新了一行,而且无意更新此事务中的其他任何内容。
更新:
表1 - 由五列(改名)和一个主键:
CREATE TABLE [dbo].[Table1](
[Key1] [int] IDENTITY(1,1) NOT NULL,
[Column1] [nvarchar](50) NOT NULL,
[Column2] [int] NOT NULL,
[Column3] [nvarchar](50) NULL,
[Column4] [int] NOT NULL,
constraint PK_Key1 primary key([Key1])
)
其他事务由包含了很多连接表的一个单一的SELECT语句,包括表1 - 出于安全原因,我不能在这里透露它。
表(包括索引)和选择查询的DDL将会有所帮助。 – Bryan 2015-03-03 14:05:47
*其他*交易做了什么? – usr 2015-03-03 14:09:32
出于安全考虑,我无法回答你的问题 - 至少,你可以尝试将其他查询精确地提取到“column1”和“key1”所做的事情上?你的'UPDATE'可能不是问题 - 即使它锁定了正确的行并且没有其他东西,如果其他查询需要触摸所有东西,这仍然无济于事。你只能通过查看一个参与方来诊断死锁。 – 2015-03-03 15:24:02