Sql Server 2005中的快照隔离
生活随笔
收集整理的這篇文章主要介紹了
Sql Server 2005中的快照隔离
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Sql Server2005提供了兩種基于快照的隔離類(lèi)型,他們都是利用行版本控制來(lái)維護(hù)快照的:
1、已提交讀快照隔離(RCSI),通過(guò)修改數(shù)據(jù)庫(kù)的一個(gè)選項(xiàng)來(lái)啟用
alter database AdventureWorks set READ_COMMITTED_SNAPSHOT on
2、快照隔離(SI),必須在兩個(gè)地方開(kāi)啟
A、啟用數(shù)據(jù)庫(kù)的ALLOW_ISOLATION_SNAPSHOT選項(xiàng)
alter database AdventureWorks set ALLOW_SNAPSHOT_ISOLATION on
B、通過(guò)set transaction isolation level 命令為每個(gè)想要使用SI的連接設(shè)置隔離級(jí)別
set transaction isolation level snapshot
觀察數(shù)據(jù)庫(kù)的狀態(tài)
目錄視圖sys.databases包含了幾個(gè)報(bào)告數(shù)據(jù)庫(kù)快照隔離狀態(tài)的字段.
snapshot_isolation_state字段的可能值是0到4,表示四種可能的SI狀態(tài),而snapshot_isolation_state_desc字段對(duì)每種狀態(tài)作了清晰的說(shuō)明:
off:數(shù)據(jù)庫(kù)關(guān)閉了快照隔離狀態(tài)
in_transition_to_on:數(shù)據(jù)庫(kù)正處于開(kāi)啟SI的中間狀態(tài)
on:SI被開(kāi)啟
in_transition_to_off:數(shù)據(jù)庫(kù)正處于關(guān)閉SI的中間狀態(tài)而不能啟動(dòng)新的快照事務(wù)
數(shù)據(jù)庫(kù)選項(xiàng)read_committed_snapshot可能的狀態(tài)值
0:關(guān)閉
1:開(kāi)啟
并發(fā)模型的選擇
悲觀并發(fā)控制時(shí)Sql Server2005中的默認(rèn)設(shè)置,也是所有早期版本的唯一選擇。事務(wù)的行為是由加鎖來(lái)保證的,而付出的代價(jià)是產(chǎn)生較多的阻塞。在訪問(wèn)同一數(shù)據(jù)資源時(shí),讀者和寫(xiě)者之間會(huì)互相阻塞。由于Sql Server最初是為使用悲觀并發(fā)而設(shè)計(jì)的,用戶應(yīng)該在證明樂(lè)觀并發(fā)確實(shí)對(duì)應(yīng)用程序更有用的前提下才考慮使用
在大多數(shù)情況下,基于下列原因RCSI比SI更受歡迎:
1、RCSI比SI占用更少的tempdb空間
2、RCSI支持分布式事務(wù),而SI不支持
3、RCSI不會(huì)產(chǎn)生更新沖突
4、RCSI無(wú)需再應(yīng)用程序端作任何修改。唯一要更改的只是一個(gè)數(shù)據(jù)庫(kù)選項(xiàng)
可以考慮在下列情況中使用SI:
1、不太可能由于更新沖突而導(dǎo)致事務(wù)必須回滾得情況
2、需要基于運(yùn)行時(shí)間長(zhǎng)、能保證時(shí)間點(diǎn)一致性的多語(yǔ)句來(lái)生成報(bào)表的情況
樂(lè)觀并發(fā)控制的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1、select 操作無(wú)需獲取共享鎖,因此讀者和寫(xiě)者之間不會(huì)互相阻塞
2、所有的select會(huì)得到一個(gè)始終如一的數(shù)據(jù)快照
3、與悲觀并發(fā)相比,鎖的需求總量大大減少了,因而將節(jié)約更多系統(tǒng)開(kāi)銷(xiāo)
4、Sql Server會(huì)執(zhí)行較少的鎖升級(jí)
5、發(fā)生死鎖的可能性較小
缺點(diǎn):
1、當(dāng)需要掃描一個(gè)很長(zhǎng)的版本鏈時(shí),select語(yǔ)句的性能會(huì)有所下降
2、行版本控制需要tempdb數(shù)據(jù)庫(kù)中的額外數(shù)據(jù)
3、只要數(shù)據(jù)庫(kù)啟用了基于快照隔離級(jí)別的某一種時(shí),更新和刪除操作都必須產(chǎn)生行版本
4、需要為每個(gè)受到影響的行增加大小為14個(gè)字節(jié)的行版本控制信息
5、更新操作的性能可能會(huì)因?yàn)榫S護(hù)行版本而變差
6、使用SI模式的更新操作可能會(huì)因?yàn)闆_突檢測(cè)而被回滾
7、必須小心地控制tempdb的空間
1、已提交讀快照隔離(RCSI),通過(guò)修改數(shù)據(jù)庫(kù)的一個(gè)選項(xiàng)來(lái)啟用
alter database AdventureWorks set READ_COMMITTED_SNAPSHOT on
2、快照隔離(SI),必須在兩個(gè)地方開(kāi)啟
A、啟用數(shù)據(jù)庫(kù)的ALLOW_ISOLATION_SNAPSHOT選項(xiàng)
alter database AdventureWorks set ALLOW_SNAPSHOT_ISOLATION on
B、通過(guò)set transaction isolation level 命令為每個(gè)想要使用SI的連接設(shè)置隔離級(jí)別
set transaction isolation level snapshot
觀察數(shù)據(jù)庫(kù)的狀態(tài)
目錄視圖sys.databases包含了幾個(gè)報(bào)告數(shù)據(jù)庫(kù)快照隔離狀態(tài)的字段.
snapshot_isolation_state字段的可能值是0到4,表示四種可能的SI狀態(tài),而snapshot_isolation_state_desc字段對(duì)每種狀態(tài)作了清晰的說(shuō)明:
off:數(shù)據(jù)庫(kù)關(guān)閉了快照隔離狀態(tài)
in_transition_to_on:數(shù)據(jù)庫(kù)正處于開(kāi)啟SI的中間狀態(tài)
on:SI被開(kāi)啟
in_transition_to_off:數(shù)據(jù)庫(kù)正處于關(guān)閉SI的中間狀態(tài)而不能啟動(dòng)新的快照事務(wù)
數(shù)據(jù)庫(kù)選項(xiàng)read_committed_snapshot可能的狀態(tài)值
0:關(guān)閉
1:開(kāi)啟
并發(fā)模型的選擇
悲觀并發(fā)控制時(shí)Sql Server2005中的默認(rèn)設(shè)置,也是所有早期版本的唯一選擇。事務(wù)的行為是由加鎖來(lái)保證的,而付出的代價(jià)是產(chǎn)生較多的阻塞。在訪問(wèn)同一數(shù)據(jù)資源時(shí),讀者和寫(xiě)者之間會(huì)互相阻塞。由于Sql Server最初是為使用悲觀并發(fā)而設(shè)計(jì)的,用戶應(yīng)該在證明樂(lè)觀并發(fā)確實(shí)對(duì)應(yīng)用程序更有用的前提下才考慮使用
在大多數(shù)情況下,基于下列原因RCSI比SI更受歡迎:
1、RCSI比SI占用更少的tempdb空間
2、RCSI支持分布式事務(wù),而SI不支持
3、RCSI不會(huì)產(chǎn)生更新沖突
4、RCSI無(wú)需再應(yīng)用程序端作任何修改。唯一要更改的只是一個(gè)數(shù)據(jù)庫(kù)選項(xiàng)
可以考慮在下列情況中使用SI:
1、不太可能由于更新沖突而導(dǎo)致事務(wù)必須回滾得情況
2、需要基于運(yùn)行時(shí)間長(zhǎng)、能保證時(shí)間點(diǎn)一致性的多語(yǔ)句來(lái)生成報(bào)表的情況
樂(lè)觀并發(fā)控制的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
1、select 操作無(wú)需獲取共享鎖,因此讀者和寫(xiě)者之間不會(huì)互相阻塞
2、所有的select會(huì)得到一個(gè)始終如一的數(shù)據(jù)快照
3、與悲觀并發(fā)相比,鎖的需求總量大大減少了,因而將節(jié)約更多系統(tǒng)開(kāi)銷(xiāo)
4、Sql Server會(huì)執(zhí)行較少的鎖升級(jí)
5、發(fā)生死鎖的可能性較小
缺點(diǎn):
1、當(dāng)需要掃描一個(gè)很長(zhǎng)的版本鏈時(shí),select語(yǔ)句的性能會(huì)有所下降
2、行版本控制需要tempdb數(shù)據(jù)庫(kù)中的額外數(shù)據(jù)
3、只要數(shù)據(jù)庫(kù)啟用了基于快照隔離級(jí)別的某一種時(shí),更新和刪除操作都必須產(chǎn)生行版本
4、需要為每個(gè)受到影響的行增加大小為14個(gè)字節(jié)的行版本控制信息
5、更新操作的性能可能會(huì)因?yàn)榫S護(hù)行版本而變差
6、使用SI模式的更新操作可能會(huì)因?yàn)闆_突檢測(cè)而被回滾
7、必須小心地控制tempdb的空間
轉(zhuǎn)載于:https://www.cnblogs.com/Spring/archive/2008/08/21/1272685.html
總結(jié)
以上是生活随笔為你收集整理的Sql Server 2005中的快照隔离的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: git bash 风格调整
- 下一篇: 成语小秀才1497关答案 在线成语词典