Sql Server 2005中的快照隔離

Sql Server 2005中的快照隔離

Sql Server2005提供了兩種基於快照的隔離類型,他們都是利用行版本控制來維護快照的:
1、已提交讀快照隔離(RCSI),通過修改數據庫的一個選項來啓用
alter database AdventureWorks set READ_COMMITTED_SNAPSHOT on

2、快照隔離(SI),必須在兩個地方開啓
A、啓用數據庫的ALLOW_ISOLATION_SNAPSHOT選項
alter database AdventureWorks  set ALLOW_SNAPSHOT_ISOLATION on
B、通過set transaction isolation level 命令爲每個想要使用SI的連接設置隔離級別

set transaction isolation level snapshot


觀察數據庫的狀態

目錄視圖sys.databases包含了幾個報告數據庫快照隔離狀態的字段.
snapshot_isolation_state字段的可能值是0到4,表示四種可能的SI狀態,而snapshot_isolation_state_desc字段對每種狀態作了清晰的說明:
off:數據庫關閉了快照隔離狀態
in_transition_to_on:數據庫正處於開啓SI的中間狀態
on:SI被開啓
in_transition_to_off:數據庫正處於關閉SI的中間狀態而不能啓動新的快照事務

數據庫選項read_committed_snapshot可能的狀態值
0:關閉
1:開啓

併發模型的選擇

悲觀併發控制時Sql Server2005中的默認設置,也是所有早期版本的唯一選擇。事務的行爲是由加鎖來保證的,而付出的代價是產生較多的阻塞。在訪問同一數據資源時,讀者和寫者之間會互相阻塞。由於Sql Server最初是爲使用悲觀併發而設計的,用戶應該在證明樂觀併發確實對應用程序更有用的前提下才考慮使用

在大多數情況下,基於下列原因RCSI比SI更受歡迎:
1、RCSI比SI佔用更少的tempdb空間
2、RCSI支持分佈式事務,而SI不支持
3、RCSI不會產生更新衝突
4、RCSI無需再應用程序端作任何修改。唯一要更改的只是一個數據庫選項

可以考慮在下列情況中使用SI:
1、不太可能由於更新衝突而導致事務必須回滾得情況
2、需要基於運行時間長、能保證時間點一致性的多語句來生成報表的情況


樂觀併發控制的優缺點:
優點:
1、select 操作無需獲取共享鎖,因此讀者和寫者之間不會互相阻塞
2、所有的select會得到一個始終如一的數據快照
3、與悲觀併發相比,鎖的需求總量大大減少了,因而將節約更多系統開銷
4、Sql Server會執行較少的鎖升級
5、發生死鎖的可能性較小

缺點:
1、當需要掃描一個很長的版本鏈時,select語句的性能會有所下降
2、行版本控制需要tempdb數據庫中的額外數據
3、只要數據庫啓用了基於快照隔離級別的某一種時,更新和刪除操作都必須產生行版本
4、需要爲每個受到影響的行增加大小爲14個字節的行版本控制信息
5、更新操作的性能可能會因爲維護行版本而變差
6、使用SI模式的更新操作可能會因爲衝突檢測而被回滾
7、必須小心地控制tempdb的空間
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章