DB - 并發(fā)控制
1. 為什么要并發(fā)控制?
數(shù)據(jù)庫是共享資源,通常有許多個(gè)事務(wù)同時(shí)在運(yùn)行。當(dāng)多個(gè)事務(wù)并發(fā)地存取數(shù)據(jù)庫時(shí)就會(huì)產(chǎn)生同時(shí)讀取和/或修改同一數(shù)據(jù)的情況。若對(duì)并發(fā)操作不加控制就可能會(huì)存取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。所以數(shù)據(jù)庫管理系統(tǒng)必須提供并發(fā)控制機(jī)制。
2. 并發(fā)操作可能會(huì)產(chǎn)生哪幾類數(shù)據(jù)不一致?
- 丟失修改
兩個(gè)事務(wù) Tl 和T2讀入同一數(shù)據(jù)并修改,T2提交的結(jié)果破壞了(覆蓋了) Tl 提交的結(jié)果,導(dǎo)致 Tl 的修改被丟失。 - 不可重復(fù)讀
事務(wù) Tl 讀取數(shù)據(jù)后,事務(wù)T2執(zhí)行更新操作,使 Tl 無法再現(xiàn)前一次讀取結(jié)果。 - 讀“臟”數(shù)據(jù)
事務(wù) Tl 修改某一數(shù)據(jù),并將其寫回磁盤,事務(wù)T2讀取同一數(shù)據(jù)后, Tl 由于某種原因被撤銷,這時(shí) Tl 已修改過的數(shù)據(jù)恢復(fù)原值,T2讀到的數(shù)據(jù)就與數(shù)據(jù)庫中的數(shù)據(jù)不一致,則T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)。
3. 解決并發(fā)控制的
- 鎖
封鎖就是事務(wù) T 在對(duì)某個(gè)數(shù)據(jù)對(duì)象例如表、記錄等操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù) T 就對(duì)該數(shù)據(jù)對(duì)象有了一定的控制,在事務(wù) T 釋放它的鎖之前,其他的事務(wù)不能更新此數(shù)據(jù)對(duì)象。封鎖是實(shí)現(xiàn)并發(fā)控制的一個(gè)非常重要的技術(shù)。基本的封鎖類型有兩種:排它鎖( Exclusive Locks ,簡(jiǎn)稱 x 鎖)和共享鎖 ( Share Locks,簡(jiǎn)稱 S 鎖)。 - 時(shí)間戳排序
通過事先在每對(duì)事務(wù)之間選擇一個(gè)順序來保證可串行性。系統(tǒng)中的每個(gè)事務(wù)對(duì)應(yīng)一個(gè)唯一的固定的時(shí)間戳。事務(wù)的時(shí)間戳決定了事務(wù)的可串行化順序。這樣,如果事務(wù)Ti的時(shí)間戳小于事務(wù)Tj時(shí)間戳,則該機(jī)制保證產(chǎn)生的調(diào)度等價(jià)于事務(wù)Ti出現(xiàn)在事務(wù)Tj之前的一個(gè)串行調(diào)度。該機(jī)制通過回滾違反該次序的事務(wù)來保證這一點(diǎn)。 - 有效性檢查
一個(gè)適當(dāng)?shù)牟l(fā)控制機(jī)制。系統(tǒng)中的每個(gè)事務(wù)對(duì)應(yīng)一個(gè)唯一的固定的時(shí)間戳,串行性次序是由事務(wù)的時(shí)間戳決定的。在該機(jī)制中,事務(wù)不會(huì)被延遲。不過,事務(wù)要完成必須通過有效性檢查,如果事務(wù)未通過有效性檢查,則回滾到初始狀態(tài)。 - 多版本并發(fā)
基于每個(gè)事務(wù)寫數(shù)據(jù)項(xiàng)時(shí)為該數(shù)據(jù)項(xiàng)創(chuàng)建一個(gè)新版本。讀操作發(fā)出時(shí),系統(tǒng)選擇其中的一個(gè)版本進(jìn)行讀取。利用時(shí)間戳,并發(fā)控制機(jī)制保證確保可串行性的方式選取要讀取的版本。
引自:
http://blog.csdn.net/xiangminjing/article/details/5922325
http://www.rzrgm.cn/ceys/archive/2012/03/16/2400745.html

浙公網(wǎng)安備 33010602011771號(hào)