



免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)庫事務(wù)四種隔離級別詳述大多數(shù)事務(wù)系統(tǒng)使用的SQL標(biāo)準(zhǔn)中定義了四種隔離級別:可串行化、不可重復(fù)都、讀已提交和讀未提交。我們通過下面的這個例子來對這四種隔離級別進(jìn)行詳細(xì)的說明。場景:假如資源庫里有兩個包,分別是加鎖包和多步提交包,其中加鎖包中的文件個數(shù)是7個,而多步提交包中的文件個數(shù)是5個?,F(xiàn)在Martin將要統(tǒng)計(jì)資源目錄中的所有包的個數(shù),而同時,David要向資源庫里更新包的個數(shù),即David將要向加鎖包里再提交2個文件,向多步提交包里在提交3個文件。由于,Martin的統(tǒng)計(jì)和David的更新是并發(fā)執(zhí)行的,所以,下面將描述在使用某種隔離級別的情況下,會出現(xiàn)什么樣的結(jié)果??纱谢簣?zhí)行情況是要不Martin先統(tǒng)計(jì),統(tǒng)計(jì)完成后David再統(tǒng)計(jì),或者David更新完成后,Martin再更新。這樣,系統(tǒng)保證Martin的結(jié)果不是12或17,它們都是正確的,但是可串行化可能無法保證同樣條件下多次運(yùn)行后會得到相同的結(jié)果。第一次運(yùn)行Martin統(tǒng)計(jì)的結(jié)果是12,第二次統(tǒng)計(jì)的結(jié)果就變成了17。讀已提交:它允許不可重復(fù)讀。不可重復(fù)讀的大致意思是,你第一次讀取的數(shù)據(jù)假如是A,由于外界的干擾,那你在使用相同條件第二次讀取的數(shù)據(jù)將會覆蓋掉第一次讀取的數(shù)據(jù),即先前讀取的結(jié)果A將不可重現(xiàn)。以上面場景為例,假如Martin從加鎖包里讀取的文件數(shù)是7,接著,David提交了更新,這時,Martin再從加鎖包里讀取文件個數(shù),則得出的結(jié)果變成了9,以前的7將不可重現(xiàn)??芍貜?fù)讀的概念和不可重復(fù)讀概念相反,即如果允許可重復(fù)讀,則即使David提交了更新,Martin從加鎖包里讀出的文件個數(shù)還是7。可重復(fù)讀:可重復(fù)讀的概念在上面介紹了,可重復(fù)讀可能會出現(xiàn)幻讀。至于幻讀,還是可以用上面例子來描述:首先,Martin從加鎖包里讀出7個文件,這時,David提交了更新(另一個事務(wù)),Martin又從多步提交包里讀出8個文件,于是統(tǒng)計(jì)得出了一個錯誤的結(jié)果,即7+8=15。出現(xiàn)幻讀的原因是讀的結(jié)果只對Martin事務(wù)一部分有效,而不是對整個事務(wù)有效,而且通常是由于插入數(shù)據(jù)造成的。讀未提交:最低的隔離界別。可能會出現(xiàn)幻讀、臟讀以及不可重復(fù)讀等。在這種隔離級別下,允許一個事務(wù)讀取其它事務(wù)還未提交的數(shù)據(jù)。例如:Martin可能會在David剛往加鎖包中添加完文件還沒向多步提交包中添加文件時,就統(tǒng)計(jì)了David往加鎖包中添加的文件,即統(tǒng)計(jì)結(jié)果為2+7+5=14。而此時,David事務(wù)并沒提交,假如David更新成功,成功提交了事務(wù),統(tǒng)計(jì)結(jié)果應(yīng)該為17,或者David更新失敗,事務(wù)回滾,統(tǒng)計(jì)結(jié)果應(yīng)該為12。DB2四種隔離級別(Isolation Levels)詳解維護(hù)數(shù)據(jù)庫的一致性和數(shù)據(jù)完整性,同時又允許多個應(yīng)用程序同時訪問同一數(shù)據(jù),這樣的特性稱為并發(fā)性。DB2數(shù)據(jù)庫用來嘗試強(qiáng)制實(shí)施并發(fā)性的方法之一是通過使用隔離級別,它決定在第一個事務(wù)訪問數(shù)據(jù)時,如何對其他事務(wù)鎖定或隔離該事務(wù)所使用的數(shù)據(jù)。DB2使用下列隔離級別來強(qiáng)制實(shí)施并發(fā)性: 可重復(fù)讀(Repeatable Read) 讀穩(wěn)定性(Read Stability) 游標(biāo)穩(wěn)定性(Cursor Stability) 未提交讀(Uncommitted Read)可重復(fù)讀隔離級別可以防止所有現(xiàn)象,但是會大大降低并發(fā)性(可以同時訪問同一資源的事務(wù)數(shù)量)。未提交讀隔離級別提供了最大的并發(fā)性,但是“臟讀”、“幻像讀”和“不可重復(fù)讀”都可能出現(xiàn)。默認(rèn)的隔離級別是CS。10.3.1 可重復(fù)讀(RRRepeatable Read)可重復(fù)讀隔離級別是最嚴(yán)格的隔離級別。在該隔離級別下,一個事務(wù)的影響完全與其他并發(fā)事務(wù)隔離,臟讀、不可重復(fù)的讀、幻像讀現(xiàn)象都不會發(fā)生。當(dāng)使用可重復(fù)讀隔離級別時,在事務(wù)執(zhí)行期間會鎖定該事務(wù)以任何方式引用的所有行。因此,如果在同一個事務(wù)中發(fā)出同一個SELECT語句兩次或更多次,那么產(chǎn)生的結(jié)果數(shù)據(jù)集總是相同的。因此,使用可重復(fù)讀隔離級別的事務(wù)可以多次檢索同一行集,并對它們執(zhí)行任意操作,直到提交或回滾操作終止該事務(wù)。但是,在事務(wù)存在期間,不允許其他事務(wù)執(zhí)行會影響這個事務(wù)正在訪問的任何行的插入、更新或刪除操作。為了確保這種行為不會發(fā)生,鎖定該事務(wù)所引用的每一行 而不是僅鎖定被實(shí)際檢索或修改的那些行。因此,如果一個事務(wù)掃描了1000行,但只檢索10行,那么它所掃描的1000行(而不僅是被檢索的10行)都會被鎖定。那么在現(xiàn)實(shí)環(huán)境中可重復(fù)讀隔離級別是如何工作的呢?假定如家酒店使用DB2數(shù)據(jù)庫跟蹤如家酒店的客房信息,包括房間預(yù)訂和房價信息,還有一個基于Web的應(yīng)用程序,它允許顧客按“先到先服務(wù)”的原則預(yù)訂房間。如果旅館預(yù)訂應(yīng)用程序是在可重復(fù)讀隔離級別下運(yùn)行的,當(dāng)顧客掃描某個日期段內(nèi)的可用房間列表時,您(旅館經(jīng)理)將無法更改那些房間在指定日期范圍內(nèi)的房價。同樣,其他顧客也無法進(jìn)行或取消將會更改該列表的預(yù)訂(直到第一個顧客的事務(wù)終止為止)。圖10-6說明了這種行為。 圖10-6 可重復(fù)讀隔離級別的示例在使用可重復(fù)讀隔離級別時,一個事務(wù)中所有被讀取過的行上都會被加上S鎖,直到該事務(wù)被提交或回滾,行上的鎖才會被釋放。這樣可以保證在一個事務(wù)中即使多次讀取同一行,得到的值也不會改變。另外,在同一事務(wù)中即使以同樣的搜索標(biāo)準(zhǔn)重新打開已被處理過的游標(biāo),得到的結(jié)果集也不會改變。可重復(fù)讀相對于讀穩(wěn)定性而言,加鎖的范圍更大。對于讀穩(wěn)定性,應(yīng)用程序只對符合要求的所有行加鎖;而對于可重復(fù)讀,應(yīng)用程序?qū)λ斜粧呙柽^的行都加鎖??芍貜?fù)讀(RR)會鎖定應(yīng)用程序在工作單元中引用的所有行。利用“可重復(fù)讀”,在打開游標(biāo)的相同工作單元內(nèi)一個應(yīng)用程序發(fā)出一個SELECT語句兩次,每次都返回相同的結(jié)果。利用“可重復(fù)讀”,不可能出現(xiàn)丟失更新、臟讀和幻像讀的情況。在該工作單元完成之前,“可重復(fù)讀”應(yīng)用程序可以盡可能多次地檢索和操作這些行。但是,在該工作單元完成之前其他應(yīng)用程序均不能更新、刪除或插入可能會影響結(jié)果表的行?!翱芍貜?fù)讀”應(yīng)用程序不能查看其他應(yīng)用程序的未落實(shí)更改。10.3.2 讀穩(wěn)定性(RSRead Stability)讀穩(wěn)定性隔離級別沒有可重復(fù)讀隔離級別那么嚴(yán)格;因此,它沒有將事務(wù)與其他并發(fā)事務(wù)的效果完全隔離。讀穩(wěn)定性隔離級別可以防止臟讀和不可重復(fù)讀,但是可能出現(xiàn)幻像讀。在使用這個隔離級別時,只是鎖定事務(wù)實(shí)際檢索和修改的行。因此,如果一個事務(wù)掃描了1000行,但只檢索10行,則只有被檢索的10行(而不是所掃描的1000行)被鎖定。因此,如果在同一個事務(wù)中發(fā)出同一個SELECT語句兩次或更多次,那么每次產(chǎn)生的結(jié)果數(shù)據(jù)集可能不同。與可重復(fù)讀隔離級別一樣,在讀穩(wěn)定性隔離級別下運(yùn)行的事務(wù)可以檢索一個行集,并可以對它們執(zhí)行任意操作,直到事務(wù)終止。在這個事務(wù)存在期間,其他事務(wù)不能執(zhí)行那些會影響這個事務(wù)檢索到的行集的更新或刪除操作;但是其他事務(wù)可以執(zhí)行插入操作。如果插入的行與第一個事務(wù)的查詢的選擇條件匹配,那么這些行可能作為幻像出現(xiàn)在后續(xù)產(chǎn)生的結(jié)果數(shù)據(jù)集中。其他事務(wù)對其他行所作的更改,在提交之前是不可見的。那么,讀穩(wěn)定性隔離級別會如何影響如家酒店客房預(yù)定應(yīng)用程序的工作方式呢?當(dāng)一個顧客檢索某個日期段內(nèi)的所有可用房間列表時,您可以更改這個顧客的列表之外的任何房間的房價。同樣,其他顧客可以進(jìn)行或取消房間預(yù)訂。如果第一個顧客再次運(yùn)行同樣的查詢,其他顧客的操作可能會影響他獲得的可用房間列表。如果第一個顧客再次查詢同一個日期段內(nèi)的所有可用房間列表,產(chǎn)生的列表中有可能包含新的房價或第一次產(chǎn)生列表時不可用的房間。圖10-7 說明了這種行為。 圖10-7 讀穩(wěn)定性隔離級別的示例在使用讀穩(wěn)定性隔離級別時,一個事務(wù)中所有被讀取過的行上都會被加上NS鎖,直到該事務(wù)被提交或回滾,行上的鎖才會被釋放。這樣可以保證在一個事務(wù)中即使多次讀取同一行,得到的值也不會改變。但是,如果使用這種隔離級別,在一個事務(wù)中,如果使用同樣的搜索標(biāo)準(zhǔn)重新打開已被處理過的游標(biāo),則結(jié)果集可能改變(可能會增加某些行,這些行被稱為幻影行 (Phantom)。這是因?yàn)镽S隔離級不能阻止通過插入或更新操作在結(jié)果集中加入新行)。讀穩(wěn)定性(RS)只鎖定應(yīng)用程序在工作單元中檢索的那些行。它確保在某個工作單元完成之前,在該工作單元運(yùn)行期間的任何限定行讀取不被其他應(yīng)用程序進(jìn)程更改,且確保不會讀取由另一個應(yīng)用程序進(jìn)程所更改的任何行,直至該進(jìn)程落實(shí)了這些更改。也就是說,不可能出現(xiàn)“不可重復(fù)讀”情形。“讀穩(wěn)定性”隔離級別的其中一個目標(biāo)是提供較高并行性以及數(shù)據(jù)的穩(wěn)定視圖。為了有助于達(dá)到此目標(biāo),優(yōu)化器確保在發(fā)生鎖定升級前不獲取表級鎖定。“讀穩(wěn)定性”隔離級別最適用于包括下列所有特征的應(yīng)用程序: 在并發(fā)環(huán)境下運(yùn)行 須要限定某些行在工作單元運(yùn)行期間保持穩(wěn)定 在工作單元中不會多次發(fā)出相同的查詢,或者在同一工作單元中發(fā)出多次查詢時并不要求該查詢獲得相同的回答10.3.3 游標(biāo)穩(wěn)定性(CSCursor Stability)游標(biāo)穩(wěn)定性隔離級別在隔離事務(wù)效果方面非常寬松。它可以防止臟讀,但有可能出現(xiàn)不可重復(fù)讀和幻像讀。這是因?yàn)樵诖蠖鄶?shù)情況下,游標(biāo)穩(wěn)定性隔離級別只鎖定事務(wù)聲明并打開的游標(biāo)當(dāng)前所引用的行。當(dāng)使用游標(biāo)穩(wěn)定性隔離級別的事務(wù)通過游標(biāo)從表中檢索行時,其他事務(wù)不能更新或刪除游標(biāo)所引用的行。但是,如果被鎖定的行本身不是用索引訪問的,那么其他事務(wù)可以將新的行添加到表中,以及對被鎖定行前后的行進(jìn)行更新和/或刪除操作。所獲取的鎖一直有效,直到游標(biāo)重定位或事務(wù)終止為止(如果游標(biāo)重定位,原來行上的鎖就被釋放,并獲得游標(biāo)現(xiàn)在所引用行上的鎖)。此外,如果事務(wù)修改了它檢索到的任何行,那么在事務(wù)終止之前,其他事務(wù)不能更新或刪除該行,即使游標(biāo)不再位于被修改的行。與可重復(fù)讀和讀穩(wěn)定性隔離級別一樣,其他事務(wù)在其他行上進(jìn)行的更改,在這些更改提交之前對于使用游標(biāo)穩(wěn)定性隔離級別(這是默認(rèn)的隔離級別)的事務(wù)是不可見的。如果如家酒店客房預(yù)定程序在游標(biāo)穩(wěn)定性隔離級別下運(yùn)行,那么會有什么影響呢?當(dāng)一個顧客檢索某個日期段內(nèi)所有可用房間的列表,然后查看產(chǎn)生的列表上每個房間的信息時(每次查看一個房間),您可以更改旅館中任何房間的房價,但是這個顧客當(dāng)前正在查看的房間除外(對于指定的日期段)。同樣,其他顧客可以對任何房間進(jìn)行或取消預(yù)訂,但是這個顧客當(dāng)前正在查看的房間除外(對于指定的日期段)。也就是說,對于第一個顧客當(dāng)前正在查看的房間記錄,您和其他顧客都不能進(jìn)行任何操作。當(dāng)?shù)谝粋€顧客查看列表中另一個房間的信息時,您和其他顧客就可以修改他剛才查看的房間記錄(如果這個顧客沒有預(yù)訂這個房間的話)。圖10-8說明了這種行為。 圖10-8 游標(biāo)穩(wěn)定性隔離級別的示例在使用游標(biāo)穩(wěn)定性隔離級別時,一個事務(wù)的結(jié)果集中只有正在被讀取的那一行(游標(biāo)指向的行)會被加上NS鎖,其他未被處理的行上不被加鎖。這種隔離級別只能保證正在被處理的行的值不會被其他并發(fā)的程序所改變。該隔離級別是DB2默認(rèn)的隔離級別。當(dāng)在行上定位游標(biāo)時,游標(biāo)穩(wěn)定性(CS)會鎖定任何由應(yīng)用程序的事務(wù)所訪問的行。此鎖定在讀取下一行或終止事務(wù)之前有效。但是,如果更改了某一行上的任何數(shù)據(jù),那么在對數(shù)據(jù)庫落實(shí)更改之前必須掛起該鎖定。對于具有“游標(biāo)穩(wěn)定性”的應(yīng)用程序已檢索的行,當(dāng)該行上有任何可更新的游標(biāo)時,任何其他應(yīng)用程序都不能更新或刪除該行?!坝螛?biāo)穩(wěn)定性”應(yīng)用程序不能查看其他應(yīng)用程序的未落實(shí)更改。使用“游標(biāo)穩(wěn)定性”隔離級別,可能會出現(xiàn)不可重復(fù)讀和幻像讀現(xiàn)象?!坝螛?biāo)穩(wěn)定性”是默認(rèn)隔離級別,建議在需要最大并行性,但只看到其他應(yīng)用程序中已落實(shí)行的情況下才使用。10.3.4 未提交讀(URUncommitted Read)未提交讀隔離級別是最不嚴(yán)格的隔離級別。實(shí)際上,在使用這個隔離級別時,僅當(dāng)另一個事務(wù)試圖刪除或更改被檢索的行所在的表時,才會鎖定該檢索的行。因?yàn)樵谑褂眠@種隔離級別時,行通常保持未鎖定狀態(tài),所以臟讀、不可重復(fù)讀和幻像讀都可能會發(fā)生。因此,未提交讀隔離級別通常用于那些訪問只讀表和視圖的事務(wù),以及某些執(zhí)行SELECT語句的事務(wù)(只要其他事務(wù)的未提交數(shù)據(jù)對這些語句沒有負(fù)面效果)。顧名思義,其他事務(wù)對行所作的更改在被提交之前對于使用未提交讀隔離級別的事務(wù)是可見的。但是,此類事務(wù)不能看見或訪問其他事務(wù)所創(chuàng)建的表、視圖或索引,直到那些事務(wù)被提交為止。類似地,如果其他事務(wù)刪除了現(xiàn)有的表、視圖或索引,那么僅當(dāng)進(jìn)行刪除操作的事務(wù)終止時,使用未提交讀隔離級別的事務(wù)才能知道這些對象不再存在了(一定要注意一點(diǎn):當(dāng)運(yùn)行在未提交讀隔離級別下的事務(wù)使用可更新游標(biāo)時,該事務(wù)的行為和在游標(biāo)穩(wěn)定性隔離級別下運(yùn)行一樣,并應(yīng)用游標(biāo)穩(wěn)定性隔離級別的約束)。那么未提交讀隔離級別對如家酒店客房預(yù)定應(yīng)用程序有什么影響呢?現(xiàn)在,當(dāng)一個顧客檢索某個日期段內(nèi)的所有可用房間列表時,您可以更改旅館中任何房間在任何日期的房價,而其他顧客也可以對任何房間進(jìn)行或取消預(yù)訂,包括第一個顧客當(dāng)前正在查看的房間記錄(對于指定的日期段)。另外,第一個顧客生成的房間列表可能包含其他顧客正在預(yù)訂(因此實(shí)際上不可用)的房間。圖10-9說明了這種行為。 圖10-9 未提交讀隔離級別示例未提交讀(UR)允許應(yīng)用程序訪問其他事務(wù)的未提交的更改。除非其他應(yīng)用程序嘗試刪除或改變該表,否則該應(yīng)用程序不會鎖定正讀取的行而使其他應(yīng)用程序不能訪問該行。對于只讀和可更新的游標(biāo),“未提交的讀”的工作方式有所不同。在使用未提交讀隔離級別時,對于只讀操作,不加行鎖。典型的只讀操作包括: SELECT語句的結(jié)果集(比如語句中包括ORDER BY子句);定義游標(biāo)時指明FOR FETCH ONLY。未提交讀隔離級別可以改善應(yīng)用程序的性能,同時可以最大程度地允許并發(fā)。但是,應(yīng)用程序的數(shù)據(jù)完整性將受到威脅。如果需要讀取未提交的數(shù)據(jù),該隔離級是唯一選擇。只
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 音樂美學(xué)基礎(chǔ)試題及答案
- 2025年軟件評測師考試高效保健策略試題及答案
- 公益活動策劃合同協(xié)議書
- 系統(tǒng)分析師考試技術(shù)應(yīng)對策略試題及答案
- 系統(tǒng)分析師2025年考試樣題分析與解答試題及答案
- MS Office文件管理技巧試題及答案
- 2025政府采購合同模板
- 2025酒店員工雇傭合同
- 新冠肺炎試題及答案護(hù)理
- 軟件測試中的文檔管理與最佳實(shí)踐試題及答案
- 2024-2025學(xué)年滬教版(五四學(xué)制)七年級英語下學(xué)期考點(diǎn)突破:書面表達(dá)15篇(含答案)
- 小區(qū)中控室面試題及答案
- 交規(guī)考試題庫
- 選擇性必修1 《當(dāng)代國際政治與經(jīng)濟(jì)》(主觀題答題模版)
- 量子光子ics在生物醫(yī)學(xué)中的應(yīng)用-全面剖析
- 廣東日語三模試題及答案
- 2025年度手術(shù)室感染控制工作計(jì)劃
- 課標(biāo)視角下數(shù)學(xué)跨學(xué)科項(xiàng)目式學(xué)習(xí)案例設(shè)計(jì)與思考
- 國開《離散數(shù)學(xué)》大作業(yè)及答案
- 離婚協(xié)議書 標(biāo)準(zhǔn)版電子版(2025年版)
- DB11∕T2341-2024城市軌道交通車輛主動式障礙物檢測系統(tǒng)應(yīng)用技術(shù)要求
評論
0/150
提交評論