輕松解決IBM DB2數據庫鎖等待的相關問題

在實際的工作和學習中中,許多人經常會遇到sql執行很慢,但是數據庫cpu和內存使用率又不高的情況,類似的問題基本上由于鎖,排序等原因造成,本文的核心內容有以下幾點:“描述如何去定位鎖等待問題,誰在鎖等待?等待誰持有的鎖?鎖在那個表?”

一、測試准備

1、先在session1執行如下操作,創建測試表

#db2 connect to eos

#export DB2OPTIONS=+C

#db2 "create table tacy_test (a int not null primary key,b varchar(10))"

#db2 "insert into tacy_test values(1,'a')"

#db2 "insert into tacy_test values(2,'a')"

#db2 "insert into tacy_test values(3,'a')"

#db2 "insert into tacy_test values(4,'a')"

#db2 commit

2、在session2執行如下操作

#db2 connect to eos

#export DB2OPTIONS=+C

二、産生一個lock wait

在session1做一個表更新:

#db2 "update tacy_test set b='b' where a=4"

sql執行成功

在session2做同樣更新操作:

#db2 "update tacy_test set b='c' where a=4"

進程被挂起等待

三、定位鎖等待

1、先來看看應用的情況:

#db2pd -db eos -applications

Database Partition 0 -- Database EOS -- Active -- Up 0 days 07:37:37

Applications:

Address AppHandl [nod-index] NumAgents CoorPid Status C-AnchID C-StmtUID L-AnchID L-StmtUID Appid

0x10140040 8 [000-00008] 1 8425 Lock-wait 80 2 66 1 *LOCAL.db2inst1.071124043739

0x100CE540 7 [000-00007] 1 8358 UOW-Waiting 0 0 80 2 *LOCAL.db2inst1.071124043708

可以看到有一個應用的狀態處于Lock-wait

2、現在我們來看看應用在等什麽

#db2pd -db eos -locks showlock wait

Database Partition 0 -- Database EOS -- Active -- Up 0 days 07:42:56

Locks:

Address TranHdl Lockname Type Mode Sts Owner Dur HldCnt Att Rlse

0x2C8E0760 3 02001806078066020000000052 Row ..X W 2 1 0 0 0x0 TbspaceID 2 TableID 1560 RecordID 0x2668007

鎖的類型爲Row(行鎖),X鎖(排他鎖),下面是我們最關心的鎖的位置

TbspaceID 2 TableID 1560 RecordID 0x2668007

其中TbspaceID爲表空間ID,TableID爲表的ID,RecordID代表具體位置,全部應該是0x0266807,其中前面三個字節爲page number,爲0x02668,後面一個字節代表solt identifier,爲0x07

3、找到相應的表

#db2 "select tbspace,tabschema,tabname,tableid,tbspaceid from syscat.tables where tbspaceid=2 and tableid=1560"

TBSPACE TABSCHEMA TABNAME TABLEID TBSPACEID

------------ ----------- ---------- ------- ---------

USERSPACE1 DB2INST1 TACY_TEST 1560 2

1 record(s) selected.

4、根據RecordID找到鎖在哪行

db2提供了一個強大的數據分析工具db2dart,可以dump出相應的page數據

#db2dart eos /dd /tsi 2 /oi 1560 /ps 157312p /np 1 /v y

Warning: The database state is not consistent.

Warning: Reorg rows MAY be due to the inconsistent state of the database.

DB2DART Processing completed with warning(s)!

Complete DB2DART report found in:

/home/db2inst1/sqllib/db2dump/DART0000/EOS.RPT

其中tsi爲表空間id(2),oi爲表id(1560),ps爲page number(0x0266807),需要轉換爲十進制,在結尾必須加p,np代表你要獲取的頁數,v爲是否詳細輸出。

現在我們來看看EOS.RPT

_____________ DART _______

D a t a b a s e A n a l y s i s a n d R e p o r t i n g T o o l

IBM DB2 6000

_________________________________________________

DART (V8.1.0) Report:

2007-11-24-20.59.51.355893

Database Name: EOS

Report name: EOS.RPT

Old report back-up: EOS.BAK

Database Subdirectory: /opt/db2/db2inst1/NODE0000/SQL00001

Operational Mode: Database Inspection Only (INSPECT)

_____________________________________________

---------------------------------------------

Action option: DD

Table-object-ID: 1560; Tablespace-ID: 2; First-page: 157312p; Number-pages: 1; Verbose: y

Warning: The database state is not consistent.

Warning: Reorg rows MAY be due to the inconsistent state of the database.

Connecting to Buffer Pool Services...

Table object report phase start.

Dump format is verbose.

_____________________________________

Page 0 of object 1560 from table space 2.

BPS Page Header:

Page Data Offset = 48

Page Data Length = 4048

Page LSN = 0000 AE97 AE41

Object Page Number = 0

Pool Page Number = 157312

Object ID = 1560

Object Type = Data Object

Data Page Header:

Slot Count = 8

Total Free Space = 2784

Total Reserve Space = 0

Youngest Reserve Space = n/a

Youngest TID = n/a

Free Space Offset = 2799

Maximum Record Size = 23

Data Records:

Slot 0:

Offset Location = 3996 (xF9C)

Record Length = 32 (x20)

Record Type = Data Object Header Control Record

Page count = 1

Object Creation LSN = 0000 AE97 800C

Object State = x0000

UDI Since Runstats = 0

DART Field = x00000000

Slot 1:

Offset Location = 2992 (xBB0)

Record Length = 1004 (x3EC)

Record Type = Free Space Control Record

Free space entries:

0: 2884 (x0B44), 4028 (x0FBC), 4028 (x0FBC), 4028 (x0FBC)

4: 4028 (x0FBC), 4028 (x0FBC), 4028 (x0FBC), 4028 (x0FBC)

8: 4028 (x0FBC), 4028 (x0FBC), 4028 (x0FBC), 4028 (x0FBC)

省略...

492: 4028 (x0FBC), 4028 (x0FBC), 4028 (x0FBC), 4028 (x0FBC)

496: 4028 (x0FBC), 4028 (x0FBC), 4028 (x0FBC), 4028 (x0FBC)

Slot 2:

Offset Location = 2916 (xB64)

Record Length = 76 (x4C)

Record Type = Table Directory Record

MetaIndex Root Page = 157377

Index Type = 2

Table Descriptor Pointer -- Page 157312 Slot 3

Max Insert Search = 0

Flags = x02000200

bit representation = 00000010 00000000 00000010 00000000

Check pending info:

Constraint status = x00

Constraint RID = Page 0 Slot 0

last BID = x00000000

Slot 3:

Offset Location = 2892 (xB4C)

Record Length = 24 (x18)

Record Type = Table Description Record

Number of Columns = 2

Column 1:

Type is Long Integer

Length = 4

Prohibits NULLs

Prohibits Default

Fixed offset: 0

Column 2:

Type is Fixed Length Character String

Length = 10

Allows NULLs

Prohibits Default

Fixed offset: 4

Slot 4:

Offset Location = 2869 (xB35)

Record Length = 23 (x17)

Record Type = Table Data Record (FIXEDVAR)

Fixed part length value = 15

Column 1:

Fixed offset: 0

Type is Long Integer

Value = 1

Column 2:

Fixed offset: 4

Type is Fixed Length Character String

61202020 20202020 2020 a

Slot 5:

Offset Location = 2846 (xB1E)

Record Length = 23 (x17)

Record Type = Table Data Record (FIXEDVAR)

Fixed part length value = 15

Column 1:

Fixed offset: 0

Type is Long Integer

Value = 2

Column 2:

Fixed offset: 4

Type is Fixed Length Character String

61202020 20202020 2020 a

Slot 6:

Offset Location = 2823 (xB07)

Record Length = 23 (x17)

Record Type = Table Data Record (FIXEDVAR)

Fixed part length value = 15

Column 1:

Fixed offset: 0

Type is Long Integer

Value = 3

Column 2:

Fixed offset: 4

Type is Fixed Length Character String

61202020 20202020 2020 a

Slot 7:

Offset Location = 2800 (xAF0)

Record Length = 23 (x17)

Record Type = Table Data Record (FIXEDVAR)

Fixed part length value = 15

Column 1:

Fixed offset: 0

Type is Long Integer

Value = 4

Column 2:

Fixed offset: 4

Type is Fixed Length Character String

61202020 20202020 2020 a

Slots Summary: Total=8, In-use=8, Deleted=0.

Table object report phase end.

______________________________________

DB2DART Processing completed with warning(s)!

Warning(s) detected during processing.

______________________________________

Complete DB2DART report found in:

/home/db2inst1/sqllib/db2dump/DART0000/EOS.RPT

__ D A R T P R O C E S S I N G C O M P L E T E____

最後找到Solt 7 (0x07),至此,我們就可以清楚地知道應用等待的Row爲(4,a)

輕松解決IBM DB2數據庫定位鎖等待問題
在應用中,我們經常會碰到sql執行很慢,但是數據庫cpu和內存使用率又不高的情況,類似的問題基本上由于鎖,排序等原因造成,本文主要描述如何去定位鎖等待問題,誰在鎖等待?等待誰持有的鎖?鎖在那個表? 一、測試准...查看完整版>>輕松解決IBM DB2數據庫定位鎖等待問題
 
詳細講解IBM DB2數據庫無限活動日志策略
當數據庫第一次被創建的時候,有3個日志文件,被稱做主要日志文件,作爲創建過程的一部分被分配了。在Linux和Unix平台上,這些日志文件共有1,000個大小爲4KB的頁面;在Windows平台上,這些日志文件共有250個大小爲4K...查看完整版>>詳細講解IBM DB2數據庫無限活動日志策略
 
IBM DB2 數據複制遷移方法
  背景:需要更改數據庫表空間,或者需要將數據庫中所有表的數據遷移到一個新的數據庫中。  步驟:  1.通過db2控制台(db2cc)選中源數據庫中的所有表,將其導出成DDL腳本;  2.根據需要對腳本進行必要的修改,...查看完整版>>IBM DB2 數據複制遷移方法
 
IBM DB2 的數據複制、遷移方法
  以下方法經測試,在環境IBM x346,3.2G×2,4G,RAID 1,DB2 V8.2.4,Win2000 Adv Server,DMS表空間中,數據的load速度在60-100萬條/min左右。  背景:需要更改數據庫表空間,或者需要將數據庫中所有表的數據...查看完整版>>IBM DB2 的數據複制、遷移方法
 
教你輕松解決Oracle數據庫的服務啓動問題
軟件環境: 操作系統:Windows 2000 Advanced Server. 數據庫:Oracle 9.0.1.1.1 企業版. 近來,浏覽BBS時,常看到“急急急!如何啓動OMS?”的字眼,就針對以上這類問題,我有些經驗想和大家共同分享。 能否正常啓動...查看完整版>>教你輕松解決Oracle數據庫的服務啓動問題
 
教你輕松解決數據庫非事務表回滾失敗問題
執行ROLLBACK(回滾)時,如果收到下述消息,表示事務中使用的1個或多個表不支持事務: 警告:某些更改的非事務性表不能被回滾。 這些非事務性表不受ROLLBACK語句的影響。 如果在事務中意外地混合了事務性表和非事務...查看完整版>>教你輕松解決數據庫非事務表回滾失敗問題
 
輕松解決啓用數據庫複制時出現的18483錯誤
問題:在啓用數據庫複制的時出現以下現象: “錯誤18483:未能連接到服務器 'xx',因爲'distributor_admin'未在該服務器上定義爲遠程登錄”,這種情況應當如何解決? 解答: 出現這種問題,應該是你曾經更改過計算機名...查看完整版>>輕松解決啓用數據庫複制時出現的18483錯誤
 
輕松解決Windows7聲卡驅動不全問題-Windows7
  在安裝Windows7系統時,有不少用戶會遇到系統沒有聲音的問題。任務欄右下角的揚聲器圖標正常,點擊使用也正常,但是就是沒有聲音。沒有聲音,再好的戲也出不來,遇到這樣的問題怎麽解決呢?  第一步,你可以進...查看完整版>>輕松解決Windows7聲卡驅動不全問題-Windows7
 
輕松解決Windows虛擬內存不夠的問題-Windows7
  很多朋友用的電腦系統是Windows XP,有時使用時,明明沒開多少程序,卻常常出現虛擬內存不足的系統提示。怎麽解決這些問題呢?     1、殺毒    有些病毒發作時會占用大量內存空間,導致系統出現內存不足...查看完整版>>輕松解決Windows虛擬內存不夠的問題-Windows7
 
 
回到王朝網路移動版首頁