最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql 數(shù)據(jù)庫死鎖原因及解決辦法

 更新時(shí)間:2016年01月14日 21:48:15   投稿:mdxy-dxy  
這篇文章主要介紹了mysql 數(shù)據(jù)庫死鎖原因及解決辦法,需要的朋友可以參考下

死鎖(Deadlock)

所謂死鎖:是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過程中,因爭奪資源而造成的一種互相等待的現(xiàn)象,若無外力作用,它們都將無法推進(jìn)下去。此時(shí)稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖,這些永遠(yuǎn)在互相等待的進(jìn)程稱為死鎖進(jìn)程。由于資源占用是互斥的,當(dāng)某個(gè)進(jìn)程提出申請資源后,使得有關(guān)進(jìn)程在無外力協(xié)助下,永遠(yuǎn)分配不到必需的資源而無法繼續(xù)運(yùn)行,這就產(chǎn)生了一種特殊現(xià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)程因競爭資源不當(dāng)而產(chǎn)生死鎖的現(xiàn)象。鎖有多種實(shí)現(xiàn)方式,比如意向鎖,共享-排他鎖,鎖表,樹形協(xié)議,時(shí)間戳協(xié)議等等。鎖還有多種粒度,比如可以在表上加鎖,也可以在記錄上加鎖。

產(chǎn)生死鎖的原因主要是:

(1)系統(tǒng)資源不足。
(2) 進(jìn)程運(yùn)行推進(jìn)的順序不合適。
(3)資源分配不當(dāng)?shù)取?/p>

如果系統(tǒng)資源充足,進(jìn)程的資源請求都能夠得到滿足,死鎖出現(xiàn)的可能性就很低,否則就會(huì)因爭奪有限的資源而陷入死鎖。其次,進(jìn)程運(yùn)行推進(jìn)順序與速度不同,也可能產(chǎn)生死鎖。

產(chǎn)生死鎖的四個(gè)必要條件:

(1) 互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用。
(2) 請求與保持條件:一個(gè)進(jìn)程因請求資源而阻塞時(shí),對已獲得的資源保持不放。
(3) 不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪。
(4) 循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。

這四個(gè)條件是死鎖的必要條件,只要系統(tǒng)發(fā)生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會(huì)發(fā)生死鎖。

死鎖的預(yù)防和解除:

理解了死鎖的原因,尤其是產(chǎn)生死鎖的四個(gè)必要條件,就可以最大可能地避免、預(yù)防和解除死鎖。所以,在系統(tǒng)設(shè)計(jì)、進(jìn)程調(diào)度等方面注意如何不讓這四個(gè)必要條件成立,如何確定資源的合理分配算法,避免進(jìn)程永久占據(jù)系統(tǒng)資源。此外,也要防止進(jìn)程在處于等待狀態(tài)的情況下占用資源,在系統(tǒng)運(yùn)行過程中,對進(jìn)程發(fā)出的每一個(gè)系統(tǒng)能夠滿足的資源申請進(jìn)行動(dòng)態(tài)檢查,并根據(jù)檢查結(jié)果決定是否分配資源,若分配后系統(tǒng)可能發(fā)生死鎖,則不予分配,否則予以分配 。因此,對資源的分配要給予合理的規(guī)劃。
如何將死鎖減至最少


雖然不能完全避免死鎖,但可以使死鎖的數(shù)量減至最少。將死鎖減至最少可以增加事務(wù)的吞吐量并減少系統(tǒng)開銷,因?yàn)橹挥泻苌俚氖聞?wù)回滾,而回滾會(huì)取消事務(wù)執(zhí)行的所有工作。由于死鎖時(shí)回滾而由應(yīng)用程序重新提交。

下列方法有助于最大限度地降低死鎖:

(1)按同一順序訪問對象。
(2)避免事務(wù)中的用戶交互。
(3)保持事務(wù)簡短并在一個(gè)批處理中。
(4)使用低隔離級別。
(5)使用綁定連接。

按同一順序訪問對象

如果所有并發(fā)事務(wù)按同一順序訪問對象,則發(fā)生死鎖的可能性會(huì)降低。例如,如果兩個(gè)并發(fā)事務(wù)獲得 Supplier 表上的鎖,然后獲得 Part 表上的鎖,則在其中一個(gè)事務(wù)完成之前,另一個(gè)事務(wù)被阻塞在 Supplier 表上。第一個(gè)事務(wù)提交或回滾后,第二個(gè)事務(wù)繼續(xù)進(jìn)行。不發(fā)生死鎖。將存儲過程用于所有的數(shù)據(jù)修改可以標(biāo)準(zhǔn)化訪問對象的順序。

避免事務(wù)中的用戶交互

避免編寫包含用戶交互的事務(wù),因?yàn)檫\(yùn)行沒有用戶交互的批處理的速度要遠(yuǎn)遠(yuǎn)快于用戶手動(dòng)響應(yīng)查詢的速度,例如答復(fù)應(yīng)用程序請求參數(shù)的提示。例如,如果事務(wù)正在等待用戶輸入,而用戶去吃午餐了或者甚至回家過周末了,則用戶將此事務(wù)掛起使之不能完成。這樣將降低系統(tǒng)的吞吐量,因?yàn)槭聞?wù)持有的任何鎖只有在事務(wù)提交或回滾時(shí)才會(huì)釋放。即使不出現(xiàn)死鎖的情況,訪問同一資源的其它事務(wù)也會(huì)被阻塞,等待該事務(wù)完成。

保持事務(wù)簡短并在一個(gè)批處理中

在同一數(shù)據(jù)庫中并發(fā)執(zhí)行多個(gè)需要長時(shí)間運(yùn)行的事務(wù)時(shí)通常發(fā)生死鎖。事務(wù)運(yùn)行時(shí)間越長,其持有排它鎖或更新鎖的時(shí)間也就越長,從而堵塞了其它活動(dòng)并可能導(dǎo)致死鎖。

保持事務(wù)在一個(gè)批處理中,可以最小化事務(wù)的網(wǎng)絡(luò)通信往返量,減少完成事務(wù)可能的延遲并釋放鎖。

使用低隔離級別

確定事務(wù)是否能在更低的隔離級別上運(yùn)行。執(zhí)行提交讀允許事務(wù)讀取另一個(gè)事務(wù)已讀?。ㄎ葱薷模┑臄?shù)據(jù),而不必等待第一個(gè)事務(wù)完成。使用較低的隔離級別(例如提交讀)而不使用較高的隔離級別(例如可串行讀)可以縮短持有共享鎖的時(shí)間,從而降低了鎖定爭奪。

使用綁定連接

使用綁定連接使同一應(yīng)用程序所打開的兩個(gè)或多個(gè)連接可以相互合作。次級連接所獲得的任何鎖可以象由主連接獲得的鎖那樣持有,反之亦然,因此不會(huì)相互阻塞。

相關(guān)文章

  • mysql使用instr達(dá)到in(字符串)的效果

    mysql使用instr達(dá)到in(字符串)的效果

    本文主要介紹了mysql使用instr達(dá)到in(字符串)的效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • MySQL 中定義和使用變量的方法

    MySQL 中定義和使用變量的方法

    MySQL 提供了多種類型的變量,以適應(yīng)不同的應(yīng)用場景,用戶定義的變量適用于簡單的會(huì)話內(nèi)數(shù)據(jù)傳遞,局部變量適合在復(fù)雜的存儲過程中使用,而會(huì)話變量則用于調(diào)整和優(yōu)化數(shù)據(jù)庫會(huì)話的行為,這篇文章主要介紹了MySQL 中定義和使用變量,需要的朋友可以參考下
    2024-04-04
  • mysql判斷表是否存在然后批量刪除的操作

    mysql判斷表是否存在然后批量刪除的操作

    這篇文章主要介紹了mysql判斷表是否存在然后批量刪除操作,具有很好的參考價(jià)值,希望對有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • MYSQL存儲過程即常用邏輯知識點(diǎn)總結(jié)

    MYSQL存儲過程即常用邏輯知識點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于MYSQL存儲過程即常用邏輯知識點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • MySQL邏輯備份into?outfile

    MySQL邏輯備份into?outfile

    這篇文章主要介紹了MySQL?備份之?into?outfile,文章圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可以參考一下
    2022-05-05
  • MySQL 5.7.27下載安裝配置的詳細(xì)教程

    MySQL 5.7.27下載安裝配置的詳細(xì)教程

    這篇文章主要介紹了MySQL 5.7.27詳細(xì)下載安裝配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 淺談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))

    淺談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))

    下面小編就為大家?guī)硪黄獪\談mysqldump使用方法(MySQL數(shù)據(jù)庫的備份與恢復(fù))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • MySQL中使用auto_increment修改初始值和步長

    MySQL中使用auto_increment修改初始值和步長

    本文主要介紹了MySQL中使用auto_increment修改初始值和步長,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 淺析SQL語句行列轉(zhuǎn)換的兩種方法 case...when與pivot函數(shù)的應(yīng)用

    淺析SQL語句行列轉(zhuǎn)換的兩種方法 case...when與pivot函數(shù)的應(yīng)用

    SQL語句行列轉(zhuǎn)換的兩種方法 case...when和pivot函數(shù)應(yīng)用,運(yùn)用pivot 函數(shù)只支持?jǐn)?shù)據(jù)庫版本2005以上的。一般運(yùn)用case when else end 的方法比較多,比較普遍
    2013-08-08
  • MySQL數(shù)據(jù)庫重命名的快速且安全方法(3種)

    MySQL數(shù)據(jù)庫重命名的快速且安全方法(3種)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫重命名的快速且安全方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論

崇阳县| 延安市| 万山特区| 谷城县| 碌曲县| 红原县| 洪雅县| 屏南县| 宝山区| 合水县| 南召县| 互助| 南召县| 吕梁市| 东乡族自治县| 濮阳市| 娱乐| 安岳县| 仙游县| 册亨县| 伊宁县| 阿拉善左旗| 通海县| 德令哈市| 扬中市| 封丘县| 河源市| 改则县| 龙江县| 灵丘县| 运城市| 徐汇区| 文安县| 沁源县| 西吉县| 重庆市| 沁水县| 日土县| 师宗县| 遂川县| 乌鲁木齐县|