在數(shù)據(jù)庫中,并發(fā)控制是指在多個用戶/進程線程同時對數(shù)據(jù)庫進行操作時,如何保證事務的一致性
和隔離性的,同時最大程度地并發(fā)。
當多個用戶/進程/線程同時對數(shù)據(jù)庫進行操作時,會出現(xiàn)3種沖突情形:
1.讀-讀,不存在任何問題
2.讀-寫,有隔離性問題,可能遇到臟讀(會讀到未提交的數(shù)據(jù)),幻影讀等。
3.寫寫,可能丟失更新
要解決沖突,一種辦法是是鎖,即基于鎖的并發(fā)控制,比如2PL,這種方式開銷比較高,而且無法
避免死鎖。
多版本并發(fā)控制(MVCC )是一種用來解決讀寫沖突的無鎖并發(fā)控制,也就是為事務分配單向增長
的時間戳,為每個修改保存一個版本,版本與事務時間戳關聯(lián),讀操作只讀該事務開始前的數(shù)據(jù)庫
的快照。這樣在讀操作不用阻塞寫操作,寫操作不用阻塞讀操作的同時,避免了臟讀和不可重復讀
樂觀并發(fā)控制(OCC )是一種用來解決寫寫沖突的無鎖并發(fā)控制,認為事務間爭用沒有那么多,所
以先進行修改,在提交事務前,檢查一下事務開始后,有沒有新提交改變,如果沒有就提交,如果
有就放棄并重試。樂觀并發(fā)控制類似自選鎖。樂觀并發(fā)控制適用于低數(shù)據(jù)爭用,寫沖突比較少的環(huán)
境。
多版本并發(fā)控制可以結合基于鎖的并發(fā)控制來解決寫寫沖突,即MVCC+2PL,也可以結合樂觀并
發(fā)控制來解決寫-寫沖突。