Sql-Server

讀送出共享鎖

  • April 6, 2021

我想知道您何時處於讀取送出隔離級別並且在一個會話中有人啟動了一個具有選擇語句的顯式事務,例如需要 20 秒。來自不同會話的人能否在 select 語句仍在執行時更新該表中的記錄。

我正在與某人討論這個問題,根據他們的說法,它將能夠更新這些記錄,因為這就是更新鎖發揮作用的地方,並在查詢仍在執行時為更新提供排他鎖。我找不到任何關於此的文件,也不知道如何測試它

我找不到有關此的任何文件

文件在這裡。S 鎖與 U 鎖兼容,但 UPDATE 將需要 X 鎖才能真正完成,這與 S 鎖不兼容。

在此處輸入圖像描述

也不知道如何測試這個

您可以隨時執行查詢,例如

select count(*)
from sales.SalesOrderDetail with (tablock), master..spt_values v, master..spt_values v2, master..spt_values v3

看看你是否可以從另一個會話更新。這tablock是為了確保使用 S 鎖鎖定整個表,因為它可能會或可能不會使用長時間執行的 SELECT。

您會發現除非數據庫設置了 READ COMMITTED SNAPSHOT 選項,否則 SELECT 將阻止 UPDATE。

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