一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - DB2 - DB2死鎖的解決過程全記錄

DB2死鎖的解決過程全記錄

2020-06-06 17:31DB2數據庫教程網 DB2

這篇文章主要介紹了DB2死鎖的解決過程全記錄,本文造成死鎖的是select語句,處理過程相當困難,需要的朋友可以參考下

生產環境里使用的數據庫是DB2。但是最近頻繁出現一個奇怪的死鎖現象:某一個select sql 語句總是會出現死鎖。

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

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

 

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

 

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

延伸 · 閱讀

精彩推薦
  • DB2分析DB2活動日志滿的原因及解決DB2日志滿方法與避免方案

    分析DB2活動日志滿的原因及解決DB2日志滿方法與避免方案

    本文簡單地介紹了DB2中日志的使用、活動日志以及首個活動日志的概念、日志滿的原因、日志滿的診斷、臨時處理以及避免辦法 ...

    wdc3462020-06-05
  • DB2db2數據庫常用操作命令大全

    db2數據庫常用操作命令大全

    這篇文章主要介紹了db2數據庫常用操作命令大全,匯總了DB2的常用操作命令,分享給大家供大家參考,需要的朋友可以參考下...

    db2教程網6962021-10-21
  • DB2如何訪問大型機、小型機上的DB2 9數據服務器

    如何訪問大型機、小型機上的DB2 9數據服務器

    數據庫連接工具軟件 DB2 connect的基本特性是為桌面應用程序和服務主機的數據庫服務器之間提供一種連接交互訪問的方法。這些桌面應用程序所在的環境可...

    腳本之家3242020-06-10
  • DB2DB2 UDB V8.1管理學習筆記(三)

    DB2 UDB V8.1管理學習筆記(三)

    本文主要講解DB2 UDB V8.1管理學習筆記(三),有需要的朋友可以參考下 ...

    DB2數據庫教程網3182020-06-03
  • DB2python之sqlalchemy創建表的實例詳解

    python之sqlalchemy創建表的實例詳解

    這篇文章主要介紹了數據庫之sqlalchemy創建表的實例詳解的相關資料,希望通過本文能幫助到大家,讓大家掌握理解這部分內容,需要的朋友可以參考下...

    wait_for_eva8502020-06-11
  • DB2DB2專家王云談商業智能BI

    DB2專家王云談商業智能BI

    王云說: 既然講商業智能,我們大家都在講及時性,我們講要有績效,要有BPM,我自己就來看看我們能不能在這個會場上,我們來實踐一下,如果大家抬頭...

    DB2數據庫教程網4202020-06-10
  • DB2DB2 SELECT語句高級用法

    DB2 SELECT語句高級用法

    DB2 SELECT語句高級用法,學習db2數據庫的朋友可以參考下。 ...

    DB2數據庫教程網6242020-06-08
  • DB2CentOS下DB2數據庫安裝過程詳解

    CentOS下DB2數據庫安裝過程詳解

    這篇文章主要介紹了CentOS下DB2數據庫安裝過程詳解,本文步驟詳細,操作的命令也比較全,需要的朋友可以參考下 ...

    DB2數據庫教程網3572020-06-06
主站蜘蛛池模板: 欧美牛逼aa | 亚洲精品资源 | 91九色视频无限观看免费 | 精品精品久久宅男的天堂 | 欧美成人另类人妖 | 高清在线观看mv的网址免费 | 好大用力深一点女公交车 | 日韩一区二区中文字幕 | 国内精品视频九九九九 | 亚洲男1069gay男猛男 | 亚洲10p| seetube18日本第一次 | 996热视频 | 下雨天小说词枝 | 久久一er精这里有精品 | 岛国片免费观看 | 大胆私拍模特国模377 | 亚洲国产影院 | 99精品在线视频观看 | 国产有码在线 | 国产在视频线在精品 | 五月最新商场女厕所高跟嘘嘘 | 欧美一级专区免费大片俄罗斯 | 亚洲精品久久啪啪网站成年 | 久久re6热在线视频 久久AV喷吹AV高潮欧美 | 欧洲喷浆乌克兰 | 午夜伦理:伦理片 | 成年人在线免费看 | 午夜DY888国产精品影院 | 精品国产精品人妻久久无码五月天 | 久久国产综合精品欧美 | 欧美一区二区三区不卡视频 | 国产成人久久久精品一区二区三区 | 亚洲大片在线观看 | 成人在线视频播放 | 欧美精品久久久亚洲 | 黄片毛片 | 任我行视频在线观看国语 | 精品91自产拍在线观看99re | 欧美一级高清片免费一级 | 欧美日韩综合一区 |