麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > DB2 > 正文

DB2死鎖的解決過程全記錄

2020-01-31 14:51:57
字體:
供稿:網(wǎng)友

生產(chǎn)環(huán)境里使用的數(shù)據(jù)庫是DB2。但是最近頻繁出現(xiàn)一個奇怪的死鎖現(xiàn)象:某一個select sql 語句總是會出現(xiàn)死鎖。

按照以往的經(jīng)驗,通常都是update/delete之類的更新sql語句會出現(xiàn)死鎖的問題。而且這個 select sql 語句是一個很普通的sql,沒有任何大數(shù)據(jù)量的處理。

分析這個死鎖,有很多難以處理的地方。

1、因為生產(chǎn)環(huán)境數(shù)據(jù)量大,我們無法把生產(chǎn)環(huán)境中關(guān)聯(lián)表的數(shù)據(jù)導(dǎo)入到測試環(huán)境。也就是說,無法模擬數(shù)據(jù)量。
2、沒有任何log輸出。因為生產(chǎn)環(huán)境的log輸出級別是ERROR。
3、無法在生產(chǎn)環(huán)境進行測試,因為客戶不允許。
4、生產(chǎn)環(huán)境的數(shù)據(jù)庫無法開啟快照等功能。因為會影響性能。

大家可以想象,在沒有快照等功能下,分析死鎖就只能靠分析代碼了。但是這個處理非常復(fù)雜,單憑分析代碼,沒有任何頭緒。
 
階段1:我們懷疑是數(shù)據(jù)量的原因
 
由于生產(chǎn)環(huán)境的數(shù)據(jù)量特別大,這個處理還有很多其他表的處理。所以我們懷疑是不是大數(shù)據(jù)量導(dǎo)致系統(tǒng)負荷過高,導(dǎo)致了死鎖?
于是我們?nèi)〉昧税l(fā)生死鎖時CPU,硬盤,網(wǎng)絡(luò)等等負載信息。沒有找到任何線索。
 
階段2:做一個測試程序,在測試環(huán)境中用多線程模擬多用戶去做這個處理。
 
為了能夠在開發(fā)環(huán)境再現(xiàn)出這個死鎖,我們做了一個多線程的測試程序,模擬多用戶運行。可惜,還是沒有再現(xiàn)出來。
 
階段3:分析測試環(huán)境數(shù)據(jù)庫和產(chǎn)品環(huán)境數(shù)據(jù)庫的差異
 
此時我們懷疑還是數(shù)據(jù)量導(dǎo)致的問題。于是我們盡可能的將開發(fā)環(huán)境的數(shù)據(jù)弄得和產(chǎn)品環(huán)境一樣多。
之后在運行測試,還是沒有再現(xiàn)出來。
 
階段4:分析用戶的操作log
 
沒有任何辦法的情況下,我們只好分析用戶的操作log,希望從中找到一點線索。功夫不負有心人,我們發(fā)現(xiàn),當(dāng)兩個人同時
進行這個操作的時候,基本都會發(fā)生死鎖。所以,我們判斷還是兩個人同時操作導(dǎo)致的問題。但是,為什么開發(fā)環(huán)境上模擬了
很多人的操作,卻沒有發(fā)生死鎖呢?
 
階段5:發(fā)現(xiàn)數(shù)據(jù)庫設(shè)置的問題
 
我們又修改了測試程序,將模擬的用戶數(shù)量提高,但是很不幸,仍然沒有再現(xiàn)這個問題。此時我們注意到了:是不是開發(fā)環(huán)境的
數(shù)據(jù)庫設(shè)置和產(chǎn)品環(huán)境的數(shù)據(jù)庫設(shè)置不同?我們對比了一下兩個數(shù)據(jù)庫的設(shè)置:發(fā)現(xiàn)好多參數(shù)不同。但是我們僅僅關(guān)注了和鎖有關(guān)
的設(shè)置,也就是包含 LOCK關(guān)鍵字的設(shè)置。
 
階段6:將測試環(huán)境數(shù)據(jù)庫和產(chǎn)品環(huán)境數(shù)據(jù)庫的設(shè)置保持一致
 
我們將所有和lock有關(guān)的設(shè)置都改成了和產(chǎn)品環(huán)境一直。但是仍然沒有再現(xiàn)這個死鎖。終于,一個人發(fā)現(xiàn),"cur_commit"這個設(shè)置
不同。于是查詢文檔,發(fā)現(xiàn)了 cur_commit的特點。
當(dāng) cur_commit = false的時候,下列情況會造成死鎖:
線程1插入數(shù)據(jù)A,然后線程2插入數(shù)據(jù)B。
在線程2還沒有提交事物之前,線程1查詢數(shù)據(jù)A,就會造成死鎖了。
開發(fā)環(huán)境中,cur_commit = true,所以我們一直也模擬不出來這個現(xiàn)象。
于是,我們把cur_commit也改成了 false。
 
階段7:使用測試程序去模擬
 
我們修改了測試程序,模擬上面兩個線程的操作,成功地再現(xiàn)了這個死鎖。錯誤的log信息和產(chǎn)品環(huán)境上也是一致的。
 
階段8:使用畫面操作去模擬
 
然后我們修改了程序,使用畫面去操作,也成功地再現(xiàn)了這個死鎖。
 
解決方案:
 
解決方案很簡單,就是把查詢語句中的條件加為索引,就不會出現(xiàn)死鎖了。
由于這個表數(shù)據(jù)量不大,所以性能幾乎沒有任何影響。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 亚洲网视频 | 亚洲啊v在线观看 | 精品亚洲视频在线 | www久久综合 | 国产一区二区影视 | 久草在线综合 | 免费观看黄色一级视频 | 黄色高清免费网站 | 黄色一级片免费观看 | 九九热精 | 欧美激情 在线播放 | 免费黄色一级网站 | 久久亚洲国产午夜精品理论片 | 爱操影视 | 久久久久99一区二区三区 | 狠狠干天天操 | 黄色特级毛片 | 欧美日韩精品一区二区三区蜜桃 | 欧美黄色大片免费观看 | 国产69精品99久久久久久宅男 | 久久精品视频首页 | 青青草成人影视 | 欧美xxxx精品另类 | 欧美黄色免费视频 | 久草在线视频网 | 久综合 | 他也色在线视频 | 国产pron | 精品亚洲综合 | 中文字幕一区2区 | 中文字幕亚洲情99在线 | 国产大片中文字幕在线观看 | julieann艳星激情办公室 | 北原夏美av | 欧美视频99| 国产精品自在线拍 | 欧日韩在线视频 | 亚洲成人福利在线观看 | 国产91av视频| 91成| 黄色大片高清 |