Sql-Server

SQL Server - 非阻塞選擇語句的隔離級別是什麼?

  • March 18, 2021

我有一個長時間執行的事務(稱為 T1),它對 SQL Server 2008 R2 中的表執行一些刪除、更新和插入操作。同時,另一個程序會定期從該表中執行 select 語句。

在預設隔離設置下(我認為是 READ COMMITTED?),T1 會阻止任何 select 語句執行,直到事務送出或回滾。

我希望看到的是,即使在事務正在進行時,select 語句也能對一致的數據起作用。我相信 SNAPSHOT 隔離會有所幫助,但不確定我是否朝著正確的方向前進。這會是這個應用程序的最佳隔離級別嗎?

其次,我無法控制呼叫 select 語句的程序,但我可以控制呼叫 T1 的 .NET 應用程序。選擇語句和 T1 是否都需要更改任何隔離級別,或者僅將 T1 標記為具有不同的隔離級別就足夠了?

在理想情況下,您將有兩個選擇,SNAPSHOT 和 READ COMMITTED SNAPSHOT (RCSI)。在決定哪個適合您的工作負載之前,請確保您了解事務隔離級別的基礎知識。特別要注意遷移到 RCSI 後您可能會看到的不同結果。

這聽起來不是一個理想的世界,因為您無法控制生成選擇語句的應用程序。在這種情況下,您唯一的選擇是為有問題的數據庫啟用 RCSI,以便選擇將自動使用 RCSI 而不是 READ COMMITTED。

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