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的空間
sql server 2005中的output子句
今天看了下sql server 2005中的output子句,以使您可以從修改語句 insert update delete 中將資料返回到表變數中。帶結果的 dml 的有用方案包括清除和存檔 訊息處理應用程式以及其他方案。這一新的 output 子句的語法為 output into table v...
With在sql server 2005中的用法
with在msdn中的講解,可以參考鏈結 1 2 建立錶值變數型別 3 4create type ty newareagoods as table 5 areaid int notnull,6 goodsid int notnull 7 8 9 創鍵返回今天 的資料 10 根據有 的地區獲取參 11...
sql server 2005中的output子句
今天看了下sql server 2005中的output子句,以使您可以從修改語句 insert update delete 中將資料返回到表變數中。帶結果的 dml 的有用方案包括清除和存檔 訊息處理應用程式以及其他方案。這一新的 output 子句的語法為 output into table v...