MS-SQL事務(wù)隔離級別_第1頁
MS-SQL事務(wù)隔離級別_第2頁
MS-SQL事務(wù)隔離級別_第3頁
MS-SQL事務(wù)隔離級別_第4頁
MS-SQL事務(wù)隔離級別_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Oracel和SQL Server并發(fā)性和讀一致性比較事務(wù):事務(wù)是一個不可分割的工作邏輯單元。在數(shù)據(jù)庫系統(tǒng)上執(zhí)行并發(fā)操作時事務(wù)是作為最小的控制單元來使用的SQL server中數(shù)據(jù)庫的默認隔離級別是READ COMMITTED并發(fā)訪問的不利影響并發(fā)訪問,如果沒有并發(fā)訪問控制機制,可能產(chǎn)生的不利影響有以下幾種:臟讀,丟失更新,不可重復(fù)讀,幻像讀1.臟讀:指當(dāng)一個事務(wù)正在訪問數(shù)據(jù),并且對數(shù)據(jù)進行了修改,而這種修改還沒有提交到數(shù)據(jù)庫中,這時,另外一個事務(wù)也訪問這個數(shù)據(jù),然后使用了這個數(shù)據(jù)。因為這個數(shù)據(jù)是還沒有提交的數(shù)據(jù),那么另外一個事務(wù)讀到的這個數(shù)據(jù)是臟數(shù)據(jù),依據(jù)臟數(shù)據(jù)所做的操作可能是不正確的。2.

2、丟失更新:當(dāng)兩個或多個事務(wù)選擇同一行,然后基于最初選定的值更新該行時,會發(fā)生丟失更新問題。每個事務(wù)都不知道其它事務(wù)的存在。最后的更新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)丟失。3.不可重復(fù)讀:是指在一個事務(wù)內(nèi),多次讀同一數(shù)據(jù)。在這個事務(wù)還沒有結(jié)束時,另外一個事務(wù)也訪問該同一數(shù)據(jù)。那么,在第一個事務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個事務(wù)的修改,那么第一個事務(wù)兩次讀到的的數(shù)據(jù)可能是不一樣的。這樣就發(fā)生了在一個事務(wù)內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為是不可重復(fù)讀。4.幻象讀:指當(dāng)事務(wù)不是獨立執(zhí)行時發(fā)生的一種現(xiàn)象,例如第一個事務(wù)對一個表中的數(shù)據(jù)進行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時,第二個事務(wù)

3、也修改這個表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會發(fā)生操作第一個事務(wù)的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣。假如有兩個事務(wù)并發(fā),順序如下: 那么在事務(wù)A中,query1跟query2查詢出來的結(jié)果是否一樣呢?這就跟事務(wù)隔離級別有關(guān)了。SQL的標(biāo)準(zhǔn)定義里面,一共有四種級別:1.read uncommited:讀取未提交的數(shù)據(jù).就是其他事務(wù)已經(jīng)修改但還未commit的.2.read commited:讀取已提交的數(shù)據(jù)query2會跟query1讀取的數(shù)據(jù)不一樣.3.repeatable read:可重復(fù)讀取,即query1跟query2讀取的數(shù)據(jù)是一樣的.4.s

4、erializable:序列化.SQL標(biāo)準(zhǔn)用三個必須在并行的事務(wù)之間避免的現(xiàn)象定義了四個級別的事務(wù)隔離。這些不希望發(fā)生的現(xiàn)象是:1.臟讀(dirty reads:一個事務(wù)讀取了被另一個事務(wù)改寫但還沒提交的數(shù)據(jù).2.不可重復(fù)讀(non-repeatable reads:一個事務(wù)重新讀取前面讀取過的數(shù)據(jù),發(fā)現(xiàn)該數(shù)據(jù)已經(jīng)被另一個已提交的事務(wù)修改過(一個事務(wù)執(zhí)行相同的查詢兩次或兩次以上,但每次查詢結(jié)果都不一樣。這由于另一個并發(fā)事務(wù)在兩次查詢之間更新(update了數(shù)據(jù).3.幻讀(phantom read:在兩次查詢同一時間點數(shù)據(jù)時,發(fā)現(xiàn)數(shù)據(jù)數(shù)量發(fā)生改變。(當(dāng)一個事務(wù)讀取幾行記錄后,另一個并發(fā)事務(wù)插入(

5、insert,delete一些記錄. SQLServer我們首先在SQLServer上做了實驗,SQLServer一共支持四種隔離級別,read uncommited跟read commited我們沒有實驗,我們直接先實驗repeatable read.如果事務(wù)A定義了如下級別,那么當(dāng)事務(wù)B執(zhí)行到modify1這條語句時,如果modify1是update的話,就被鎖起來,一直等到事務(wù)A提交完以后,鎖才會被釋放。而如果是insert的話,則可以順利進行下去,然后在事務(wù)A中,query2查到的數(shù)據(jù),是已經(jīng)被事務(wù)B修改過的數(shù)據(jù)。(發(fā)生了幻讀如果將級別定義在serializable的話,則在modif

6、y1語句中,update,insert 或者delete都會被鎖掉。也就是說,SQLServer對這些級別的支持,是通過鎖來做到的,雖然可以保證事務(wù)正常進行,但是并行的性能卻很差。Oracleoracle只支持兩個級別,read commited跟serializable,實驗的結(jié)果是,oracle的serializable是通過版本控制(scn來完成的,而不是通過鎖機制,這就保證了并行的性能。Oracle的默認級別是read commited.的事務(wù)級別Oracle的事務(wù)級別OracleOracle明確支持read committed和serializable、read only三個級別語句

7、級別read committed;語句級別的read committed=serializable的一致性+read uncommited的并發(fā)性讀一致性實現(xiàn)OracleOracle利用Undo Record和MultiversionData實現(xiàn)一致性 Writer will not block reader and vise versa Oracle的定義 When the ORACLE server begins executing a SELECT statement,itdetermines the current SCN and ensure that any changes not

8、 commitedbefore this SCN are not processed by the statement。 select語句只能看到, 在它執(zhí)行那一時間點之前已經(jīng)提交的數(shù)據(jù)。 Mysql 6 MySQL 也支持四個級別,而且 MySQL 也是通過版本控制而非鎖機 制來完成的。 假如有兩個事務(wù)并發(fā),順序如下: MySQL 默認使用的是 REPEATABLE READ .Transaction A 的 第 1, 2,3 次 query 都是一樣的。(query3 好像沒有發(fā)生幻讀,不知道什 么原因, 研究中) 只有第 query4 才顯示 Transaction B 剛剛 insert , 的數(shù)據(jù) Transaction A query3 的時候可以通過 SELE

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論