Sql-Server

快照隔離是否只為您提供已送出的內容?(以及一般快照隔離問題。)

  • March 26, 2012

所以,我有一些死鎖問題。

我已經看到了兩種解決方法。添加read uncommitted到我的數據庫或執行快照隔離並添加read committed snapshot.

在對兩者進行了一些研究之後,在我看來,這read uncommitted可以允許讀取可能永遠不會送出到數據庫的數據。

另一方面,read committed snapshot將只提供最新的*(它是最新的,對嗎?)*送出的數據版本(即使數據可能處於更改/事務的中間。)

這是正確的嗎?

如果是這樣,我傾向於快照隔離(我真的不想返回處於更改中間的數據。)

但是,我的 DBA 告訴我,他上次聽說快照隔離存在“問題”。(他沒有詳細說明問題,只是說它不是企業級功能。)

所以,這是我關於快照隔離的問題:

快照隔離是否可靠?它只是工作嗎?

還是有我需要注意的“陷阱”?

> > 另一方面,讀取送出的快照將僅提供最新送出的數據版本 > > >

不正確。快照將為您提供在拍攝快照時送出的數據。BEGIN TRAN如果您使用真正的隔離級別,則此時刻意味著您發出SNAPSHOT的時刻,或者如果您使用read_committed_snapshotRCSI,則意味著您的語句開始的時刻。這意味著,如果在同一記錄上送出了多個更新,您將不會看到最新的,而是在“拍攝快照”時送出的更新。把它想像成一張照片:你把數據拍下來,從那時起你就只能看到照片,不管背後的“真實”風景如何變化。

快照絕對強大。如果您的 DBA 有異議,那麼他/她應該能夠清楚地表達它們,以便可以解決或駁回它們,就像這種情況一樣。一切都有權衡和陷阱。索引有權衡和陷阱,這是否意味著您的 DBA 不使用索引?

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