我知道Serializable的隔離級別是所有隔離級別中限制最嚴格的級別。我很好奇,哪種應用程序需要這種隔離級別,或者我應該考慮使用它?隔離級別 - 可序列化。我應該什麼時候使用這個?
31
A
回答
39
問問自己以下問題:如果有人在您的交易正在運行時將新行插入到您的數據中,會不會很糟糕?這是否會以不可接受的方式干擾您的結果?如果是這樣,請使用SERIALIZABLE級別。
從MSDN regarding SET TRANSACTION ISOLATION LEVEL:
SERIALIZABLE
地點的範圍內鎖定的數據集, 防止其他用戶更新 或將行插入到數據集 直到交易完成。 這是最嚴格的 四個隔離級別。由於 併發性較低,因此僅在必要時才使用此選項 。該選項具有 與在 事務中的所有SELECT語句中的所有表 上設置HOLDLOCK的效果相同。
因此,您的交易會在其整個生命週期內保持所有鎖定 - 即使是在使用後通常會丟棄的鎖定。這使得看起來所有的交易都是一次運行一個,因此名稱爲SERIALIZABLE。從Wikipedia regarding isolation levels注:
SERIALIZABLE
此隔離級別指定 所有交易發生在一個完全孤立 時尚;即彷彿系統中的所有 交易已經連續執行 ,其中一個在 之後。只有在可以維持系列 執行的錯覺時,DBMS纔可以在同一時間執行兩個或多個事務 。
3
嘗試會計。如果您想擁有適當的賬戶價值並遵守信用額度等事項,賬戶中的交易本質上是可序列化的。
相關問題
- 1. 什麼時候應該使用可可?
- 2. 什麼時候應該使用JSON序列化,爲什麼?
- 3. 可序列化的事務隔離級別不適用於我
- 4. 我應該使用哪個隔離級別來預訂航班
- 5. 什麼時候應該使用memcpy,什麼時候應該使用memmove?
- 6. 我什麼時候應該使用javax.swing.SwingUtilities.invokeLater()?
- 7. 我什麼時候應該使用UITableViewCellSeparatorStyleSingleLineEtched?
- 8. NHibernate,我應該使用ReadCommitted還是ReadUncommited事務隔離級別?
- 9. 什麼時候應該使用make_heap與優先級隊列?
- 10. 什麼時候應該使用AWS,什麼時候不使用
- 11. 什麼時候/什麼鎖持有/發佈READ COMMITTED隔離級別
- 12. 什麼時候應該使用sed,什麼時候應該使用awk
- 13. 什麼時候應該使用Import-Package,什麼時候應該使用Require-Bundle?
- 14. 什麼樣的對象被序列化,爲什麼?我什麼時候可以使用這個?
- 15. 什麼時候應該/不應該在Spark中序列化一個類?
- 16. 我們應該使用哪種數據庫隔離級別以及哪種隔離級別最好?
- 17. 可序列化的隔離級別原子性
- 18. 設置存儲過程中的可序列化隔離級別
- 19. oracle中的可序列化隔離級別
- 20. 交易可序列化的隔離級別澄清
- 21. 什麼時候應該使用async/await,什麼時候不用?
- 22. 什麼時候應該使用一個引用,什麼時候應該使用一個ProjectReference
- 23. 我們什麼時候應該上課,什麼時候不應該上課
- 24. 什麼時候應該使用tempfile
- 25. mysql隔離級別
- 26. 什麼時候應該使用退貨?
- 27. 什麼時候應該使用Satellite Assemblies進行本地化?什麼時候應該使用資源文件(.resx)?
- 28. Linq DataContext和隔離級別
- 29. 在C#中,什麼時候應該使用一個結構,什麼時候應該使用一個類?
- 30. 什麼時候應該使用一個類,什麼時候應該使用一個id?
一個好的,相關參考:(序列化VS快照隔離)http://blogs.msdn.com/b/craigfr/archive/2007/05/16/serializable-vs-snapshot-isolation-level.aspx – 2013-10-11 21:24:59
這裏是更新後的鏈接[來自MSDN的'SET TRANSACTION ISOLATION LEVEL'](https://msdn.microsoft.com/en-us/library/ms173763.aspx) – 2016-10-20 21:56:17
@AlexYursha謝謝,我更新了這篇文章。 – 2016-10-21 12:54:51