Sql-Server

在 ALLOW_SNAPSHOT_ISOLATION 為 OFF 時將 READ_COMMITTED_SNAPSHOT 設置為 ON

  • May 9, 2018

我嘗試了 SQL Server 數據庫的各種配置,最終設置READ_COMMITTED_SNAPSHOTONwhile ALLOW_SNAPSHOT_ISOLATIONis OFF

我注意到啟用此功能後,許多查詢變得更快。我仍然使用預設的READ COMMITTED隔離級別來連接數據庫。

**這裡實際發生了什麼?我認為 when ALLOW_SNAPSHOT_ISOLATIONis OFF,設置READ_COMMITTED_SNAPSHOTON不會有任何影響……我實際上仍然沒有使用快照隔離,或者是嗎?**有人可以解釋一下嗎?我很困惑。

我嘗試在網上研究這個主題,但每當我看到READ_COMMITTED_SNAPSHOT被使用時,它總是與ALLOW_SNAPSHOT_ISOLATION我沒有啟用的 一起使用。

我注意到啟用此功能後,許多查詢變得更快。我仍然使用預設的READ COMMITTED隔離級別來連接數據庫。

注意到這一點:

這些選項是獨立的,都不需要打開,儘管許多人錯誤地這樣做了。打開任何一個都會導致行版本控制成本。READ_COMMITTED_SNAPSHOT ON導致所有READ_COMMITTED會話使用行版本控製而不是鎖定,這樣可以避免阻塞並可以解釋您感知的性能改進。

此外,READ_COMMITTED_SNAPSHOT(以下稱為 RCSI)只會給你一些樂觀並發的屬性。RCSI 和快照 (SI) 在三個主要方面有所不同:

  1. 所有 RC 隔離查詢將立即使用 RCSI。
  2. RCSI 為單個語句提供數據庫的時間點(快照)視圖。
  3. SI 為整個事務提供時間點視圖。
  4. SI 可能有寫衝突。

這裡實際發生了什麼?

RCSI 已打開,因此所有 RC 隔離查詢都被提升為 RCSI,其中讀取器不會阻塞寫入器,寫入器不會阻塞讀取器。您看到的“加速”很可能是由於減少了對這些查詢的阻塞等待,因為它現在使用樂觀並發的版本儲存而不是阻塞和等待。這可能會或可能不會在您的查詢中為您提供所需的結果。

我認為 when ALLOW_SNAPSHOT_ISOLATIONis OFF,設置READ_COMMITTED_SNAPSHOTON不會有任何影響……我實際上仍然沒有使用快照隔離,或者是嗎?

往上看。您在打開 RCSI 時使用它(這是您實際上打開的那個),但打開時不會自動使用 SI:您需要顯式SET TRANSACTION ISOLATION LEVEL SNAPSHOT(或等效)使用 SI。


有關詳細資訊,請參閱產品文件中的 SQL Server 數據庫引擎中基於行版本控制的隔離級別。

在這些文章中可以找到有關使用 RCSI/SI 時的一些陷阱和注意事項的其他有用細節:

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