找到锁升级的原因

时间:2015-06-19 08:42:50

标签: sql-server locking escalation

在运行SQL Server Profiler时,我遇到了一些Lock:Escalations。当我搜索具有与Lock:Escalation事件相同的SPID的语句时,我意识到其中一个delete语句会导致这种情况。

有没有办法找出为什么会出现这种地方的锁升级?

声明如下:

delete from BOOK_IN_LIBRARY where libraryId in (,,,,); <-20 elements ids

CREATE TABLE BOOK_IN_LIBRARY(
[libraryId] [bigint] NOT NULL,
[bookId] [bigint] NULL,
[otherData] [bigint]NULL,
[otherData2] [int] NULL,
[otherData3] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[libraryId] ASC,
[bookId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

2 个答案:

答案 0 :(得分:0)

您可能不需要担心锁定升级,因为这有助于SQL Server更快地处理您的查询。但与此同时,由于它会阻止一系列记录(页面级锁定或范围锁定或表级别锁定),这些页面中的记录将被阻止用于其他会话。需要访问这些页面中的记录的其他用户必须等到锁定被释放。

答案 1 :(得分:0)

删除这些ID中的20个意味着删除最多68000行。该语句超出了行锁定的阈值,之后数据库会创建锁定升级。 更多信息Lock Escalation (Database Engine)。答案归功于JamesZ评论。谢谢!

相关问题