NOLOCK 或 Read Uncommitted 锁定/闩锁行为

Geo*_*ios 5 sql-server locking isolation-level latch

我已经阅读了许多关于 NOLOCK 或读取未提交的隔离级别在采用的锁/闩锁方面如何运作的不同看法。

当使用带有 NOLOCK 的 SELECT 或在 Read Uncommitted Isolation 级别时,是唯一取出模式稳定性锁的锁,还是在查询通过行时滚动获取共享锁?(显然这些锁需要立即放下)

闩锁呢?当我假设不允许引用正在修改的内存对象时,如何处理内存中的页面?

Pau*_*ite 8

READ UNCOMMITTED隔离下的读取只需要Sch-S. 没有获取共享锁(有几个罕见的例外)。

在读取锁定 READ COMMITTED采取S了通常释放尽快到下一行查询处理器移动锁(同样,也有一些例外)。

页在被读取或写入时总是被锁存以确保物理一致性,通常在读取时使用共享锁存器,在写入时使用独占锁存器。有关详细信息,请参阅Bob Ward 通过 PASStv 编写的Inside SQL Server Latches。

锁是 SQL Server 用来提供隔离级别提供的保证的实现细节。