我已经阅读了许多关于 NOLOCK 或未提交的读取隔离级别如何根据所采用的锁/闩锁起作用的不同观点。
当使用带有 NOLOCK 的 SELECT 或在未提交的读取隔离级别中使用时,唯一的锁是从架构稳定性锁中取出的,还是在查询通过行工作时以滚动方式获得共享锁?(显然这些锁需要立即丢弃)
闩锁呢?当我假设不允许引用正在修改的内存对象时,如何处理内存中的页面?
我已经阅读了许多关于 NOLOCK 或未提交的读取隔离级别如何根据所采用的锁/闩锁起作用的不同观点。
当使用带有 NOLOCK 的 SELECT 或在未提交的读取隔离级别中使用时,唯一的锁是从架构稳定性锁中取出的,还是在查询通过行工作时以滚动方式获得共享锁?(显然这些锁需要立即丢弃)
闩锁呢?当我假设不允许引用正在修改的内存对象时,如何处理内存中的页面?
READ UNCOMMITTED
隔离下的读取只需要Sch-S
. 没有获取共享锁(有几个罕见的例外)。锁定
READ COMMITTED
下的读取S
通常会在查询处理器移动到下一行时立即释放锁定(同样,有一些例外)。页面在读取或写入时总是被锁存以确保物理一致性,通常在读取时使用共享锁存器,在写入时使用独占锁存器。有关详细信息,请参阅Bob Ward 通过 PASStv 编写的Inside SQL Server Latches。
锁是 SQL Server 用来提供隔离级别保证的实现细节。