偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

DB2鎖等待的工作原理與相關(guān)問(wèn)題的描述

數(shù)據(jù)庫(kù)
以下的文章主要向大家講述的是DB2鎖等待的應(yīng)用原理,以及對(duì)DB2數(shù)據(jù)庫(kù)鎖等待在實(shí)際操作中出現(xiàn)的相關(guān)問(wèn)題的描述,以下就是文章的主要內(nèi)容講述。

今天主要向大家講述的是DB2鎖等待,此篇文章主要是通過(guò)一個(gè)簡(jiǎn)單的例子,來(lái)對(duì)數(shù)據(jù)庫(kù)鎖進(jìn)行介紹,以及對(duì)數(shù)據(jù)庫(kù)的中的鎖等待問(wèn)題進(jìn)行詳細(xì)分析,鎖,一個(gè)讓人覺得安全又不太方便的技術(shù),在數(shù)據(jù)庫(kù)中發(fā)揮著他無(wú)可替代的作用。

但是,不同的數(shù)據(jù)庫(kù)對(duì)其有不同的實(shí)現(xiàn)方式。當(dāng)你習(xí)慣一個(gè)數(shù)據(jù)庫(kù)的使用方式,去接觸另外一個(gè)數(shù)據(jù)庫(kù)時(shí),就會(huì)感覺到諸多的不便。每個(gè)開始接觸DB2的人,或多或少的都有這樣的感受,數(shù)據(jù)庫(kù)中有那么多類型的鎖,S,IS,NS,X,IX,SIX,NX,U,Z….從名字上看,很多差不多,如果你能都弄懂他的含義.

并且在設(shè)計(jì)中考慮到,那當(dāng)然是好的;如果你不是很理解他,沒關(guān)系,大多數(shù)使用DB2數(shù)據(jù)庫(kù)開發(fā)的人都不能完全理解他們,所以,你不用擔(dān)心。作為一個(gè)DB2數(shù)據(jù)庫(kù)使用比較習(xí)慣的人,這里分享下如何處理DB2鎖等待問(wèn)題,幫助大家解決使用DB2過(guò)程中遇到的鎖問(wèn)題。

下面,使用一個(gè)簡(jiǎn)單的例子來(lái)介紹下如何分析數(shù)據(jù)庫(kù)的中的鎖等待問(wèn)題。

 

場(chǎng)景,查找數(shù)據(jù)庫(kù)鎖等待的根源:

 

創(chuàng)建一個(gè)簡(jiǎn)單的表:

 

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

開3個(gè)命令行的窗口

在窗口一執(zhí)行:

 

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

DB20000I SQL命令成功完成。

在窗口二執(zhí)行:

 

  1. db2 "select * from test_lock"  

我們看到了,很長(zhǎng)時(shí)間沒有返回,這就是很多人曾經(jīng)問(wèn)的一個(gè)問(wèn)題,我執(zhí)行了一個(gè)很簡(jiǎn)單的操作,數(shù)據(jù)庫(kù)卡死,不返回,為什么?

我們使用窗口三進(jìn)行分析:

 

db2 list applications show detail

 

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\

 

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\

 

這個(gè)命令永遠(yuǎn)是你看鎖問(wèn)題最簡(jiǎn)單實(shí)用的一步,數(shù)據(jù)庫(kù)中到底現(xiàn)在存在不存在鎖等待,一看就知道,如果有較長(zhǎng)時(shí)間Lock-waiting(英文環(huán)境)狀態(tài)或者鎖定等待(中文環(huán)境)狀態(tài),則數(shù)據(jù)庫(kù)存在鎖定等待的應(yīng)用,如上所示,窗口2不返回的原因可能是DB2鎖等待引起的,現(xiàn)在,我們用db2pd這個(gè)工具,來(lái)分析下具體鎖在哪兒,也許,這才是我們最關(guān)心的。

 

  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  

執(zhí)行這個(gè)命令后,你也許會(huì)看到很多的鎖,我為什么會(huì)找出這條呢?記住,你分析的入手點(diǎn)一定是正在等待的應(yīng)用程序,也就是上面所列,狀態(tài)(Sts)為W(waiting)的應(yīng)用,也許在你的環(huán)境中你看到了很多,可以逐個(gè)分析。

在這一行中,我們可以得到這些有用信息,Transaction handle為8 (TranHdl)的應(yīng)用正在等待03000500040080020000000052(Lockname)這個(gè)鎖,這個(gè)鎖正被Transaction handle為2(Owner)的應(yīng)用占有。請(qǐng)求的鎖類型為行上的NS鎖,請(qǐng)求鎖的行是3號(hào)表空間中的5號(hào)表上,在表空間的第640頁(yè)中的第4個(gè)槽位。現(xiàn)在,我們看下誰(shuí)持有這個(gè)鎖。

 

  1. db2pd -d sample -locks show detail |find "03000500040080020000000052"  
  2. 0x7F890AB0 2 03000500040080020000000052 Row ..X G 2 1 0 0x08 0x40000000 TbspaceID 3 TableID 5 PartitionID 0 Page 640 Slot 4  
  3. 0x7F8911B0 8 03000500040080020000000052 Row .NS W 2 1 0 0x00 0x00000001 TbspaceID 3 TableID 5 PartitionID 0 Page 640 Slot 4 

看到如上2行結(jié)果,其中一行,是我們剛才看到的正在等待的應(yīng)用,而另外一個(gè),狀態(tài)為G(Granted),Transction handler為2,正是我們要找的,持有鎖沒釋放的根源。如果你看到其他的狀態(tài)為W的鎖,是可能的,因?yàn)榭赡芎芏鄳?yīng)用都在等這個(gè)鎖,我們要找的是持有鎖的應(yīng)用,通過(guò)上一個(gè)命令的分析,是Transction handler為2的應(yīng)用。

 

到此,我們已經(jīng)找到了是Transaction handle為2的應(yīng)用在占用鎖沒有釋放,可以使用下面的命令來(lái)查看下,他到底在執(zhí)行什么。

 

  1. db2pd –d sample –transactions  
  2. Transactions:  
  3. Address AppHandl [nod-index] TranHdl Locks State Tflag Tflag2  
  4. Firstlsn Lastlsn LogSpace SpaceReserved TID AxRegCnt GXID  
  5. 0x7FC21A80 22[000-00022] 2 3 WRITE 0x00000000 0x00000000 0x000002C1D098 0x000002C1D098 110 174 0x00000000185E 1 0  

查找TranHdl為2的應(yīng)用,我們可以看到這樣的信息,這個(gè)應(yīng)用application handle為22,當(dāng)前持有3個(gè)鎖,狀態(tài)為寫。注意,當(dāng)LogSpace不為0的時(shí)候,這個(gè)應(yīng)用一定有未提交的更改操作,這個(gè)應(yīng)用使用日志為110。下面我們查下這個(gè)應(yīng)用在執(zhí)行什么。

  1. db2pd -d sample -applications  
  2. Address AppHandl [nod-index] NumAgents CoorEDUID Status C-AnchID C-StmtUID L-AnchID L-StmtUID Appid WorkloadID WorkloadOccID  
  3. 0x7AED8080 22[000-00022] 1 4764 UOW-Waiting 0 0 64 1 *LOCAL.DB2.090817071951 1 1  

找application handle為22的應(yīng)用,然后查找當(dāng)前語(yǔ)句的句柄標(biāo)識(shí)和上條語(yǔ)句的句柄標(biāo)識(shí),我們看到,當(dāng)前這個(gè)應(yīng)用沒有正在執(zhí)行的語(yǔ)句,執(zhí)行的上條語(yǔ)句是L-AnchID為64, L-StmtUID為1的語(yǔ)句。我們看下這個(gè)語(yǔ)句是什么?

  1. db2pd -d sample –dyn  
  2. Address AnchID StmtUID NumEnv NumVar NumRef NumExe Text  
  3. 0x7EAF4370 64 1 0 0 1 1 insert into test_lock values(1,'aaa')。 

通過(guò)動(dòng)態(tài)語(yǔ)句的對(duì)應(yīng)(AnchID StmtUID分別為64和1),我們已經(jīng)找到了鎖定的根源,正式上面的語(yǔ)句占用了鎖沒有釋放,導(dǎo)致你執(zhí)行的查詢語(yǔ)句沒有返回,中間,我們也理解的一些db2pd的輸出,并會(huì)利用這些信息分析問(wèn)。

如果你使用的是9.5或以上的版本,還可以利用更簡(jiǎn)單的方法知道,這個(gè)鎖到底在哪一行上,如上面所分析,請(qǐng)求的鎖在3號(hào)表空間中的5號(hào)表上,在表空間的第640頁(yè)中的第4個(gè)槽位。現(xiàn)在我們看下,是鎖了哪個(gè)對(duì)象的哪行記錄:

 

  1. db2 "select tabname from syscat.tables where tbspaceid = 3 and tableid = 5"  
  2. TABNAME  
  3. TEST_LOCK  

鎖在TEST_LOCK這個(gè)表上,具體是在這個(gè)表上的哪行記錄呢?根據(jù)數(shù)據(jù)庫(kù)ROWID的組成,pages為640和slot為4,如果是large tablespace,則rowid轉(zhuǎn)換為整數(shù)為:640*65536+4,如果是regular tablespace,則rowid轉(zhuǎn)換為整數(shù)為640*256+4,我使用的是large表空間,所以rowid為640*65536+4=41943044。

根據(jù)表和rowid可以直接找到這條記錄:

 

  1. db2 "select * from test_lock where rid(test_lock)= 41943044 with ur"  
  2. COL COL2  
  3. 1 aaa  

結(jié)果和上面分析的一樣,在TEST_LOCK表上的1’aaa’這行記錄上產(chǎn)生的DB2鎖等待。注意,上面的語(yǔ)句要使用with ur來(lái)執(zhí)行,否則,你也同樣鎖等待了。。。。。

補(bǔ)充一點(diǎn):

 

很多情況下知道數(shù)據(jù)庫(kù)的applications handle后,需要知道到底是業(yè)務(wù)的哪個(gè)進(jìn)程連接過(guò)來(lái)執(zhí)行的,可以使用下面的方法來(lái)查:

 

  1. db2pd -d smaple –agents  
  2. Address AppHandl [nod-index] AgentEDUID Priority Type State ClientPid Userid ClientNm Rowsread Rowswrtn LkTmOt DBName  
  3. 0x7AB97A90 22[000-00022] 4764 0 Coord Inst-Active 5120  
  4. XUXIAOF db2bp.exe 245 48 NotSet SAMPLE  

查找application handle為22的應(yīng)用,對(duì)應(yīng)的ClientPid為5120,就是你連接到數(shù)據(jù)庫(kù)上執(zhí)行這個(gè)操作的應(yīng)用的進(jìn)程,應(yīng)用程序的名字(ClientNm)為db2bp.exe。

【編輯推薦】

  1. DB2 9.7自治事務(wù)的定義與相關(guān)事務(wù)背景
  2. DB2歸檔日志的管理方案從哪幾點(diǎn)入手?
  3. 對(duì)DB2取得當(dāng)前時(shí)間的正確解析
  4. DB2性能調(diào)優(yōu)中存在哪些問(wèn)題,如何破解?
  5. DB2 數(shù)據(jù)類型如何才能輕松接觸?
責(zé)任編輯:佚名 來(lái)源: 萬(wàn)國(guó)數(shù)據(jù)
相關(guān)推薦

2010-08-19 09:54:42

DB2死鎖

2010-08-02 17:30:30

DB2鎖等待

2010-08-06 13:20:00

DB2鎖等待

2010-08-04 13:30:49

2010-08-17 13:47:09

DB2還原

2010-08-10 13:36:00

2010-08-09 10:00:25

DB2數(shù)據(jù)移動(dòng)

2010-08-18 09:50:29

DB2緩沖池

2010-07-30 10:24:18

2010-08-17 16:24:32

IBM DB2數(shù)據(jù)庫(kù)

2010-08-13 14:46:08

DB2 -964

2010-11-02 16:31:59

DB2鎖的屬性

2010-07-28 11:13:04

DB2 Resotre

2009-05-19 09:10:26

代理工作代理DB2

2010-08-04 09:45:30

2010-07-28 09:21:25

DB2鎖等待

2010-08-04 10:44:32

2010-08-06 14:52:13

DB2 9.7武器

2010-08-04 17:10:37

DB2數(shù)據(jù)庫(kù)

2010-08-13 15:42:22

DB2數(shù)據(jù)庫(kù)分區(qū)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)