Sql-Server

RCSI 使用的空間是否比 SNAPSHOT 少或相同?為什麼?

  • December 15, 2013

試圖更好地理解基於行版本控制的事務隔離 - RCSI(讀取送出的快照隔離和 SNAPSHOT) - 在 SQL Server…

MSDN 線上文章“ Choosing Row Versioning-based Isolation Levels ”指出:

  • *“對於大多數應用程序,建議使用行版本控制進行讀取送出隔離而不是快照隔離,原因如下:

    • 它比快照隔離消耗更少的 tempdb 空間"*

這與 Neal Graves 的“基於 SQL Server 2005 Row Versioning-Based Transaction Isolation ”的 Kimberly L. Tripp 的陳述相矛盾:

  • “使用行版本控制在
    已送出讀取中的行版本控制 對於使用行版本控制在已送出讀取下執行的查詢,行版本僅在事務中每個 SELECT 語句的持續時間內是必需的。但是,行版本一直保持到事務結束。這是 tempdb 儲存需要考慮的重要一點。儲存影響將與快照隔離相同。

那麼,為什麼 RCSI 使用更少(或相同)的空間?

更新:

可能我最初提出的問題很糟糕,但這意味著對於兩個相互矛盾的“理論”都有 RTFM 解釋和確認,我想了解:

哪個是正確的?

為什麼一個真的是正確的? 為什麼另一個不是真的正確(為什麼另一個是錯的?)

子問題:

如果在單個事務中對同一記錄進行多次更新,則儲存了多少個版本?

讀取送出的快照隔離(語句級快照隔離)可能比快照隔離(事務級快照隔離)使用更少的儲存,因為通常行版本在生成後的很長一段時間內都不需要。

對於事務級別的快照隔離,版本必須在事務的整個持續時間內保持不變,這可能是相當長的時間(或相當長的時間,如此處所示。當然,語句也可以執行很長時間,但通常情況下事務會花費更長的時間。

強調一點:在快照隔離下執行的事務可以保證看到送出的數據,因為它在事務開始時就存在。這意味著必須維護行版本,直到整個事務完成。在 RCSI 下執行相同事務的情況下,可能會在每個語句之後發布行版本。總體而言,與相同工作負載相比,快照隔離往往會導致更大的版本儲存大小。RCSI

在啟用其中一個或兩個設置的情況下生成相同的版本。我相信金伯利指的是寫入速率意義上的儲存影響,而不是使用的儲存,所以你提到的兩個陳述並不矛盾;只是有點不清楚或不具體。

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