Sql-Server

如果我們在 sql-server 中啟用已送出的讀取快照會有什麼風險?

  • December 11, 2019

我在這裡讀到,每行將儲存一些額外的數據,因此我們可能會看到性能下降,但還有哪些其他風險?

例如。這會影響數據庫的恢復嗎?我們還需要做些什麼來利用這一點嗎?

我計劃執行這些命令:

ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON
ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON

我相信這將使我們更接近 Oracle,如果一個事務正在更新其他事務仍然可以讀取舊數據。它是否正確?

我正在研究這個問題,因為我厭倦了 SQL Server 2005 中的鎖定問題。我希望這可以減少使用者偶爾看到的死鎖,幫助我們的應用程序的整體性能,並鼓勵我們的開發人員在每個事務中執行多個操作而不恐懼。

概括

  1. 如果您有鎖定問題,那麼您的程式碼就有問題:它不是數據庫引擎
  2. 這不是靈丹妙藥
  3. 您可能會添加更多問題

載入

它還會增加 tempdb 和CPU的負載。另見:

安全

最重要的是,預設情況下,快照隔離在許多情況下並不安全。閱讀“快照隔離”(維基百科)以了解有關寫入偏斜異常的更多資訊。下一節是“使快照隔離可序列化”來解決這個問題。

因此,一般而言,快照隔離將一些維護重要約束的問題交給了使用者,他們可能既不了解潛在的陷阱,也不了解可能的解決方案。這種轉移的好處是更好的性能。

另見:

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