程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 對DB2數據庫的鎖等待的正確認識

對DB2數據庫的鎖等待的正確認識

編輯:DB2教程

我們今天是要和大家一起討論的是正確分析DB2數據庫的鎖等待,提及鎖,可以說是一個讓人覺得安全又不太方便的技術,在數據庫中發揮著他無可替代的作用,但是,不同的數據庫對其有不同的實現方式。

當你習慣一個數據庫的使用方式,去接觸另外一個數據庫時,就會感覺到諸多的不便。

鎖,一個讓人覺得安全又不太方便的技術,在數據庫中發揮著他無可替代的作用,但是,不同的數據庫對其有不同的實現方式。當你習慣一個數據庫的使用方式,去接觸另外一個數據庫時,就會感覺到諸多的不便。

每個開始接觸DB2的人,或多或少的都有這樣的感受,數據庫中有那麼多類型的鎖,S,IS,NS,X,IX,SIX,NX,U,Z….從名字上看,很多差不多,如果你能都弄懂他的含義,並且在設計中考慮到,那當然是好的;如果你不是很理解他,沒關系,大多數使用DB2數據庫開發的人都不能完全理解他們,所以,你不用擔心。

作為一個DB2數據庫使用比較習慣的人,這裡分享下如何處理DB2數據庫中的鎖等待問題,幫助大家解決使用DB2過程中遇到的鎖問題。

下面,使用一個簡單的例子來介紹下如何分析數據庫的中的鎖等待問題。

場景,查找數據庫鎖等待的根源:

創建一個簡單的表:

  1. db2 "create table test_lock (col int, col2 char(10))"  

開3個命令行的窗口

在窗口一執行:

  1. db2 +c "insert into test_lock values(1,'aaa')"  

DB20000I SQL命令成功完成。

在窗口二執行:

  1. db2 "select * from test_lock"  

我們看到了,很長時間沒有返回,這就是很多人曾經問的一個問題,我執行了一個很簡單的操作,數據庫卡死,不返回,為什麼?

我們使用窗口三進行分析:

  1. db2 list applications show detail   
  2. XUXIAOF db2bp.exe 22 *LOCAL.DB2.090817071951 00012 1 0 4764 UOW 正在等待 2009-08-18 10:52:08.685167 IBM-L3F6 SAMPLE C:\DB2\NODE0000\SQL00001\   
  3. XUXIAOF db2bp.exe 68 *LOCAL.DB2.090817075736 00003 1 0 4464 鎖定等待 2009-08-18 10:53:24.329893 IBM-L3F6 SAMPLE C:\DB2\NODE0000\SQL00001\ 

這個命令永遠是你看鎖問題最簡單實用的一步,數據庫中到底現在存在不存在鎖等待,一看就知道,如果有較長時間Lock-waiting(英文環境)狀態或者鎖定等待(中文環境)狀態,則數據庫存在鎖定等待的應用,如上所示,窗口2不返回的原因可能是鎖等待引起的,現在,我們用db2pd這個工具,來分析下具體鎖在哪兒,也許,這才是我們最關心的。

  1. db2pd -d sample -locks show detail   
  2. Address TranHdl Lockname Type Mode Sts Owner Dur HoldCount Att ReleaseFlg   
  3. 0x7F8911B0 8 03000500040080020000000052 Row .NS W 2 1 0 0x00 0x00000001 TbspaceID 3 TableID 5 PartitionID 0 Page 640 Slot 4 

執行這個命令後,你也許會看到很多的鎖,我為什麼會找出這條呢?記住,你分析的入手點一定是正在等待的應用程序,也就是上面所列,狀態(Sts)為W(waiting)的應用,也許在你的環境中你看到了很多,可以逐個分析。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved