SQL Server 的默认锁粒度是什么?

6

我已经仔细阅读了MSDN关于表提示的内容,但似乎没有找到锁定粒度的默认值。假设我有以下查询:

SELECT TOP (1) * FROM MyTable WITH (UPDLOCK, READPAST) ORDER BY SomeColumn ASC;

你看,我指定了UPDLOCKREADPAST提示,但没有使用任何粒度提示,如TABLOCKROWLOCK
默认情况下使用哪个粒度锁定级别?

默认情况下,它是行级锁。当会话/事务超过约5000个行级锁时,锁定将升级为表级锁(如果您有分区表,则为分区级别)。 - marc_s
1个回答

16

没有所谓的“默认值”。粒度(行,页面,(分区|对象))是根据对象允许的选项(allow_page_locks/allow_row_locks),操作意图信息(探测、扫描、插入),行集的预估大小以及其他一些因素(隔离级别,文件组只读等)动态计算的。对于单个操作通常会获得行级别的粒度,而对于扫描通常会获得页面级别的粒度。您发布的查询可能会使用页面级别粒度,因为它是一个扫描操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接