oracle死鎖是什么
oracle死鎖是什么
所謂死鎖: 是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,由于競(jìng)爭(zhēng)資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無(wú)外力作用,它們都將無(wú)法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。
處理方法
在系統(tǒng)中已經(jīng)出現(xiàn)死鎖后,應(yīng)該及時(shí)檢測(cè)到死鎖的發(fā)生,并采取適當(dāng)?shù)拇胧﹣?lái)解除死鎖。[4]
1) 預(yù)防死鎖。
這是一種較簡(jiǎn)單和直觀的事先預(yù)防的方法。方法是通過(guò)設(shè)置某些限制條件,去破壞產(chǎn)生死鎖的四個(gè)必要條件中的一個(gè)或者幾個(gè),來(lái)預(yù)防發(fā)生死鎖。預(yù)防死鎖是一種較易實(shí)現(xiàn)的方法,已被廣泛使用。但是由于所施加的限制條件往往太嚴(yán)格,可能會(huì)導(dǎo)致系統(tǒng)資源利用率和系統(tǒng)吞吐量降低。
2) 避免死鎖。
該方法同樣是屬于事先預(yù)防的策略,但它并不須事先采取各種限制措施去破壞產(chǎn)生死鎖的的四個(gè)必要條件,而是在資源的動(dòng)態(tài)分配過(guò)程中,用某種方法去防止系統(tǒng)進(jìn)入不安全狀態(tài),從而避免發(fā)生死鎖。
3)檢測(cè)和解除死鎖。
先檢測(cè):這種方法并不須事先采取任何限制性措施,也不必檢查系統(tǒng)是否已經(jīng)進(jìn)入不安全區(qū),此方法允許系統(tǒng)在運(yùn)行過(guò)程中發(fā)生死鎖。但可通過(guò)系統(tǒng)所設(shè)置的檢測(cè)機(jī)構(gòu),及時(shí)地檢測(cè)出死鎖的發(fā)生,并精確地確定與死鎖有關(guān)的進(jìn)程和資源。檢測(cè)方法包括定時(shí)檢測(cè)、效率低時(shí)檢測(cè)、進(jìn)程等待時(shí)檢測(cè)等。
然后解除死鎖:采取適當(dāng)措施,從系統(tǒng)中將已發(fā)生的死鎖清除掉。
這是與檢測(cè)死鎖相配套的一種措施。當(dāng)檢測(cè)到系統(tǒng)中已發(fā)生死鎖時(shí),須將進(jìn)程從死鎖狀態(tài)中解脫出來(lái)。常用的實(shí)施方法是撤銷或掛起一些進(jìn)程,以便回收一些資源,再將這些資源分配給已處于阻塞狀態(tài)的進(jìn)程,使之轉(zhuǎn)為就緒狀態(tài),以繼續(xù)運(yùn)行。死鎖的檢測(cè)和解除措施,有可能使系統(tǒng)獲得較好的資源利用率和吞吐量,但在實(shí)現(xiàn)上難度也最大。