数据库-事务并发操作问题及并发的控制
事務(wù)并發(fā)操作出現(xiàn)幾種問題
所謂事務(wù),是用戶定義的一個(gè)數(shù)據(jù)庫操作序列,是數(shù)據(jù)庫環(huán)境中的邏輯工作單元,
是一個(gè)不可分割的整體。
事務(wù)的這個(gè)4個(gè)特性簡稱為ACID特性,事務(wù)ACID特性可能遭到破壞的因素有:
①多個(gè)事務(wù)并發(fā)執(zhí)行,不同事務(wù)的操作交叉執(zhí)行;
②事務(wù)在運(yùn)行過程中被強(qiáng)行終止。
如何保證在多個(gè)事務(wù)并發(fā)執(zhí)行的過程中不發(fā)生上述的兩種情況,是數(shù)據(jù)庫管理系統(tǒng)并發(fā)
控制的主要責(zé)任。
丟失修改數(shù)據(jù)
舉例:銀行卡有100元,事務(wù)A取10元,事務(wù)B取10元,事務(wù)AB兩人同時(shí)取錢,初始
值都是100
讀“臟”數(shù)據(jù)
數(shù)據(jù)庫技術(shù)中,如果正常提交的事務(wù)A使用了事務(wù)B未提交的撤銷數(shù)據(jù),這種數(shù)據(jù)成
為“臟數(shù)據(jù)”,會造成數(shù)據(jù)的臟讀和污讀。
不一致分析?
時(shí),另一個(gè)事務(wù)正在修改同一個(gè)數(shù)據(jù)。這樣就可能導(dǎo)致兩個(gè)事務(wù)的相互干擾及“讀”事務(wù)的
錯(cuò)誤執(zhí)行結(jié)果。
數(shù)據(jù)庫并發(fā)的控制(了解部分)?
并發(fā)調(diào)度的可串行化
可串行化準(zhǔn)則:多個(gè)事務(wù)的并發(fā)執(zhí)行時(shí)正確的,當(dāng)且僅當(dāng)其結(jié)果按某一次序串
行執(zhí)行它們時(shí)的結(jié)果相同,這種調(diào)度策略稱為可串行化調(diào)度。可串行化是并發(fā)事務(wù)正確
性的準(zhǔn)則,一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確的。
封鎖
封鎖是實(shí)現(xiàn)并發(fā)控制的非常重要的技術(shù)。封鎖是指某事務(wù)在對某數(shù)據(jù)對象進(jìn)行操作以
前,先請求系統(tǒng)對其加鎖,成功加鎖之后該事務(wù)就對該數(shù)據(jù)對象有了控制權(quán),只有該事
務(wù)對其進(jìn)行解鎖之后,其他的事務(wù)才能更新它,DBMS有兩種鎖:
① 排它鎖(也稱作X鎖)
如果事務(wù)T在對某個(gè)數(shù)據(jù)對象實(shí)施了X鎖,那么其他的事務(wù)必須要等到T事務(wù)接觸對該
數(shù)據(jù)對象的X鎖之后,才能對這個(gè)數(shù)據(jù)進(jìn)行加鎖。
② 共享鎖(也稱作S鎖)
如果事務(wù)T在對某個(gè)數(shù)據(jù)對象實(shí)施了S鎖,那么其他的事務(wù)也能對該數(shù)據(jù)對象實(shí)施S
鎖,但是對這個(gè)數(shù)據(jù)對象施加的所有S鎖都接觸之前不允許任何事務(wù)對該數(shù)據(jù)對象實(shí)施X
鎖。
死鎖
封鎖技術(shù)可以避免一些并發(fā)操作引起的不一致錯(cuò)誤,但也會產(chǎn)生其他的一些問題,?
活鎖和死鎖。
① 活鎖
如果某個(gè)事務(wù)處在永遠(yuǎn)等待的狀態(tài),得不到封鎖的機(jī)會,這種現(xiàn)象為活鎖,避免這種鎖
最好的方法就是采用先來先服務(wù)的策略。
② 死鎖
兩個(gè)或兩個(gè)以上的事務(wù)都處于等待狀態(tài)每個(gè)事務(wù)都在等待對方事務(wù)接觸封鎖,它才能繼
續(xù)執(zhí)行下去,這樣任何事務(wù)都處于等待狀態(tài)而無法繼續(xù)執(zhí)行的現(xiàn)象稱為死鎖
解決死鎖問題方法有兩類:
A、 死鎖的預(yù)防
B、 死鎖的診斷與預(yù)防
總結(jié)
以上是生活随笔為你收集整理的数据库-事务并发操作问题及并发的控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库-第三范式及BCN
- 下一篇: 数据库-优化-为什么要进行数据库优化