多個事務同時訪問共享的資料庫時,如何保證資料庫的一致性?
在多使用者dbs中,如果多個使用者同時對同一資料操作,稱為併發操作。
併發操作引發的問題
t1: r1(a) w1(a) r1(b) w1(b)如果排程中一對連續操作是衝突的,則意味著如果它們的執行順序交換,則至少會改變其中乙個事務的最終執行結果t2: r2(a) w2(a) r2(b) w2(b)
sc = r1(a) w1(a) r2(a) w2(a) r1(b) w1(b) r2(b) w2(b)
sa = r1(a) w1(a) r1(b) w1(b) r2(a) w2(a) r2(b) w2(b)
下面兩個序列結果不同。第乙個序列中,r2(b)讀的是b的新值;第二個序列中,r2(b)讀的是b的舊值。
r1(b) w1(b) r2(b) w2(b)下面兩個序列結果就是相同的。r1(b) r2(b) w1(b) w2(b)
r1(a) w1(a) r2(b) w2(b)優先圖用於衝突可串性的判斷r1(a) r2(b) w1(a) w2(b)
優先圖結構
事務讀寫資料前需要獲得該資料上的鎖。
事務釋放鎖後,將不再獲得任何鎖。
事務獲得資料的x鎖後才能對資料進行修改
如果資料被加了s鎖,那麼其他事務無法獲得該資料的x鎖,但是可以獲得s鎖。事務獲得資料的s鎖後,如果需要修改資料,需要通過update lock把s鎖公升級為x鎖
如果事務取得了資料r上的更新鎖,則可以讀r,並且可以在以後公升級為x鎖
單純的s鎖不能公升級為x鎖
如果事務持有了r上的update lock,則其它事務不能得到r上的s鎖、x鎖以及update鎖
如果事務持有了r上的s lock,則其它事務可以獲取r上的update lock
給乙個結點顯式加鎖時必須考慮
理論上要搜尋上面全部的可能情況,才能確定p上的鎖請求能否成功,顯然是低效的,因此引入意向鎖。
ix鎖 intent exclusive lock,意向排他鎖,意向寫鎖
如果對某個結點加is(ix)鎖,則說明事務要對該結點的某個下層結點加s(x)鎖
對任一結點p加s(x)鎖,必須先對從根結點到p的路徑上的所有結點加is(ix)鎖
連線(會話)而設定的,不是針對乙個事務
不同隔離級別影響讀操作。
隔離級別
髒讀不可重複讀取
幻象未提交讀✔✔
✔提交讀✘✔
✔可重複讀✘✘
✔可序列讀✘✘
✘允許讀取當前頁面上的任何資料,不管是否已經提交。
事務不必等待任何鎖,也不需要對讀取的資料加鎖。
實際dbms中一般不使用。
保證事務不會讀取到其他未提交事務所修改的資料(可防止髒讀)
事務必須在所訪問資料上加s鎖,資料一旦讀出,就馬上釋放持有的s鎖
保證事務在事務內部如果重複訪問同一資料(記錄集),資料不會發生改變。即,事務在訪問資料時,其他事務不能修改正在訪問的那部分資料
可重複讀可以防止髒讀和不可重複讀取,但不能防止幻像
事務必須在所訪問資料上加s鎖,防止其他事務修改資料,而且s鎖必須保持到事務結束
保證事務排程是可串化的
事務在訪問資料時,其他事務不能修改資料,也不能插入新元組
事務必須在所訪問資料上加s鎖,防止其他事務修改資料,而且s鎖必須保持到事務結束
事務還必須鎖住訪問的整個表
1.等待-死亡
t請求乙個被u持有的鎖
2. 傷害-等待
t請求乙個被u持有的鎖
操作之前先加鎖,操作完釋放鎖,無法避免死鎖。適合寫頻繁的應用場景
操作之前不加鎖,只有寫提交時才檢查是否發生了寫衝突。適合讀頻繁的應用場景
oracle 第10章 控制檔案
2015 10 19 目錄 一 檢視控制檔案位置 二 檢視控制檔案內容 三 移動控制檔案 四 備份和恢復控制檔案 一 檢視控制檔案位置 二 檢視控制檔案內容 三 移動控制檔案 方法一 修改pfile init.ora 檔案移動控制檔案 rw r r 1 oracle oinstall 7.3k oc...
第7章 Linux併發控制 完成量
7.8 完成量 linux提供了完成量 completion,完成量 完成量用於乙個執行單元等待另乙個執行單元執行完某事。linux中與完成量相關的操作主要有以下4種。include 1.定義完成量 定義名為my completion的完成量 struct completion my complet...
第7章 Linux併發控制 訊號量
7.6 訊號量 訊號量 semaphore 是作業系統中最典型的用於同步和互斥的手段,訊號量的值可以是0 1或者n。訊號量與作業系統中的經典概念pv操作對應。p s 將訊號量s的值減1,即s s 1 如果s 0,則該程序繼續執行 否則該程序置為等待狀態,排入等待佇列。v s 將訊號量s的值加1,即s...