Sql-Server
快照隔離是否只為您提供已送出的內容?(以及一般快照隔離問題。)
所以,我有一些死鎖問題。
我已經看到了兩種解決方法。添加
read uncommitted
到我的數據庫或執行快照隔離並添加read committed snapshot
.在對兩者進行了一些研究之後,在我看來,這
read uncommitted
可以允許讀取可能永遠不會送出到數據庫的數據。另一方面,
read committed snapshot
將只提供最新的*(它是最新的,對嗎?)*送出的數據版本(即使數據可能處於更改/事務的中間。)這是正確的嗎?
如果是這樣,我傾向於快照隔離(我真的不想返回處於更改中間的數據。)
但是,我的 DBA 告訴我,他上次聽說快照隔離存在“問題”。(他沒有詳細說明問題,只是說它不是企業級功能。)
所以,這是我關於快照隔離的問題:
快照隔離是否可靠?它只是工作嗎?
還是有我需要注意的“陷阱”?
> > 另一方面,讀取送出的快照將僅提供最新送出的數據版本 > > >
不正確。快照將為您提供在拍攝快照時送出的數據。
BEGIN TRAN
如果您使用真正的隔離級別,則此時刻意味著您發出SNAPSHOT
的時刻,或者如果您使用read_committed_snapshot
RCSI,則意味著您的語句開始的時刻。這意味著,如果在同一記錄上送出了多個更新,您將不會看到最新的,而是在“拍攝快照”時送出的更新。把它想像成一張照片:你把數據拍下來,從那時起你就只能看到照片,不管背後的“真實”風景如何變化。快照絕對強大。如果您的 DBA 有異議,那麼他/她應該能夠清楚地表達它們,以便可以解決或駁回它們,就像這種情況一樣。一切都有權衡和陷阱。索引有權衡和陷阱,這是否意味著您的 DBA 不使用索引?