Sql-Server
NOLOCK 或讀取未送出的鎖定/鎖定行為
我已經閱讀了許多關於 NOLOCK 或未送出的讀取隔離級別如何根據所採用的鎖/閂鎖起作用的不同觀點。
當使用帶有 NOLOCK 的 SELECT 或在未送出的讀取隔離級別中使用時,唯一的鎖是從架構穩定性鎖中取出的,還是在查詢通過行工作時以滾動方式獲得共享鎖?(顯然這些鎖需要立即丟棄)
閂鎖呢?當我假設不允許引用正在修改的記憶體對象時,如何處理記憶體中的頁面?
READ UNCOMMITTED
隔離下的讀取只需要Sch-S
. 沒有獲取共享鎖(有幾個罕見的例外)。鎖定
READ COMMITTED
下的讀取S
通常會在查詢處理器移動到下一行時立即釋放鎖定(同樣,有一些例外)。頁面在讀取或寫入時*總是被鎖存以確保物理一致性,通常在讀取時使用共享鎖存器,在寫入時使用獨占鎖存器。*有關詳細資訊,請參閱Bob Ward 通過 PASStv 編寫的Inside SQL Server Latches。
鎖是 SQL Server 用來提供隔離級別保證的實現細節。