SQL Server 2005 中提供的隔离级别
SQL Server 2005 中提供的隔離級(jí)別
| 隔離級(jí)別 | 臟讀(可能的情況) | 非可重復(fù)讀取(可能的情況) | Phantom(可能的情況) | 并發(fā)控制 |
|
讀取未提交 | 是 | 是 | 是 | (無(wú)) |
|
讀取已提交 ? | 否 | 是 | 是 | 悲觀 |
|
讀取已提交快照 | 否 | 是 | 是 | 樂觀 |
|
可重復(fù)讀取 | 否 | 否 | 是 | 悲觀 |
|
快照 | 否 | 否 | 否 | Optimistic |
|
可序列化 | 否 | 否 | 否 | 悲觀 |
上述每種情況下使用的應(yīng)用程序根據(jù)希望級(jí)別的“正確性”和在性能和管理性開銷上的平衡選擇而有所不同。
隔離級(jí)別和應(yīng)用程序最合適
| 隔離級(jí)別 | 在以下情況下最適合于應(yīng)用程序: |
| 讀取未提交 | 應(yīng)用程序不要求數(shù)據(jù)的絕對(duì)精度(可能得到大于/小于最終值的數(shù)值),并且相對(duì)于所有其他要求來說更看重 OLTP 操作的性能。不要求版本存儲(chǔ),不要求鎖定,沒有被授權(quán)任何鎖定。這種隔離中查詢的數(shù)據(jù)精確度可以看到未提交的更改。 |
| 讀取已提交 | 應(yīng)用程序不要求長(zhǎng)期運(yùn)行集合或長(zhǎng)期運(yùn)行查詢的時(shí)點(diǎn)一致,但要求被讀取的數(shù)據(jù)是事務(wù)一致的。應(yīng)用程序不希望用版本存儲(chǔ)的開銷來平衡長(zhǎng)期運(yùn)行查詢的可能的不正確,因?yàn)闆]有可重復(fù)讀取。 |
| 讀取已提交快照 | 應(yīng)用程序要求長(zhǎng)期運(yùn)行集合和/或長(zhǎng)期運(yùn)行查詢的絕對(duì)的時(shí)點(diǎn)一致性。所有數(shù)值在查詢開始時(shí)必須是事務(wù)一致的。數(shù)據(jù)庫(kù)管理員選擇應(yīng)用程序的版本存儲(chǔ)開銷,以便獲得由于鎖定爭(zhēng)用減少而帶來的吞吐量增加的好處。此外,應(yīng)用程序需要大型查詢(而不是事務(wù))的事務(wù)一致性。 |
| 可重復(fù)讀取 | 應(yīng)用程序要求長(zhǎng)期運(yùn)行多語(yǔ)句事務(wù)的絕對(duì)精確度,并且在事務(wù)完成之前必須保留來自其他修改的所有請(qǐng)求數(shù)據(jù)。應(yīng)用程序要求所有在此事務(wù)中被重復(fù)讀取的數(shù)據(jù)的一致性,并且要求不允許進(jìn)行其他修改——如果其他事務(wù)嘗試更新讀取器鎖定的數(shù)據(jù),這可能會(huì)影響多用戶系統(tǒng)中的并發(fā)。當(dāng)應(yīng)用程序依賴于一致性數(shù)據(jù),并且計(jì)劃稍后在相同事務(wù)中修改數(shù)據(jù)時(shí),這種級(jí)別是最合適的。 |
| 快照 | 應(yīng)用程序要求長(zhǎng)期運(yùn)行多語(yǔ)句事務(wù)的絕對(duì)精確度,但不計(jì)劃修改數(shù)據(jù)。應(yīng)用程序要求所有在此事務(wù)中被重復(fù)讀取的數(shù)據(jù)的一致性,但僅計(jì)劃讀取數(shù)據(jù)。不需要使用讀取鎖定來防止其他事務(wù)的修改,因?yàn)橐鹊綌?shù)據(jù)修改事務(wù)提交或回滾,并且快照事務(wù)結(jié)束之后才可以看到更改。可以在此事務(wù)級(jí)別中修改數(shù)據(jù),但是有可能與在快照事務(wù)啟動(dòng)后更新相同數(shù)據(jù)的事務(wù)產(chǎn)生沖突。這種沖突可以由每個(gè)更新事務(wù)來處理。具有多個(gè)讀取器但只有一個(gè)編寫器的系統(tǒng)(例如上述情境章節(jié)中的“復(fù)制的報(bào)告系統(tǒng)”)不會(huì)遇到?jīng)_突。 |
| 可序列化 | 應(yīng)用程序要求長(zhǎng)期運(yùn)行多語(yǔ)句事務(wù)的絕對(duì)精確度,并且在事務(wù)完成之前必須保留來自其他修改的所有請(qǐng)求數(shù)據(jù)。此外,事務(wù)會(huì)請(qǐng)求一組數(shù)據(jù)而不僅僅是單獨(dú)的幾行數(shù)據(jù)。每組數(shù)據(jù)都必須在事務(wù)內(nèi)的每個(gè)請(qǐng)求中產(chǎn)生相同的輸出,并且對(duì)于預(yù)期的修改,不僅不能有任何用戶可以修改已讀的數(shù)據(jù),而且還必須防止向組中輸入新行。當(dāng)應(yīng)用程序依賴于一致性數(shù)據(jù),計(jì)劃稍后在相同事務(wù)中修改數(shù)據(jù),并且即使在事務(wù)的最后都要求絕對(duì)的精確度和數(shù)據(jù)一致性時(shí)(在活動(dòng)數(shù)據(jù)內(nèi)),這種級(jí)別是最合適的。 |
轉(zhuǎn)載于:https://www.cnblogs.com/sxfmol/archive/2010/05/04/1727315.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的SQL Server 2005 中提供的隔离级别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WCF服务编程设计规范(6):队列服务、
- 下一篇: SQL Server2005如何进行数据