IT技術互動交流(liu)平台(tai)

DB2發生死lang)榭鍪庇ying)該怎(zen)麼chuang) /h1>
作(zuo)者(zhe)︰whl  來(lai)源︰網絡整(zheng)理  發布日期︰2020-02-26 09:06:00
  相信(xin)大家都發現(xian)在數據庫里的(de)新應(ying)用(yong)剛剛開始啟用(yong)的(de)時候,由(you)于對DB2的(de)測試還沒有進(jin)行很好的(de)完善(shan),經常會導致死lang)榭鱸諳低持(chi)蟹? 萌ren)不勝其(qi)煩。為此很多(duo)人(ren)都想(xiang)找(zhao)到解決DB2死lang)榭齙de)辦(ban)法,小編特意(yi)查詢(xun)了資(zi)料,下面(mian)給大家一(yi)一(yi)分享。
DB2死��lang)�� src=

  生產環(huan)境里使用(yong)的(de)數據庫是DB2。但是最近頻繁出現(xian)一(yi)個奇怪的(de)死lang)xian)象︰某一(yi)個select sql 語句總是會出現(xian)死lang)/p>

  按照zhao)醞de)經驗(yan),通常都是update/delete之類的(de)更新sql語句會出現(xian)死lang)de)問(wen)題。而且這(zhe)個 select sql 語句是一(yi)個很普通的(de)sql,沒有任何大數據量的(de)處理。

  分析這(zhe)個死lang) 瀉芏duo)難以處理的(de)地方。

  1、因(yin)為生產環(huan)境數據量大,我們無法把生產環(huan)境chi)泄亓 淼de)數據導入到測試環(huan)境。也就是說,無法模(mo)擬數據量。

  2、沒有任何log輸出。因(yin)為生產環(huan)境的(de)log輸出級別是ERROR。

  3、無法在生產環(huan)境進(jin)行測試,因(yin)為客戶不允許。

  4、生產環(huan)境的(de)數據庫無法開啟快照等功能。因(yin)為會影響性能。

  大家可以想(xiang)象,在沒有快照等功能下,分析死lang)橢zhi)能靠分析代碼了。但是這(zhe)個處理非(fei)常復雜,單憑分析代碼,沒有任何頭緒(xu)。

  階段1︰我們懷疑是數據量的(de)原(yuan)因(yin)

  由(you)于生產環(huan)境的(de)數據量特別大,這(zhe)個處理還有很多(duo)其(qi)他表的(de)處理。所(suo)以我們懷疑是不是大數據量導致系統負荷(he)過高,導致了死lang)

  于是我們取得了發生死lang)PU,硬盤,網絡等等負載信(xin)息(xi)。沒有找(zhao)到任何線索(suo)。

  階段2︰做一(yi)個測試程序,在測試環(huan)境chi)杏yong)多(duo)線程模(mo)擬多(duo)用(yong)戶去做這(zhe)個處理。

  為了能夠在開發環(huan)境再現(xian)出這(zhe)個死lang) 頤親雋艘yi)個多(duo)線程的(de)測試程序,模(mo)擬多(duo)用(yong)戶運行。可shang)? 故敲揮性儐xian)出來(lai)。

  階段3︰分析測試環(huan)境數據庫和產品環(huan)境數據庫的(de)差異(yi)

  此時我們懷疑還是數據量導致的(de)問(wen)題。于是我們盡(jin)可能的(de)將開發環(huan)境的(de)數據弄得和產品環(huan)境一(yi)樣(yang)多(duo)。

  之後在運行測試,還是沒有再現(xian)出來(lai)。

  階段4︰分析用(yong)戶的(de)操作(zuo)log

  沒有任何辦(ban)法的(de)情況下,我們只(zhi)好分析用(yong)戶的(de)操作(zuo)log,希望從中找(zhao)到一(yi)點線索(suo)。功夫不負有心人(ren),我們發現(xian),當兩個人(ren)同時

  進(jin)行這(zhe)個操作(zuo)的(de)時候,基本都會發生死lang)Ksuo)以,我們判斷還是兩個人(ren)同時操作(zuo)導致的(de)問(wen)題。但是,為什麼開發環(huan)境上(shang)模(mo)擬了

  很多(duo)人(ren)的(de)操作(zuo),卻沒有發生死lang)

  階段5︰發現(xian)數據庫設置(zhi)的(de)問(wen)題

  我們又修(xiu)改(gai)了測試程序,將模(mo)擬的(de)用(yong)戶數量提高,但是很不幸,仍(reng)然沒有再現(xian)這(zhe)個問(wen)題。此時我們注(zhu)意(yi)到了︰是不是開發環(huan)境的(de)

  數據庫設置(zhi)和產品環(huan)境的(de)數據庫設置(zhi)不同?我們對比了一(yi)下兩個數據庫的(de)設置(zhi)︰發現(xian)好多(duo)參wen)煌 5 俏頤牆jin)僅(jin)關注(zhu)了和鎖有關

  的(de)設置(zhi),也就是包含(han) LOCK關鍵字的(de)設置(zhi)。

  階段6︰將測試環(huan)境數據庫和產品環(huan)境數據庫的(de)設置(zhi)保持(chi)一(yi)致

  我們將所(suo)有和lock有關的(de)設置(zhi)都改(gai)成了和產品環(huan)境一(yi)直。但是仍(reng)然沒有再現(xian)這(zhe)個死lang)V沼冢 yi)個人(ren)發現(xian),"cur_commit"這(zhe)個設置(zhi)

  不同。于是查詢(xun)文檔(dang),發現(xian)了 cur_commit的(de)特點。

  當 cur_commit = false的(de)時候,下列情況會造成死lang)/p>

  線程1插入數據A,然後線程2插入數據B。

  在線程2還沒有提交事物之前,線程1查詢(xun)數據A,就會造成死lang)恕/p>

  開發環(huan)境chi)校ur_commit = true,所(suo)以我們一(yi)直也模(mo)擬不出來(lai)這(zhe)個現(xian)象。

  于是,我們把cur_commit也改(gai)成了 false。

  階段7︰使用(yong)測試程序去模(mo)擬

  我們修(xiu)改(gai)了測試程序,模(mo)擬上(shang)面(mian)兩個線程的(de)操作(zuo),成功地再現(xian)了這(zhe)個死lang)4cuo)誤(wu)的(de)log信(xin)息(xi)和產品環(huan)境上(shang)也是一(yi)致的(de)。

  階段8︰使用(yong)畫(hua)面(mian)操作(zuo)去模(mo)擬

  然後我們修(xiu)改(gai)了程序,使用(yong)畫(hua)面(mian)去操作(zuo),也成功地再現(xian)了這(zhe)個死lang)/p>

  解決方案︰

  解決方案很簡單,就是把查詢(xun)語句中的(de)條件(jian)加為索(suo)引,就不會出現(xian)死lang)恕/p>

  由(you)于這(zhe)個表數據量不大,所(suo)以性能幾乎沒有任何影響。

  上(shang)面(mian)這(zhe)些內容主(zhu)要是對于如何解決DB2的(de)死lang)榭黿jin)行了詳細的(de)講解,文中示範的(de)造成死lang)wen)題的(de)是select引起的(de)mo) 閌潛冉俠 訓de)一(yi)種(zhong)情況,希望對大家有所(suo)幫助。

5分PK10官网

    Tag標簽︰DB2死lang)/a>  

    • 5分PK10官网

    • Directx11 游戲編程入門教程
    • 專題主(zhu)要學習DirectX的(de)初(chu)級編程入門學習,對Directx11的(de)入門及初(chu)學者(zhe)有...... 詳細
    About IT165 - 廣告服務 - 澳客彩票官网隱(yin)私聲(sheng)明 - 版權申(shen)明 - 免責條款 - 網站地圖 - 網友投稿 - 聯系方式
    本站內容來(lai)自于互聯網,僅(jin)供用(yong)于網絡技術學習,學習中請遵循(xun)相關法律(lv)法規(gui)
    5分PK10官网 | 下一页