2010-12-05 35 views
3

當單獨的進程正在處理連續化的事務中的連續傳入數據時,是否有任何問題使用SNAPSHOT隔離來一致地讀取數據以便無需鎖定,阻塞或髒/幻像讀取進行查看?同時使用可串行化和快照隔離的影響

我們需要讀者(保證只讀:web數據同步,實時監控視圖等)能夠讀取一致的數據,而不被阻止或阻止更新。我們對所有內容都使用SNAPSHOT,但是出現了太多的一致性故障,因此將更新過程切換到了SERIALIZABLE。

我讀過關於但並不完全清楚同時使用不同隔離級別的影響。我見過lock compatibility matrix,並閱讀各種信息。這似乎沒問題,但我真的很感謝來自具有實踐經驗的人士的任何明智的指導。

SERIALIZABLE事務正在寫入時,是否有任何問題對讀取器使用快照隔離?有沒有情況會阻止SERIALIZABLE交易?使用SNAPSHOT vs READ COMMITTED(使用READ_COMMITTED_SNAPSHOT ON)有什麼好處?

謝謝,任何協助不勝感激:-)

回答

4

讀操作下快照隔離級別進行讀取從版本存儲任何修改的數據。因此,他們受影響只有寫道。在所有隔離級別下,寫入行爲相同。因此,無論事務處理的隔離級別如何,SNAPSHOT讀取行爲都是相同的。

READ_COMMITTED_SNAPSHOT ON使READ COMMITTED充當SNAPSHOT。實際上,它是SNAPSHOT:提供READ_COMMITTED_SNAPSHOT作爲將應用程序移植到SNAPSHOT而不改變代碼的快速方法。因此,第一段中的所有內容都適用。

+0

謝謝! SNAPSHOT隔離下的讀取是否會導致SERIALIZABLE事務阻塞? (起初我想過使用NOLOCK提示,但讀了一些評論指出存在風險,因此SNAPSHOT會更好) – mos 2010-12-05 05:17:27