併發控制原理
事務之間的相互影響可能導致資料庫狀態的不一致,即使各個事務能保持狀態的正確性,而且也沒有任何故障發生。因此,不同事務中各個步驟的執行順序必須以某種方式進行規範。控制這些步驟的功能由dbms的排程器部件完成,而保證併發執行的事務能保持一致性的整個過程稱為併發控制。排程器的作用如圖1所示。
首先討論如何保證併發執行的事務能保持資料庫狀態的正確性。抽象的要求稱為可序列性,另外還有乙個更強的、重要的條件為衝突可序列性,它是大多數排程器所真正實現的。我們考慮實現排程器的最重要技術:封鎖、時間戳和有效性確認。
1.序列排程和可序列化排程
1.1 排程
排程是乙個或多個事務的重要操作按時間排序的乙個序列。
例1 考慮兩個事務以及它們的動作按照某些順序執行時的資料庫的影響。t1和t2的重要動作如表1所示。
表
1 兩個事務
t1t2
read(a,t)
read(a,s)
t := t + 100
s := s*2
write(a,t)
write(a,s)
read(b,t)
read(b,s)
t := t + 100
s := s*2
wrtie(b,t)
write(b,s)
1.2 序列排程
如果乙個排程的動作首先是乙個事務的所有動作,然後是另乙個事務的所有動作,以此類推,而沒有動作的混合,那麼我們說這一排程是序列的。
例2 對錶1中的事務而言,兩個串列埠排程,乙個是t1在t2前,而另乙個是t2是t1之前,初態為a=b=25。
表
2t1在
t2前的序列排程
t1
t2
a
b
25
25
read(a,t)
t := t + 100
write(a,t)
125read(b,t)
t := t + 100
wrtie(b,t)
125
read(a,s)
s := s*2
write(a,s)
250
read(b,s)
s := s*2
write(b,s)
250表
3 t2在t1
前的序列排程
t1
t2
a
b
25
25
read(a,t)
t := t + 100
write(a,t)
50
read(b,t)
t := t + 100
wrtie(b,t)
50read(a,s)
s := s*2
write(a,s)
150read(b,s)
s := s*2
write(b,s)
150
1.3 可序列化排程
事務的正確性原則告訴我們,每個序列排程都將保持資料庫狀態的一致性。
通常,不管資料庫初態怎樣,乙個排程對資料庫狀態的影響都和某個序列排程相同,我們就說這個排程是可序列化的。
例3 表4是例1中事務的乙個排程,此排程是可序列化的,但不是序列的。表5不是可序列化的。
表
5 乙個非序列的可序列化排程
t1
t2
a
b
25
25
read(a,t)
t := t + 100
write(a,t)
125read(a,s)
s := s*2
write(a,s)
250
read(b,t)
t := t + 100
wrtie(b,t)
125
read(b,s)
s := s*2
write(b,s)
250表
6 乙個非可序列化的排程
t1
t2
a
b
25
25
read(a,t)
t := t + 100
write(a,t)
125read(a,s)
s := s*2
write(a,s)
250
read(b,s)
深入理解資料庫鎖
oracle中分為兩種模式的鎖,一種是排他鎖 x鎖 另一種是共享所 s鎖 鎖是實現併發的主要手段,在資料庫中應用頻繁,但很多都由資料庫自動管理,當事務提交後會自動釋放鎖.oracle為了使資料庫實現高度併發訪問,它使用了不同型別的鎖來管理併發會話對資料物件的操作.oracle的鎖按作用物件不同分為如...
mysql深入理解資料庫索引結構
1 資料庫檔案儲存的方式 資料庫檔案儲存都是以磁碟檔案儲存在系統中的,這也是資料庫能持久化儲存資料的原因。2 從資料庫讀取資料的原理 從資料庫讀取資料,先暫且不考慮從快取中讀取資料的情況,那就是從磁碟檔案中讀取資料的,我們知道從磁碟檔案中讀取資料是比較耗時的,資料庫的select操作的時間,取決於執...
深入理解資料庫事務 W18
transaction作為關係型資料庫的核心組成,在資料安全方面有著非常重要的作用,本文會一步步解析事務的核心特性,以獲得對事務更深的理解。資料庫幾乎是所有系統的核心模組,它將資料有條理地儲存在儲存介質 磁碟 中,並在邏輯上,將資料以結構化的形態呈現給使用者。支援資料的增 刪 改 查,並在過程中保障...