事務在執行中不受其它事務干擾的方法(保持隔離性):
序列:每個事務依次順序執行
並行但控制:
事務之間併發執行,dbms調整事務的排程,使其執行結果與一次只執行乙個事務的結果相同
排程是可序列化的:多個事務交叉排程的結果與某乙個序列排程的結果相同
dbms認為事務序列排程的結果保持了資料庫的一致性,都是正確的
乙個排程如果是可序列化的,系統認為其排程是乙個正確的排程,保持了資料庫的一致性
若乙個排程衝突等價於乙個序列排程,則該排程是衝突可序列化的。
例如
排程s= r1(a) w1(a) r2(a) w2(a) r1(b) w1(b) r2(b) w2(b)
r1(b)與w2(a)指令不衝突,可以交換執行順序;
r1(b)與r2(a)指令不衝突,可以交換執行順序;
w1(b)與w2(a)指令不衝突,可以交換執行順序;
w1(b)與r2(a)指令不衝突,可以交換執行順序。
排程s』= r1(a) w1(a) r1(b) w1(b) r2(a) w2(a) r2(b) w2(b)
排程s』是乙個序列排程。
排程s等價於序列排程s』,是衝突可序列化的。
對同一事務集,如果兩個排程s1和s2在任何時候都保證每個事務讀取相同的值,寫入資料庫的最終狀態也是一樣的,則稱排程s1和s2檢視等價。
如果某個排程檢視等價於乙個序列排程,則稱這個排程是檢視可序列化的
如果排程是衝突可序列化的,則該排程一定是檢視可序列化的。但反過來未必成立。
舉例設排程s1= r1(a) w3(a) r2(b) w1(b)
經過非衝突調整,s2 = r2(b) r1(a) w1(b) w3(a)
排程s1和排程s2是衝突等價的。
又因為排程s2為一串行排程,因此排程s1是衝突可序列化的。
對於排程s1和s2,事務t1讀取的a、事務t2讀取的b都是資料庫的初始值;資料庫最終的a、b值都是由事務t3和t1寫入的。
因此,排程s1和s2是檢視可序列化的。
判定乙個排程是否是衝突可序列化的,可以使用前驅圖(precedence graph)
若前驅圖中存在環,則表示排程s是不可序列化的。
反之,若前驅圖中不存在環,表示排程s是衝突可序列化的,可用拓撲排序得到排程s 的乙個等價的序列排程。
t1,t2:更新後立即釋放鎖,可能髒讀。
t3,t4:事務的最後釋放鎖,避免髒讀和確保可序列性。但降低併發度
t5,t6:相互等待出現死鎖
兩段鎖協議(two-phase locking protocol,2pl)是指所有事務分兩個階段提出加鎖和解鎖申請:
增長階段(growing phase):在對任何資料進行讀、寫操作之前,首先申請並獲得該資料的封鎖;
收縮階段(shrinking phase):在釋放乙個封鎖後,事務不再申請和獲得其它的任何封鎖。
兩段鎖協議是保證衝突可序列化的充分條件,但該協議不保證不發生死鎖。
2p協議存在級聯回滾現象
嚴格兩階段鎖
除要求滿足兩段鎖協議規定外,還要求事務的所有鎖都必須在事務提交之後釋放。
進一步解決資料項不能重複讀的問題
鎖的公升級有可能使得出現死鎖的概率加大
更新鎖只允許事務讀取資料項而不能修改資料項
系統允許更新鎖公升級,而不允許共享鎖公升級
資料庫併發控制
資料庫併發控制 1 在資料庫中為什麼要併發控制?答 資料庫是共享資源,通常有許多個事務同時在執行。當多個事務併發地訪問資料庫時就會產生同時讀取和 或修改同一資料的情況。若對併發操作不加控制就可能會訪問和儲存不正確的資料,破壞資料庫的一致性。所以資料庫管理系統必須提供併發控制機制。2 併發操作可能會產...
資料庫併發控制
acid,是指在可靠資料庫管理系統 dbms 中,事務 transaction 所應該具有的四個特性 a 原子性 atomicity 事務是乙個或多個行為 在一起組成乙個單獨的工作單元,事務中的動作要不都發生,要不都不發生.c 一致性 consistent 即在事務開始之前和結束之後,資料庫的完整性...
資料庫併發控制
資料庫是乙個資源庫,可以供多個使用者使用.允許多個使用者同時使用同乙個資料庫的資料庫系統稱為多使用者資料庫系統.例如飛機訂票資料庫系統 銀行資料庫系統.在多使用者資料庫系統中同乙個時刻會有很多個併發執行的事務.1.提高吞吐量和資源利用率 乙個事務由多個步驟組成,一些步驟涉及i o活動,另一些涉及cp...