在运行SQL Server事件探查器时,我遇到了一些Lock:Escalations。当我搜索与Lock:Escalation event具有相同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]发布于 2015-06-19 19:03:42
您可能不需要担心Lock Escalation,因为这将帮助SQL Server更快地处理查询。但同时,由于它阻止了一系列记录(页级锁定或范围锁定或表级锁定),这些页面中的记录将被阻止用于其他会话。需要访问这些页面中的记录的其他用户必须等待,直到锁被释放。
发布于 2015-06-19 21:19:55
删除这些id中的20个意味着最多删除68000行。该语句超过了行锁的阈值,超过此阈值后,数据库将创建锁升级。更多信息Lock Escalation (Database Engine)。答案多亏了JamesZ评论。谢谢!
https://stackoverflow.com/questions/30933734
复制相似问题