日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库 活锁和死锁

發布時間:2024/9/30 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库 活锁和死锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、活鎖

如果事務T1封鎖了數據R,事務T2又請求封鎖R,于是T2等待。T3也請求封鎖R,當T1釋放了R上的封鎖之后系統首先批準了T3的請求,T2仍然等待。然后T4又請求封鎖R,當T3釋放了R上的封鎖之后系統又批準了T4的請求,...,T2有可能永遠等待,這就是活鎖的情形,如圖8.4(a)所示。 避免活鎖的簡單方法是采用先來先服務的策略。

?

二、死鎖

如果事務T1封鎖了數據R1,T2封鎖了數據R2,然后T1又請求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放R2上的鎖。接著T2又申請封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖。這樣就出現了T1在等待T2,而T2又在等待T1的局面,T1和T2兩個事務永遠不能結束,形成死鎖。

1. 死鎖的預防

在數據庫中,產生死鎖的原因是兩個或多個事務都已封鎖了一些數據對象,然后又都請求對已為其他事務封鎖的數據對象加鎖,從而出現死等待。防止死鎖的發生其實就是要破壞產生死鎖的條件。預防死鎖通常有兩種方法:

① 一次封鎖法

一次封鎖法要求每個事務必須一次將所有要使用的數據全部加鎖,否則就不能繼續執行。 一次封鎖法雖然可以有效地防止死鎖的發生,但也存在問題,一次就將以后要用到的全部數據加鎖,勢必擴大了封鎖的范圍,從而降低了系統的并發度。

② 順序封鎖法

順序封鎖法是預先對數據對象規定一個封鎖順序,所有事務都按這個順序實行封鎖。 順序封鎖法可以有效地防止死鎖,但也同樣存在問題。事務的封鎖請求可以隨著事務的執行而動態地決定,很難事先確定每一個事務要封鎖哪些對象,因此也就很難按規定的順序去施加封鎖。 可見,在操作系統中廣為采用的預防死鎖的策略并不很適合數據庫的特點,因此DBMS在解決死鎖的問題上普遍采用的是診斷并解除死鎖的方法。

?

2. 死鎖的診斷與解除

① 超時法

如果一個事務的等待時間超過了規定的時限,就認為發生了死鎖。超時法實現簡單,但其不足也很明顯。一是有可能誤判死鎖,事務因為其他原因使等待時間超過時限,系統會誤認為發生了死鎖。二是時限若設置得太長,死鎖發生后不能及時發現。

② 等待圖法

事務等待圖是一個有向圖G=(T,U)。 T為結點的集合,每個結點表示正運行的事務;U為邊的集合,每條邊表示事務等待的情況。若T1等待T2,則T1、T2之間劃一條有向邊,從T1指向T2。事務等待圖動態地反映了所有事務的等待情況。并發控制子系統周期性地(比如每隔1分鐘)檢測事務等待圖,如果發現圖中存在回路,則表示系統中出現了死鎖。

DBMS的并發控制子系統一旦檢測到系統中存在死鎖,就要設法解除。通常采用的方法是選擇一個處理死鎖代價最小的事務,將其撤消,釋放此事務持有的所有的鎖,使其它事務得以繼續運行下去。當然,對撤消的事務所執行的數據修改操作必須加以恢復。

總結

以上是生活随笔為你收集整理的数据库 活锁和死锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。