Sql-Server

NOLOCK 或讀取未送出的鎖定/鎖定行為

  • February 12, 2022

我已經閱讀了許多關於 NOLOCK 或未送出的讀取隔離級別如何根據所採用的鎖/閂鎖起作用的不同觀點。

當使用帶有 NOLOCK 的 SELECT 或在未送出的讀取隔離級別中使用時,唯一的鎖是從架構穩定性鎖中取出的,還是在查詢通過行工作時以滾動方式獲得共享鎖?(顯然這些鎖需要立即丟棄)

閂鎖呢?當我假設不允許引用正在修改的記憶體對象時,如何處理記憶體中的頁面?

READ UNCOMMITTED隔離下的讀取只需要Sch-S. 沒有獲取共享鎖(有幾個罕見的例外)。

鎖定 READ COMMITTED下的讀取S通常會在查詢處理器移動到下一行時立即釋放鎖定(同樣,有一些例外)。

頁面在讀取或寫入時*總是被鎖存以確保物理一致性,通常在讀取時使用共享鎖存器,在寫入時使用獨占鎖存器。*有關詳細資訊,請參閱Bob Ward 通過 PASStv 編寫的Inside SQL Server Latches。

鎖是 SQL Server 用來提供隔離級別保證的實現細節。

引用自:https://dba.stackexchange.com/questions/242170