1

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

有什么方法可以找出为什么在这样的地方发生锁升级?

声明就像:

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]
4

2 回答 2

0

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

于 2015-06-19T11:03:42.267 回答
0

删除 20 个这些 id 意味着最多删除 68000 行。该语句超过了数据库创建锁升级之后的行锁阈值。更多信息锁升级(数据库引擎)。答案感谢JamesZ的评论。谢谢!

于 2015-06-19T13:19:55.390 回答