并發(fā)(concurrency)是指多個程序交替地在一個處理器上執(zhí)行。如果對這些程序的執(zhí)行不加控制,會造成意想不到的" />
時間:2022-12-11 08:30:01 | 來源:信息時代
時間:2022-12-11 08:30:01 來源:信息時代
并發(fā)控制 : 在數(shù)據(jù)庫管理系統(tǒng)層面上,多個用戶程序(事務(wù))之間的協(xié)調(diào)和控制。
并發(fā)(concurrency)是指多個程序交替地在一個處理器上執(zhí)行。如果對這些程序的執(zhí)行不加控制,會造成意想不到的結(jié)果。這種控制就稱為并發(fā)控制。
在馮·諾依曼結(jié)構(gòu)計算機(jī)上,指令在CPU中是一條一條串行執(zhí)行的。如果每次只有一個程序在計算機(jī)上執(zhí)行,就沒有并發(fā)控制的問題。但是,如果有多個程序并發(fā)地在計算機(jī)上交錯執(zhí)行,則必須實行并發(fā)控制以保證正確性。
數(shù)據(jù)庫必須是客觀世界的“正確的”反映。但我們不可能隨時隨地將數(shù)據(jù)庫記載的信息與客觀世界對比,看它們之間是否是一致的。所幸的是,人們發(fā)現(xiàn)只要規(guī)范了對數(shù)據(jù)庫的操作行為,就可以保證數(shù)據(jù)庫的正確性。為此,引入了事務(wù)(transaction)的概念,事務(wù)是指一個數(shù)據(jù)庫的操作序列,這些操作要么全做要么全不做,是一個不可分割的工作單位,它的執(zhí)行能夠保證數(shù)據(jù)庫從一個正確的狀態(tài)轉(zhuǎn)移到另一個正確的狀態(tài)??梢?事務(wù)是一個語義概念,它的語義上的正確性(事務(wù)的執(zhí)行一定能保證數(shù)據(jù)庫從一個正確的狀態(tài)轉(zhuǎn)移到另一個正確的狀態(tài))是由數(shù)據(jù)庫應(yīng)用的設(shè)計開發(fā)人員來保證的。
在SQL語言中,定義事務(wù)開始和結(jié)束的語句有三條:
BEGIN TRANSACTION
COMMIT
ROLLBACK
其中,BEGIN TRANSACTION是一個事務(wù)開始的標(biāo)志,COMMIT是事務(wù)結(jié)束的標(biāo)志,意思是系統(tǒng)要將所有該事務(wù)的操作真正作用到磁盤上的物理數(shù)據(jù)庫上去。ROLLBACK是一個例外處理語句,表示回滾操作(也稱回退操作),即在事務(wù)運(yùn)行的過程中發(fā)生了某些故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)需要將該事務(wù)中所有已經(jīng)發(fā)生的對數(shù)據(jù)庫的操作的影響全部撤消,滾回到事務(wù)開始的狀態(tài)。
一個事務(wù)要滿足如下的四個性質(zhì)(稱為ACID性質(zhì)):
(1)原子性(atomicity): 構(gòu)成事務(wù)的全部操作要么全部正確地執(zhí)行要么根本沒有執(zhí)行。
(2) 一致性(consistency): 事務(wù)的執(zhí)行應(yīng)保持?jǐn)?shù)據(jù)庫描述真實的狀態(tài)。
(3)隔離性(isolation): 每個事務(wù)都感覺不到系統(tǒng)中有其他事務(wù)在并發(fā)執(zhí)行。
(4)持久性(durability): 一個事務(wù)成功完成后,它對數(shù)據(jù)庫的改變必須是永久的,即使系統(tǒng)出現(xiàn)故障時也是這樣。
并發(fā)控制是事務(wù)管理器的最重要的功能。它確保數(shù)據(jù)庫在多個用戶同時訪問共享數(shù)據(jù)庫的時候,仍然能夠“正確高效”地執(zhí)行。按照事務(wù)的定義,在沒有其他事務(wù)干擾的情況下,一個事務(wù)的執(zhí)行應(yīng)能保證數(shù)據(jù)庫仍處于一致性的狀態(tài)。按照一致性的定義,多個事務(wù)任何串行的執(zhí)行結(jié)果都是合理的。假定有m個并發(fā)執(zhí)行的事務(wù),每個事務(wù)平均有n個操作,那么可能的串行調(diào)度的數(shù)量有(m!)個,這些調(diào)度都是正確的,盡管實際情況下,最多只有一種情況會發(fā)生。但是,隨機(jī)調(diào)度數(shù)量級是O(mmn),遠(yuǎn)遠(yuǎn)大于m! 這個數(shù)目。在這些隨機(jī)調(diào)度中,哪些是正確的呢?為此,需要給出事務(wù)并發(fā)執(zhí)行(調(diào)度)的正確性判定標(biāo)準(zhǔn)——可串行性(serializability)。多個事務(wù)的一個并發(fā)調(diào)度是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一串行調(diào)度的結(jié)果是相同的,稱這個調(diào)度是可串行化的(serializable)。
可串行性可以作為判定并發(fā)事務(wù)調(diào)度正確性的準(zhǔn)則。雖然這個定義不能直接用于實際判定一個調(diào)度是否正確(因為不可能計算出全部可能的串行調(diào)度的結(jié)果),但是,畢竟我們有了一個判定的準(zhǔn)則。理論上講,一個事務(wù)執(zhí)行的時候,禁止其他事務(wù)執(zhí)行的調(diào)度肯定是可串行化的調(diào)度,但是,這樣的調(diào)度策略實際上是不可取的,因為,它實際上就是禁止事務(wù)的并發(fā)執(zhí)行。
我們需要設(shè)計一些調(diào)度策略并證明這些策略是正確的,也就是由這些調(diào)度策略產(chǎn)生的調(diào)度是滿足可串行性準(zhǔn)則的,在此基礎(chǔ)上要盡可能地提高執(zhí)行的并發(fā)度,提高系統(tǒng)的效率。人們已經(jīng)發(fā)明了多種調(diào)度方法來達(dá)到上述目的。這些方法包括,基于封鎖的調(diào)度方法,基于時間戳的方法,基于檢驗的方法(樂觀的方法),以及多版本的方法等。
另外,需要說明的是,并發(fā)(concurrency)與并行(parallel)是兩個緊密相關(guān)但是不同的概念。并行的意思是指一個程序在多個處理器上同時執(zhí)行。而并發(fā)是指多個程序在單個處理器上交替執(zhí)行。
微信公眾號
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。