




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1并發(fā)控制講解問(wèn)題的產(chǎn)生
多事務(wù)執(zhí)行方式串行執(zhí)行T1T2T3交叉并發(fā)執(zhí)行第1頁(yè)/共40頁(yè)問(wèn)題的產(chǎn)生
事務(wù)并發(fā)執(zhí)行帶來(lái)的問(wèn)題會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況可能會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞事務(wù)和數(shù)據(jù)庫(kù)的一致性。第2頁(yè)/共40頁(yè)
并發(fā)控制
并發(fā)控制概述封鎖兩段鎖協(xié)議封鎖的粒度
SQLServer的并發(fā)控制小結(jié)第3頁(yè)/共40頁(yè)T1的修改被T2覆蓋了!并發(fā)控制概述并發(fā)操作帶來(lái)數(shù)據(jù)的不一致性實(shí)例示例:飛機(jī)訂票系統(tǒng)中的一個(gè)活動(dòng)序列①甲售票點(diǎn)(甲事務(wù))讀出某航班的機(jī)票余額A,設(shè)A=16;②乙售票點(diǎn)(乙事務(wù))讀出同一航班的機(jī)票余額A,也為16;③甲售票點(diǎn)賣(mài)出一張機(jī)票,修改余額A←A-1,所以A為15,把A寫(xiě)回?cái)?shù)據(jù)庫(kù);④乙售票點(diǎn)也賣(mài)出一張機(jī)票,修改余額A←A-1,所以A為15,把A寫(xiě)回?cái)?shù)據(jù)庫(kù)結(jié)果:賣(mài)出兩張機(jī)票,數(shù)據(jù)庫(kù)中機(jī)票余額只減少1第4頁(yè)/共40頁(yè)并發(fā)控制概述這種情況稱(chēng)為數(shù)據(jù)庫(kù)的不一致性,是由并發(fā)操作引起的。在并發(fā)操作情況下,對(duì)甲、乙兩個(gè)事務(wù)的操作序列的調(diào)度是隨機(jī)的。若按上面的調(diào)度序列執(zhí)行,甲事務(wù)的修改就被丟失。原因:第4步中乙事務(wù)修改A并寫(xiě)回后覆蓋了甲事務(wù)的修改第5頁(yè)/共40頁(yè)并發(fā)控制概述
并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性丟失修改(LostUpdate)兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)并修改,T2的提交結(jié)果破壞了T1提交的結(jié)果,導(dǎo)致T1的修改被丟失。上面飛機(jī)訂票例子就屬此類(lèi)不可重復(fù)讀(Non-repeatableRead)事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2執(zhí)行更新、刪除或插入操作,使T1無(wú)法再現(xiàn)前一次讀取結(jié)果。其中,由執(zhí)行刪除或插入操作引起的不可重復(fù)讀現(xiàn)象也成為“幻象讀”。第6頁(yè)/共40頁(yè)并發(fā)控制概述
并發(fā)操作帶來(lái)的數(shù)據(jù)不一致性讀“臟”數(shù)據(jù)(DirtyRead)事務(wù)T1修改某一數(shù)據(jù),并將其寫(xiě)回磁盤(pán)事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤銷(xiāo)這時(shí)T1已修改過(guò)的數(shù)據(jù)恢復(fù)原值,T2讀到的數(shù)據(jù)就與數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)第7頁(yè)/共40頁(yè)并發(fā)控制概述
并發(fā)控制并發(fā)控制就是要用正確的方式調(diào)度并發(fā)操作,避免造成數(shù)據(jù)的不一致性,使用一個(gè)事務(wù)的執(zhí)行不受其他事務(wù)的干擾。并發(fā)控制機(jī)制的任務(wù)對(duì)并發(fā)操作進(jìn)行正確調(diào)度保證事務(wù)的隔離性保證數(shù)據(jù)庫(kù)的一致性第8頁(yè)/共40頁(yè)并發(fā)控制概述
并發(fā)控制的主要技術(shù)封鎖(Locking)時(shí)間戳(Timestamp)樂(lè)觀控制法
在SQLServer中,并發(fā)控制是通過(guò)鎖來(lái)實(shí)現(xiàn)的。第9頁(yè)/共40頁(yè)
并發(fā)控制
并發(fā)控制概述
封鎖兩段鎖協(xié)議封鎖的粒度
SQLServer的并發(fā)控制小結(jié)第10頁(yè)/共40頁(yè)封鎖
什么是封鎖?事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象(例如表、記錄等)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。在事務(wù)T釋放它的鎖之前,其它的事務(wù)不能更新此數(shù)據(jù)對(duì)象。第11頁(yè)/共40頁(yè)封鎖
基本封鎖類(lèi)型排它鎖(又稱(chēng)為寫(xiě)鎖,簡(jiǎn)記為X鎖)若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則:在T釋放A上的鎖之前,只允許T讀取和修改A,其他事務(wù)不能讀取和修改A。共享鎖(又稱(chēng)為讀鎖,簡(jiǎn)記為S鎖)若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則:在T釋放A上的S鎖之前,其他事務(wù)可以讀A,但不能對(duì)A做修改。第12頁(yè)/共40頁(yè)
并發(fā)控制
并發(fā)控制概述封鎖
兩段鎖協(xié)議封鎖的粒度
SQLServer的并發(fā)控制小結(jié)第13頁(yè)/共40頁(yè)兩段鎖協(xié)議
DBMS對(duì)并發(fā)事務(wù)不同的調(diào)度可能會(huì)產(chǎn)生不同的結(jié)果,什么樣的調(diào)度是正確的?可串行化調(diào)度多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行這些事務(wù)時(shí)的結(jié)果相同??纱行允遣l(fā)事務(wù)正確調(diào)度的準(zhǔn)則一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確調(diào)度第14頁(yè)/共40頁(yè)兩段鎖協(xié)議封鎖協(xié)議
運(yùn)用封鎖方法時(shí),對(duì)數(shù)據(jù)對(duì)象加鎖時(shí)需要約定一些規(guī)則何時(shí)申請(qǐng)封鎖持鎖時(shí)間何時(shí)釋放封鎖等
兩段封鎖協(xié)議(Two-PhaseLocking,簡(jiǎn)稱(chēng)2PL)
是最常用的一種封鎖協(xié)議,用于保證事務(wù)的可串行性調(diào)度。第15頁(yè)/共40頁(yè)兩段鎖協(xié)議
兩段鎖協(xié)議指所有事務(wù)必須分兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)加鎖和解鎖
在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫(xiě)操作之前,事務(wù)首先要獲得對(duì)該數(shù)據(jù)的封鎖在釋放一個(gè)封鎖之后,事務(wù)不再申請(qǐng)和獲得任何其他封鎖第16頁(yè)/共40頁(yè)兩段鎖協(xié)議“兩段”鎖的含義事務(wù)分為兩個(gè)階段第一階段是獲得封鎖,也稱(chēng)為擴(kuò)展階段事務(wù)可以申請(qǐng)獲得任何數(shù)據(jù)項(xiàng)上的任何類(lèi)型的鎖,但是不能釋放任何鎖第二階段是釋放封鎖,也稱(chēng)為收縮階段事務(wù)可以釋放任何數(shù)據(jù)項(xiàng)上的任何類(lèi)型的鎖,但是不能再申請(qǐng)任何鎖第17頁(yè)/共40頁(yè)兩段鎖協(xié)議例:事務(wù)Ti遵守兩段鎖協(xié)議,其封鎖序列是:SlockASlockBXlockCUnlockBUnlockAUnlockC;|← 擴(kuò)展階段 →| |← 收縮階段→|事務(wù)Tj不遵守兩段鎖協(xié)議,其封鎖序列是:
SlockAUnlockASlockBXlockCUnlockCUnlockB;第18頁(yè)/共40頁(yè)兩段鎖協(xié)議
事務(wù)遵守兩段鎖協(xié)議是并發(fā)事務(wù)正確調(diào)度的充分條件,而不是必要條件。若并發(fā)事務(wù)都遵守兩段鎖協(xié)議,則對(duì)這些事務(wù)的任何并發(fā)調(diào)度策略都是正確的;若并發(fā)事務(wù)的一個(gè)調(diào)度是正確的,不一定所有事務(wù)都符合兩段鎖協(xié)議第19頁(yè)/共40頁(yè)
并發(fā)控制
并發(fā)控制概述封鎖兩段鎖協(xié)議
封鎖的粒度
SQLServer的并發(fā)控制小結(jié)第20頁(yè)/共40頁(yè)封鎖粒度
封鎖對(duì)象的大小稱(chēng)為封鎖粒度(Granularity)
封鎖的對(duì)象:邏輯單元,物理單元例:在關(guān)系數(shù)據(jù)庫(kù)中,封鎖對(duì)象:邏輯單元:屬性值、屬性值集合、元組、關(guān)系、索引項(xiàng)、整個(gè)索引、整個(gè)數(shù)據(jù)庫(kù)等物理單元:頁(yè)(數(shù)據(jù)頁(yè)或索引頁(yè))、物理記錄等第21頁(yè)/共40頁(yè)封鎖粒度
封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開(kāi)銷(xiāo)密切相關(guān)。封鎖的粒度越大,數(shù)據(jù)庫(kù)所能夠封鎖的數(shù)據(jù)單元就越少,并發(fā)度就越小,系統(tǒng)開(kāi)銷(xiāo)也越?。环怄i的粒度越小,并發(fā)度較高,但系統(tǒng)開(kāi)銷(xiāo)也就越大第22頁(yè)/共40頁(yè)封鎖粒度示例:若封鎖粒度是數(shù)據(jù)頁(yè),事務(wù)T1需要修改元組L1,則T1必須對(duì)包含L1的整個(gè)數(shù)據(jù)頁(yè)A加鎖。如果T1對(duì)A加鎖后事務(wù)T2要修改A中元組L2,則T2被迫等待,直到T1釋放A。如果封鎖粒度是元組,則T1和T2可以同時(shí)對(duì)L1和L2加鎖,不需要互相等待,提高了系統(tǒng)的并行度。又如,事務(wù)T需要讀取整個(gè)表,若封鎖粒度是元組,T必須對(duì)表中的每一個(gè)元組加鎖,開(kāi)銷(xiāo)極大第23頁(yè)/共40頁(yè)封鎖粒度選擇封鎖粒度同時(shí)考慮封鎖開(kāi)銷(xiāo)和并發(fā)度兩個(gè)因素,適當(dāng)選擇封鎖粒度需要處理多個(gè)關(guān)系的大量元組的用戶事務(wù):以數(shù)據(jù)庫(kù)為封鎖單位需要處理大量元組的用戶事務(wù):以關(guān)系為封鎖單元只處理少量元組的用戶事務(wù):以元組為封鎖單位第24頁(yè)/共40頁(yè)
并發(fā)控制
并發(fā)控制概述封鎖兩段鎖協(xié)議封鎖的粒度
SQLServer的并發(fā)控制小結(jié)第25頁(yè)/共40頁(yè)
事務(wù)的隔離級(jí)別“鎖”保證了并發(fā)事務(wù)執(zhí)行的隔離性,但在在一些實(shí)際應(yīng)用中,并不要求事務(wù)具有完全的隔離性,可以允許一些“臟讀”、“幻象讀”等的情況存在??稍O(shè)置事務(wù)的隔離級(jí)別,用于描述一個(gè)事務(wù)必須與其他事務(wù)所進(jìn)行的資源或數(shù)據(jù)更改相隔離的程度。SQLServer的并發(fā)控制第26頁(yè)/共40頁(yè)
事務(wù)的隔離級(jí)別
SQLServer2005支持的隔離級(jí)別(從最低到最高)如下:未提交讀(READUNCOMMITTED)。已提交讀(READCOMMITTED)??芍貜?fù)讀(REPEATEABLEREAD)??尚蛄谢纱谢?SERIALIZABLE)。隨著隔離級(jí)別的提高,可以更有效地防止數(shù)據(jù)的不一致性。但是,這將降低事務(wù)的并發(fā)處理能力,會(huì)影響多用戶訪問(wèn)。SQLServer的并發(fā)控制第27頁(yè)/共40頁(yè)SQLServer的并發(fā)控制
事務(wù)的隔離級(jí)別隔離級(jí)別臟讀不可重復(fù)讀幻讀未提交讀是是是已提交讀否是是可重復(fù)讀否否是可串行讀否否否第28頁(yè)/共40頁(yè)
事務(wù)的隔離級(jí)別
隔離級(jí)別可以通過(guò)編程方式進(jìn)行設(shè)置,也可以通過(guò)使用SQL語(yǔ)法設(shè)置:
SETTRANSACTIONISOLATIONLEVEL
{READUNCOMMITTED|READCOMMITTED|
REPEATABLEREAD|SERIALIZABLE}SQLServer的并發(fā)控制第29頁(yè)/共40頁(yè)
鎖的管理在SQLServer2005中,“鎖”由數(shù)據(jù)庫(kù)引擎在內(nèi)部進(jìn)行管理。根據(jù)用戶采取的操作,會(huì)自動(dòng)獲取和釋放鎖。當(dāng)事務(wù)開(kāi)始并在事務(wù)內(nèi)執(zhí)行命令時(shí),SQLServer2005會(huì)鎖定任何所需的資源以幫助保護(hù)所需隔離級(jí)別的資源。默認(rèn)情況下,行級(jí)鎖定用于數(shù)據(jù)頁(yè),頁(yè)級(jí)鎖定用于索引頁(yè)。當(dāng)超過(guò)行鎖數(shù)的可配置閾值時(shí),鎖管理器將自動(dòng)執(zhí)行鎖升級(jí)。SQLServer的并發(fā)控制第30頁(yè)/共40頁(yè)SQLServer支持的鎖類(lèi)型鎖類(lèi)型說(shuō)明共享(S)保護(hù)資源,以便只能對(duì)其進(jìn)行讀取訪問(wèn)。當(dāng)資源上存在共享(S)鎖時(shí),其他事務(wù)均不能修改數(shù)據(jù)。排他(X)指示數(shù)據(jù)修改,例如插入、更新或刪除。確保不能同時(shí)對(duì)同一資源進(jìn)行多個(gè)更新。更新(U)防止常見(jiàn)形式的死鎖。每次只有一個(gè)事務(wù)可以獲得資源上的U鎖。如果事務(wù)修改資源,則U鎖將轉(zhuǎn)換為X鎖。架構(gòu)在執(zhí)行依賴于表架構(gòu)的操作時(shí)使用。架構(gòu)鎖的類(lèi)型:架構(gòu)修改(Sch-M)和架構(gòu)穩(wěn)定性(Sch-S)。意向建立鎖層次結(jié)構(gòu)。最常見(jiàn)的意向鎖類(lèi)型是IS、IU和IX。這些鎖指示事務(wù)正在處理層次結(jié)構(gòu)中較低級(jí)別的某些資源,而不是所有資源。較低級(jí)別的資源將具有S、U或X鎖。SQLServer的并發(fā)控制第31頁(yè)/共40頁(yè)
可以鎖定的資源SQLServer的并發(fā)控制鎖說(shuō)明RID行標(biāo)識(shí)符,用于鎖定表內(nèi)的單個(gè)行。KEY索引中的行鎖。用于保護(hù)可串行事務(wù)中的鍵范圍。PAG一個(gè)8K的數(shù)據(jù)頁(yè)或索引頁(yè)。TAB整個(gè)表,包括所有數(shù)據(jù)和索引。DB數(shù)據(jù)庫(kù)。第32頁(yè)/共40頁(yè)
顯示鎖定信息查看鎖信息可以通過(guò)系統(tǒng)視圖sys.dm_tran_locks進(jìn)行查看。例如(1)先執(zhí)行以下語(yǔ)句SQLServer的并發(fā)控制USE教學(xué)成績(jī)管理數(shù)據(jù)庫(kù)GOBEGINTRANSACTIONSELECT學(xué)號(hào),姓名FROM學(xué)生信息表WHERE班級(jí)編號(hào)='200301'INSERTINTO學(xué)生信息表(學(xué)號(hào),姓名,性別)VALUES('110099','黃麗','女')UPDATE學(xué)生信息表SET姓名='黃麗麗'WHERE學(xué)號(hào)='110099'DELETE學(xué)生信息表WHERE學(xué)號(hào)='110099'第33頁(yè)/共40頁(yè)
顯示鎖定信息(2)執(zhí)行以下SELECT語(yǔ)句來(lái)獲取鎖信息。(3)執(zhí)行COMMITTRANSCATION語(yǔ)句來(lái)提交事務(wù)。SQLServer的并發(fā)控制SELECTresource_type,resource_associated_entity_id,request_status,request_mode,request_session_id,resource_descriptionFROMsys.dm_tran_locksWHEREresource_database_id=DB_ID(‘教學(xué)成績(jī)管理數(shù)據(jù)庫(kù)');第34頁(yè)/共40頁(yè)
顯示鎖定信息SQLServer的并發(fā)控制查詢結(jié)果顯示,事務(wù)執(zhí)行過(guò)程中,數(shù)據(jù)操作的數(shù)據(jù)庫(kù)上存在一個(gè)共享鎖(request_mode=S),聚集索引的一個(gè)鍵上,存在一個(gè)排他鎖(X),在其相應(yīng)的表和頁(yè)上分別存在一個(gè)意向排他鎖(IX)。第35頁(yè)/共40頁(yè)
并發(fā)控制
并發(fā)控制概述封鎖兩段鎖協(xié)議封鎖的粒度
SQLServer的并發(fā)控制
小結(jié)第36頁(yè)/共40頁(yè)小結(jié)數(shù)據(jù)共享與數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 家電行業(yè)交貨進(jìn)度監(jiān)控措施
- 供電所2025年安全生產(chǎn)措施制定與實(shí)施計(jì)劃
- 消化道出血專(zhuān)科護(hù)理
- 2025年流變儀項(xiàng)目投資分析及可行性報(bào)告
- 遠(yuǎn)程醫(yī)療中多重耐藥菌感染監(jiān)測(cè)措施
- 馬口鐵三片罐生產(chǎn)線技術(shù)改造項(xiàng)目可行性研究報(bào)告
- 保定聚丙烯項(xiàng)目可行性研究報(bào)告
- 中國(guó)合成塑料項(xiàng)目經(jīng)營(yíng)分析報(bào)告
- 智能家居設(shè)備安全防護(hù)計(jì)劃
- 小學(xué)教務(wù)處文化建設(shè)工作計(jì)劃
- 風(fēng)對(duì)起飛和著陸影響及修正和風(fēng)切變完整版課件
- 環(huán)網(wǎng)柜基礎(chǔ)知識(shí)培訓(xùn)課程完整版課件
- 大數(shù)據(jù)時(shí)代的互聯(lián)網(wǎng)信息安全題庫(kù)
- DL∕T 1776-2017 電力系統(tǒng)用交流濾波電容器技術(shù)導(dǎo)則
- 浙江省紹興市上虞區(qū)2021-2022學(xué)年六年級(jí)下學(xué)期期末質(zhì)量檢測(cè)英語(yǔ)試題(word版無(wú)答案無(wú)聽(tīng)力音頻和原文)
- 護(hù)理體查操作評(píng)分標(biāo)準(zhǔn)
- 《交通調(diào)查與數(shù)據(jù)分析》課程教學(xué)大綱(本科)
- 兩輪自平衡小車(chē)的設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- 推進(jìn)中國(guó)法治進(jìn)程的10大案件
- 下面講上品往生后的情形
- 某日企薪酬制
評(píng)論
0/150
提交評(píng)論