db2什么是死鎖
DB2是IBM出品的一系列關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),分別在不同的操作系統(tǒng)平臺(tái)上服務(wù)。雖然DB2產(chǎn)品是基于UNIX的系統(tǒng)和個(gè)人計(jì)算機(jī)操作系統(tǒng),但在基于UNIX系統(tǒng)和微軟在windows系統(tǒng)下的Access方面,DB2追尋了ORACLE的數(shù)據(jù)庫(kù)產(chǎn)品。
死鎖(Deadlock),這里指的是進(jìn)程死鎖,是個(gè)計(jì)算機(jī)技術(shù)名詞。它是操作系統(tǒng)或軟件運(yùn)行的一種狀態(tài):在多任務(wù)系統(tǒng)下,當(dāng)一個(gè)或多個(gè)進(jìn)程等待系統(tǒng)資源,而資源又被進(jìn)程本身或其它進(jìn)程占用時(shí),就形成了死鎖。由于資源占用是互斥的,當(dāng)某個(gè)進(jìn)程提出申請(qǐng)資源后,使得有關(guān)進(jìn)程在無(wú)外力協(xié)助下,永遠(yuǎn)分配不到必需的資源而無(wú)法繼續(xù)運(yùn)行,這就產(chǎn)生了一種特殊現(xiàn)象。
死鎖的規(guī)范定義:集合中的每一個(gè)進(jìn)程都在等待只能由本集合中的其他進(jìn)程才能引發(fā)的事件,那么該組進(jìn)程是死鎖的。
一種情形,此時(shí)執(zhí)行程序中兩個(gè)或多個(gè)線程發(fā)生永久堵塞(等待),每個(gè)線程都在等待被其他線程占用并堵塞了的資源。例如,如果線程A鎖住了記錄1并等待記錄2,而線程B鎖住了記錄2并等待記錄1,這樣兩個(gè)線程就發(fā)生了死鎖現(xiàn)象。
計(jì)算機(jī)系統(tǒng)中,如果系統(tǒng)的資源分配策略不當(dāng),更常見的可能是程序員寫的程序有錯(cuò)誤等,則會(huì)導(dǎo)致進(jìn)程因競(jìng)爭(zhēng)資源不當(dāng)而產(chǎn)生死鎖的現(xiàn)象。
在兩個(gè)或多個(gè)任務(wù)中,如果每個(gè)任務(wù)鎖定了其他任務(wù)試圖鎖定的資源,此時(shí)會(huì)造成這些任務(wù)永久阻塞,從而出現(xiàn)死鎖。例如:事務(wù)A獲取了行1的共享鎖。事務(wù)B獲取了行2的共享鎖。
現(xiàn)在,事務(wù)A請(qǐng)求行2的排他鎖,但在事務(wù)B完成并釋放其對(duì)行2持有的共享鎖之前被阻塞。
現(xiàn)在,事務(wù)B請(qǐng)求行1的排他鎖,但在事務(wù)A完成并釋放其對(duì)行1持有的共享鎖之前被阻塞。
事務(wù)B完成之后事務(wù)A才能完成,但是事務(wù)B由事務(wù)A阻塞。該條件也稱為循環(huán)依賴關(guān)系:事務(wù)A依賴于事務(wù)B,事務(wù)B通過對(duì)事務(wù)A的依賴關(guān)系關(guān)閉循環(huán)。
除非某個(gè)外部進(jìn)程斷開死鎖,否則死鎖中的兩個(gè)事務(wù)都將無(wú)限期等待下去。MicrosoftSQLServer數(shù)據(jù)庫(kù)引擎死鎖監(jiān)視器定期檢查陷入死鎖的任務(wù)。如果監(jiān)視器檢測(cè)到循環(huán)依賴關(guān)系,將選擇其中一個(gè)任務(wù)作為犧牲品,然后終止其事務(wù)并提示錯(cuò)誤。這樣,其他任務(wù)就可以完成其事務(wù)。對(duì)于事務(wù)以錯(cuò)誤終止的應(yīng)用程序,它還可以重試該事務(wù),但通常要等到與它一起陷入死鎖的其他事務(wù)完成后執(zhí)行。
在應(yīng)用程序中使用特定編碼約定可以減少應(yīng)用程序?qū)е滤梨i的機(jī)會(huì)。有關(guān)詳細(xì)信息,請(qǐng)參閱將死鎖減至最少。
死鎖經(jīng)常與正常阻塞混淆。事務(wù)請(qǐng)求被其他事務(wù)鎖定的資源的鎖時(shí),發(fā)出請(qǐng)求的事務(wù)一直等到該鎖被釋放。默認(rèn)情況下,除非設(shè)置了LOCK_TIMEOUT,否則SQLServer事務(wù)不會(huì)超時(shí)。因?yàn)榘l(fā)出請(qǐng)求的事務(wù)未執(zhí)行任何操作來(lái)阻塞擁有鎖的事務(wù),所以該事務(wù)是被阻塞,而不是陷入了死鎖。最后,擁有鎖的事務(wù)將完成并釋放鎖,然后發(fā)出請(qǐng)求底事務(wù)將獲取鎖并繼續(xù)執(zhí)行。
db2什么是死鎖
下一篇:excel表格什么是宏