使用 db2pd 命令进行监视和故障诊断
db2pd 命令用于排除故障,因为它可以快速、即时地从内存集返回信息。 Db2® 内存集的即时信息。
概述
该工具不需要获得任何锁存器或使用任何引擎资源就可以收集信息。 因此,在 db2pd 收集信息时,有可能(并且预计)会检索到正在更改的信息;这样,数据可能不是十分准确。 如果遇到正在更改的内存指针,可使用信号处理程序来防止 db2pd 异常结束。 这可能会导致输出中出现诸如以下的消息:“正在更改的数据结构已强制终止命令”。 虽然如此,该工具对于故障诊断却非常有用。 在不锁存的情况下收集信息有两个好处:检索速度更快并且不会争用引擎资源。
如果要在出现特定 SQLCODE、ZRC 代码或 ECF 代码时捕获关于数据库管理系统的信息,那么可以使用 db2pdcfg -catch 命令完成此操作。 捕获到错误时,将启动 db2cos(调出脚本)。 db2cos 脚本可以动态地进行更改,以便运行解决问题所需的任何 db2pd 命令、操作系统命令或任何其他命令。 模板 db2cos 脚本文件位于 UNIX 和 Linux®上的 sqllib/bin 中。 在 Windows 操作系统上, db2cos 位于 $DB2PATH\bin 目录中。
添加新节点时,可以使用带有可选 oldviewapps 和 detail 参数的 db2pd -addnode 命令来监视数据库分区服务器 (即添加节点) 上的操作进度,以获取更详细的信息。
要获取当前处于活动状态或者曾处于活动状态但由于某种原因而被取消激活的事件监视器的列表,请运行 db2pd -gfw 命令。 此命令还将返回关于每个快速写程序 EDU 的目标的统计信息和信息(事件监视器将数据写入那些目标)。
示例
- 示例 1: 诊断锁定等待
- 示例 2: 使用 -wlocks 参数捕获正在等待的所有锁定
- 示例 3: 显示锁定的表名和模式名
- 示例 4: 使用 -apinfo 参数来捕获有关锁定所有者和锁定等待者的详细运行时信息
- 示例 5: 在考虑锁定问题时使用调出脚本
- 示例 6: 将应用程序映射到动态 SQL 语句
- 示例 7: 监视内存使用情况
- 示例 8: 确定哪个应用程序正在使用表空间
- 示例 9: 监视恢复
- 示例 10: 确定事务正在使用的资源量
- 示例 11: 监视日志使用情况
- 示例 12: 查看综合系统列表
- 示例 13: 生成堆栈跟踪
- 示例 14: 查看数据库分区的内存统计信息
- 示例 15: 监视索引重组的进度
- 示例 16: 按处理器耗用时间显示排名最前的 EDU 并显示 EDU 堆栈信息
- 示例 17: 显示代理程序事件度量
- 示例 18: 显示扩展数据块移动状态
为了提高可读性,从 db2cmd 命令输出摘录了示例中显示的结果文本。
示例 1:诊断锁定等待
Locks:
TranHdl Lockname Type Mode Sts Owner Dur HldCnt Att ReleaseFlg
3 00020002000000040000000052 Row ..X G 3 1 0 0x0000 0x40000000
2 00020002000000040000000052 Row ..X W* 2 1 0 0x0000 0x40000000
对于使用 -db
数据库名称选项指定的数据库,开头的结果会显示该数据库的锁定。 此结果表明,TranHdl 2 正在等待 TranHdl 3 挂起的锁定。Transactions:
AppHandl [nod-index] TranHdl Locks State Tflag Tflag2 Firstlsn Lastlsn Firstlso Lastlso LogSpace SpaceReserved TID AxRegCnt GXID
11 [000-00011] 2 4 READ 0x00000000 0x00000000 0x000000000000 0x000000000000 0x000000000000 0x000000000000 0 0 0x0000000000B7 1 0
12 [000-00012] 3 4 WRITE 0x00000000 0x00000000 0x00000002AC04 0x00000002AC04 0x000000FA000C 0x000000FA000C 113 154 0x0000000000B8 1 0您会发现 TranHdl 2
与 AppHandl 11 相关联,而 TranHdl 3 与 AppHandl 12 相关联。Applications:
AppHandl [nod-index] NumAgents CoorPid Status C-AnchID C-StmtUID L-AnchID L-StmtUID Appid
12 [000-00012] 1 1073336 UOW-Waiting 0 0 17 1 *LOCAL.burford.060303225602
11 [000-00011] 1 1040570 UOW-Executing 17 1 94 1 *LOCAL.burford.060303225601我们可以看到 AppHandl 12 最近一次运行动态语句 17 和 1。 AppHandl 11 当前正在运行动态语句 17 和 1 以及最近一次运行的语句 94 和 1。Dynamic SQL Statements:
AnchID StmtUID NumEnv NumVar NumRef NumExe Text
17 1 1 1 2 2 update pdtest set c1 = 5
94 1 1 1 2 2 set lock mode to wait 1您会发现,文本列显示与锁定超时相关联的 SQL 语句。示例 2:使用 -wlocks 参数来捕获正在等待的所有锁定
venus@boson:/home/venus =>db2pd -wlocks -db pdtest
Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:22
Locks being waited on :
AppHandl TranHdl Lockname Type Mode Conv Sts CoorEDU AppName AuthID AppID
47 8 00020004000000000840000652 Row ..X G 5160 db2bp VENUS *LOCAL.venus.071207213730
46 2 00020004000000000840000652 Row .NS W 5913 db2bp VENUS *LOCAL.venus.071207213658示例 3:显示锁定的表名和模式名称
db2pd -locks showlocks 命令显示应用程序持有的锁的表名和模式名。 可使用此信息来诊断包含应用程序锁定的表和模式。 TableNm
列和模式名称中显示的表名会显示在 SchemaNm 列中,如以下输出中所示:Database Member 0 -- Database PDTEST -- Active -- Up 0 days 00:00:10 -- Date 2012-11-06-10.57.18.025767
Locks:
Address TranHdl Lockname Type Mode Sts Owner Dur HoldCount Att ReleaseFlg rrIID TableNm SchemaNm
0x00002AAAFFFA5F68 3 02000400000020000000000062 MdcBlockLock ..X G 3 1 0 0x00200000 0x40000000 0 T1 YUQZHANG 02000400000020000000000062 SQLP_MDCBLOCK (obj={2;4}, bid=d(0;32;0), x0000200000000000)
0x00002AAAFFFA7198 3 41414141414A4863ADA1ED24C1 PlanLock ..S G 3 1 0 0x00000000 0x40000000 0 N/A N/A 41414141414A4863ADA1ED24C1 SQLP_PLAN ({41414141 63484A41 24EDA1AD}, loading=0)db2pd -wlocks detail 命令来显示正在等待的锁定的表名、模式名称和应用程序节点,如以下输出中所示。Database Member 0 -- Database PDTEST -- Active -- Up 0 days 00:00:35 -- Date 2012-11-06-11.11.32.403994
Locks being waited on :
AppHandl [nod-index] TranHdl Lockname Type Mode Conv Sts CoorEDU AppName AuthID AppID TableNm SchemaNm AppNode
19 [000-00019] 3 02000400000000000000000054 TableLock ..X G 18 db2bp YUQZHANG *LOCAL.yuqzhang.121106161112 PDTEST YUQZHANG hotel71
21 [000-00021] 15 02000400000000000000000054 TableLock .IS W 45 db2bp YUQZHANG *LOCAL.yuqzhang.121106161114 PDTEST YUQZHANG hotel71 示例 4:使用 -apinfo 参数来捕获有关锁定所有者和锁定等待者的详细运行时信息
venus@boson:/home/venus =>db2pd -apinfo 47 -db pdtest
Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:30
Application :
Address : 0x0780000001676480
AppHandl [nod-index] : 47 [000-00047]
Application PID : 876558
Application Node Name : boson
IP Address: n/a
Connection Start Time : (1197063450)Fri Dec 7 16:37:30 2007
Client User ID : venus
System Auth ID : VENUS
Coordinator EDU ID : 5160
Coordinator Partition : 0
Number of Agents : 1
Locks timeout value : 4294967294 seconds
Locks Escalation : No
Workload ID : 1
Workload Occurrence ID : 2
Trusted Context : n/a
Connection Trust Type : non trusted
Role Inherited : n/a
Application Status : UOW-Waiting
Application Name : db2bp
Application ID : *LOCAL.venus.071207213730
ClientUserID : n/a
ClientWrkstnName : n/a
ClientApplName : n/a
ClientAccntng : n/a
List of inactive statements of current UOW :
UOW-ID : 2
Activity ID : 1
Package Schema : NULLID
Package Name : SQLC2G13
Package Version :
Section Number : 203
SQL Type : Dynamic
Isolation : CS
Statement Type : DML, Insert/Update/Delete
Statement : insert into pdtest values 99
venus@boson:/home/venus =>db2pd -apinfo 46 -db pdtest
Database Partition 0 -- Database PDTEST -- Active -- Up 0 days 00:01:39
Application :
Address : 0x0780000000D77A60
AppHandl [nod-index] : 46 [000-00046]
Application PID : 881102
Application Node Name : boson
IP Address: n/a
Connection Start Time : (1197063418)Fri Dec 7 16:36:58 2007
Client User ID : venus
System Auth ID : VENUS
Coordinator EDU ID : 5913
Coordinator Partition : 0
Number of Agents : 1
Locks timeou t value : 4294967294 seconds
Locks Escalation : No
Workload ID : 1
Workload Occurrence ID : 1
Trusted Context : n/a
Connection Trust Type : non trusted
Role Inherited : n/a
Application Status : Lock-wait
Application Name : db2bp
Application ID : *LOCAL.venus.071207213658
ClientUserID : n/a
ClientWrkstnName : n/a
ClientApplName : n/a
ClientAccntng : n/a
List of active statements :
*UOW-ID : 3
Activity ID : 1
Package Schema : NULLID
Package Name : SQLC2G13
Package Version :
Section Number : 201
SQL Type : Dynamic
Isolation : CS
Statement Type : DML, Select (blockable)
Statement : select * from pdtest
示例 5:在考虑锁定问题时使用调出脚本
Lock Timeout Caught
Thu Feb 17 01:40:04 EST 2006
Instance DB2
Database: SAMPLE
Partition Number: 0
PID: 940
TID: 2136
Function: sqlplnfd
Component: lock manager
Probe: 999
Timestamp: 2006-02-17-01.40.04.106000
AppID: *LOCAL.DB2...
AppHdl:
...
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:06:53
Locks:
Address TranHdl Lockname Type Mode Sts Owner Dur HldCnt Att Rlse
0x402C6B30 3 00020003000000040000000052 Row ..X W* 3 1 0 0 0x40在输出中,W*
指示发生超时的锁定。 在本例中,已发生锁定等待。 当锁定转换为更高级的方式时,也会发生锁定超时。 这由输出中的
C* 指示。
可以使用 db2cos 文件中的其他 db2pd 命令所提供的输出将结果映射至事务、应用程序、代理程序甚至 SQL 语句。 可以缩小输出范围或使用其他命令来收集需要的信息。 例如,可以使用 db2pd -locks wait 参数以便只打印处于等待状态的锁定。 另外,还可以使用 -app 和 -agent 参数。
示例 6:将应用程序映射至动态 SQL 语句
db2pd -applications -dynamic 命令报告动态 SQL 语句的当前和最后一个锚点标识和语句唯一标识。 这允许直接从应用程序映射至动态 SQL 语句。
Applications:
Address AppHandl [nod-index] NumAgents CoorPid Status
0x00000002006D2120 780 [000-00780] 1 10615 UOW-Executing
C-AnchID C-StmtUID L-AnchID L-StmtUID Appid
163 1 110 1 *LOCAL.burford.050202200412
Dynamic SQL Statements:
Address AnchID StmtUID NumEnv NumVar NumRef NumExe Text
0x0000000220A02760 163 1 2 2 2 1 CREATE VIEW MYVIEW
0x0000000220A0B460 110 1 2 2 2 1 CREATE VIEW YOURVIEW
示例 7:监视内存使用情况
当您尝试了解内存使用情况时,db2pd -memblock 命令非常有用,如以下样本输出所示:
All memory blocks in DBMS set.
Address PoolID PoolName BlockAge Size(Bytes) I LOC File
0x0780000000740068 62 resynch 2 112 1 1746 1583816485
0x0780000000725688 62 resynch 1 108864 1 127 1599127346
0x07800000001F4348 57 ostrack 6 5160048 1 3047 698130716
0x07800000001B5608 57 ostrack 5 240048 1 3034 698130716
0x07800000001A0068 57 ostrack 1 80 1 2970 698130716
0x07800000001A00E8 57 ostrack 2 240 1 2983 698130716
0x07800000001A0208 57 ostrack 3 80 1 2999 698130716
0x07800000001A0288 57 ostrack 4 80 1 3009 698130716
0x0780000000700068 70 apmh 1 360 1 1024 3878879032
0x07800000007001E8 70 apmh 2 48 1 914 1937674139
0x0780000000700248 70 apmh 3 32 1 1000 1937674139
...
接下来是已排序的“性能池”输出:
Memory blocks sorted by size for ostrack pool:
PoolID PoolName TotalSize(Bytes) TotalCount LOC File
57 ostrack 5160048 1 3047 698130716
57 ostrack 240048 1 3034 698130716
57 ostrack 240 1 2983 698130716
57 ostrack 80 1 2999 698130716
57 ostrack 80 1 2970 698130716
57 ostrack 80 1 3009 698130716
Total size for ostrack pool: 5400576 bytes
Memory blocks sorted by size for apmh pool:
PoolID PoolName TotalSize(Bytes) TotalCount LOC File
70 apmh 40200 2 121 2986298236
70 apmh 10016 1 308 1586829889
70 apmh 6096 2 4014 1312473490
70 apmh 2516 1 294 1586829889
70 apmh 496 1 2192 1953793439
70 apmh 360 1 1024 3878879032
70 apmh 176 1 1608 1953793439
70 apmh 152 1 2623 1583816485
70 apmh 48 1 914 1937674139
70 apmh 32 1 1000 1937674139
Total size for apmh pool: 60092 bytes
...
最后一部分输出对整个内存集的内存使用者进行排序:
All memory consumers in DBMS memory set:
PoolID PoolName TotalSize(Bytes) %Bytes TotalCount %Count LOC File
57 ostrack 5160048 71.90 1 0.07 3047 698130716
50 sqlch 778496 10.85 1 0.07 202 2576467555
50 sqlch 271784 3.79 1 0.07 260 2576467555
57 ostrack 240048 3.34 1 0.07 3034 698130716
50 sqlch 144464 2.01 1 0.07 217 2576467555
62 resynch 108864 1.52 1 0.07 127 1599127346
72 eduah 108048 1.51 1 0.07 174 4210081592
69 krcbh 73640 1.03 5 0.36 547 4210081592
50 sqlch 43752 0.61 1 0.07 274 2576467555
70 apmh 40200 0.56 2 0.14 121 2986298236
69 krcbh 32992 0.46 1 0.07 838 698130716
50 sqlch 31000 0.43 31 2.20 633 3966224537
50 sqlch 25456 0.35 31 2.20 930 3966224537
52 kerh 15376 0.21 1 0.07 157 1193352763
50 sqlch 14697 0.20 1 0.07 345 2576467555
...
您还可以在 UNIX 和 Linux 操作系统上报告专用内存的内存块。 例如,如果运行 db2pd -memb pid=159770,那么将生成类似如下的结果:
All memory blocks in Private set.
PoolID PoolName BlockAge Size(Bytes) I LOC File
88 private 1 2488 1 172 4283993058
88 private 2 1608 1 172 4283993058
88 private 3 4928 1 172 4283993058
88 private 4 7336 1 172 4283993058
88 private 5 32 1 172 4283993058
88 private 6 6728 1 172 4283993058
88 private 7 168 1 172 4283993058
88 private 8 24 1 172 4283993058
88 private 9 408 1 172 4283993058
88 private 10 1072 1 172 4283993058
88 private 11 3464 1 172 4283993058
88 private 12 80 1 172 4283993058
88 private 13 480 1 1534 862348285
88 private 14 480 1 1939 862348285
88 private 80 65551 1 1779 4231792244
Total set size: 94847 bytes
Memory blocks sorted by size:
PoolID PoolName TotalSize(Bytes) TotalCount LOC File
88 private 65551 1 1779 4231792244
88 private 28336 12 172 4283993058
88 private 480 1 1939 862348285
88 private 480 1 1534 862348285
Total set size: 94847 bytes
示例 8:确定哪个应用程序耗尽表空间
通过使用 db2pd -tcbstats 命令,可以确定对表执行的插入操作次数。 以下示例显示用户定义的全局临时表(称为 TEMP1)的样本信息:
TCB Table Information:
TbspaceID TableID PartID MasterTbs MasterTab TableName SchemaNm ObjClass DataSize LfSize LobSize XMLSize
3 2 n/a 3 2 TEMP1 SESSION Temp 966 0 0 0
TCB Table Stats:
TableName Scans UDI PgReorgs NoChgUpdts Reads FscrUpdates Inserts Updates Deletes OvFlReads OvFlCrtes
TEMP1 0 0 0 0 0 0 43968 0 0 0 0
然后,可以使用 db2pd -tablespaces 命令获取表空间 3 的信息。 样本输出如下所示:
Tablespace 3 Configuration:
Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC RSE NumCntrs MaxStripe LastConsecPg Name
DMS UsrTmp 4096 32 Yes 32 1 1 On Yes 1 0 31 TEMPSPACE2
Tablespace 3 Statistics:
TotalPgs UsablePgs UsedPgs PndFreePgs FreePgs HWM State MinRecTime NQuiescers
5000 4960 1088 0 3872 1088 0x00000000 0 0
Tablespace 3 Autoresize Statistics:
AS AR InitSize IncSize IIP MaxSize LastResize LRF
No No 0 0 No 0 None No
Containers:
ContainNum Type TotalPgs UseablePgs StripeSet Container
0 File 5000 4960 0 /home/db2inst1/tempspace2a
MinRecTime 列返回一个值,此值为 UTC 时区格式的 UNIX 时间戳记。 要将值转换为 GMT 时区格式,可以使用 Db2 时间戳记函数。 例如,如果 MinRecTime 返回值 1369626329,那么要将此值转换为 GMT 格式,请运行以下语句:db2 "values timestamp('1970-01-01-00.00.00') + 1369626329 seconds"此查询将返回 GMT 值 2013-05-27-03.45.29.000000。可查看是否在“已启用可回收空间 (RSE)”列中启用了可回收空间功能。 FreePgs
列表明空间已耗尽。 因为可用页数值下降,所以可用空间减少。 另请注意,FreePgs
值加上 UsedPgs 值将等于 UsablePgs 值。
在了解这一点之后,可以通过运行 db2pd -db sample -dyn 来确定正在使用表 TEMP1 的动态 SQL 语句:
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:13:06
Dynamic Cache:
Current Memory Used 1022197
Total Heap Size 1271398
Cache Overflow Flag 0
Number of References 237
Number of Statement Inserts 32
Number of Statement Deletes 13
Number of Variation Inserts 21
Number of Statements 19
Dynamic SQL Statements:
AnchID StmtUID NumEnv NumVar NumRef NumExe Text
78 1 2 2 3 2 declare global temporary table temp1 (c1 char(6)) not logged
253 1 1 1 24 24 insert into session.temp1 values('TEST')
最后,可以通过运行 db2pd -db sample -app 将以上输出中的信息映射到应用程序输出,以便确定应用程序。
Applications:
AppHandl [nod-index] NumAgents CoorPid Status C-AnchID C-StmtUID
501 [000-00501] 1 11246 UOW-Waiting 0 0
L-AnchID L-StmtUID Appid
253 1 *LOCAL.db2inst1.050202160426
可以使用用于标识动态 SQL
语句的锚点标识(AnchID)值来标识相关联的应用程序。 结果表明,最后一个锚点标识(L-AnchID)值与锚点标识(AnchID)值相同。 一次运行
db2pd 产生的结果将在下一次运行 db2pd
时使用。
Rowsread
列)和写入的行数(Rowswrtn 列)。 这些值将显示应用程序已完成的部分及尚未完成的部分,如以下样本输出所示:AppHandl [nod-index] AgentPid Priority Type DBName
501 [000-00501] 11246 0 Coord SAMPLE
State ClientPid Userid ClientNm Rowsread Rowswrtn LkTmOt
Inst-Active 26377 db2inst1 db2bp 22 9588 NotSet您可以将运行 db2pd -agent 命令生成的 AppHandl 和 AgentPid 的值映射到运行 db2pd
-app 命令生成的 AppHandl 和 CoorPiid 的相应值。
如果您怀疑内部临时表占满了表空间,那么这些步骤会稍有不同。 但是,仍然可以使用 db2pd -tcbstats 来标识具有最大插入数目的表。 以下是隐式临时表的样本信息:
TCB Table Information:
Address TbspaceID TableID PartID MasterTbs MasterTab TableName SchemaNm ObjClass DataSize ...
0x0780000020CC0D30 1 2 n/a 1 2 TEMP (00001,00002) <30> <JMC Temp 2470 ...
0x0780000020CC14B0 1 3 n/a 1 3 TEMP (00001,00003) <31> <JMC Temp 2367 ...
0x0780000020CC21B0 1 4 n/a 1 4 TEMP (00001,00004) <30> <JMC Temp 1872 ...
TCB Table Stats:
Address TableName Scans UDI PgReorgs NoChgUpdts Reads FscrUpdates Inserts ...
0x0780000020CC0D30 TEMP (00001,00002) 0 0 0 0 0 0 43219 ...
0x0780000020CC14B0 TEMP (00001,00003) 0 0 0 0 0 0 42485 ...
0x0780000020CC21B0 TEMP (00001,00004) 0 0 0 0 0 0 0 ...
在此示例中,使用命名约定 TEMP (TbspaceID, TableID)
的表中有大量插入。 这些是隐式临时表。 SchemaNm 列中的值的命名约定为
AppHandl 的值与 SchemaNm
的值并置,这使得它能够标识正在工作的应用程序。
然后,您可以将该信息映射到 db2pd -tablespaces 的输出以查看表空间 1 的已用空间。 请注意以下输出中的表空间统计信息中的 UsedPgs 和 UsablePgs 值之间的关系:
Tablespace Configuration:
Id Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC RSE NumCntrs MaxStripe LastConsecPg Name
1 SMS SysTmp 4096 32 Yes 320 1 1 On Yes 10 0 31 TEMPSPACE1
Tablespace Statistics:
Id TotalPgs UsablePgs UsedPgs PndFreePgs FreePgs HWM State MinRecTime NQuiescers
1 6516 6516 6516 0 0 0 0x00000000 0 0
Tablespace Autoresize Statistics:
Id AS AR InitSize IncSize IIP MaxSize LastResize LRF
1 No No 0 0 No 0 None No
Containers:
...
然后,可以使用命令 db2pd -app 标识应用程序句柄 30 和 31(因为它们出现在 -tcbstats 输出中):
Applications:
AppHandl [nod-index] NumAgents CoorPid Status C-AnchID C-StmtUID L-AnchID L-StmtUID Appid
31 [000-00031] 1 4784182 UOW-Waiting 0 0 107 1 *LOCAL.db2inst1.051215214142
30 [000-00030] 1 8966270 UOW-Executing 107 1 107 1 *LOCAL.db2inst1.051215214013
最后,将以上输出中的信息映射到通过运行 db2pd -dyn 命令获取的动态 SQL 输出:
Dynamic SQL Statements:
AnchID StmtUID NumEnv NumVar NumRef NumExe Text
107 1 1 1 43 43 select c1, c2 from test group by c1,c2
示例 9:监视恢复
如果运行命令
db2pd -recovery,那么输出将显示多个计数器,这些计数器可用于验证是否正在执行恢复,如以下样本输出所示。 Current Log 和 Current LSO 值提供日志位置。 CompletedWork 值是迄今为止已完成的字节数。
Recovery:
Recovery Status 0x00000401
Current Log S0000005.LOG
Current LSN 0000001F07BC
Current LSO 000002551BEA
Job Type ROLLFORWARD RECOVERY
Job ID 7
Job Start Time (1107380474) Wed Feb 2 16:41:14 2005
Job Description Database Rollforward Recovery
Invoker Type User
Total Phases 2
Current Phase 1
Progress:
Address PhaseNum Description StartTime CompletedWork TotalWork
0x0000000200667160 1 Forward Wed Feb 2 16:41:14 2005 2268098 bytes Unknown
0x0000000200667258 2 Backward NotStarted 0 bytes Unknown
示例 10:确定事务正在使用的资源量
如果运行命令
db2pd -transactions,那么输出会显示锁定数、第一个日志序号 (LSN)、最后一个
LSN、第一个 LSO、最后一个 LSO、已使用的日志空间量和保留的空间。 该输出还显示应用程序落实的总次数以及应用程序回滚的总次数。 知道应用程序落实和回滚的总次数对于了解事务行为会有用。 以下是 db2pd -transactions 命令的样本输出。
Transactions:
Address AppHandl [nod-index] TranHdl Locks State Tflag
0x000000022026D980 797 [000-00797] 2 108 WRITE 0x00000000
0x000000022026E600 806 [000-00806] 3 157 WRITE 0x00000000
0x000000022026F280 807 [000-00807] 4 90 WRITE 0x00000000
Tflag2 Firstlsn Lastlsn Firstlso Lastlso
0x00000000 0x0000001A4212 0x0000001C2022 0x000001072262 0x0000010B2C8C
0x00000000 0x000000107320 0x0000001S3462 0x000001057574 0x0000010B3340
0x00000000 0x0000001BC00C 0x0000001X2F03 0x00000107CF0C 0x0000010B2FDE
LogSpace SpaceReserved TID AxRegCnt GXID
4518 95450 0x000000000451 1 0
6576 139670 0x0000000003E0 1 0
3762 79266 0x000000000472 1 0
Total Application commits : 23
Total Application rollbacks : 39
示例 11:监视日志使用情况
命令 db2pd -logs 对于监视数据库的日志使用情况很有用。 通过使用Pages Written 值 (如以下样本输出中所示) ,您可以确定日志使用率是否在增加:
Logs:
Current Log Number 2
Pages Written 846
Cur Commit Disk Log Reads 0
Cur Commit Total Log Reads 0
Method 1 Archive Status Success
Method 1 Next Log to Archive 2
Method 1 First Failure n/a
Method 2 Archive Status Success
Method 2 Next Log to Archive 2
Method 2 First Failure n/a
Log Chain ID 0
Extraction Status n/a
Current Log to Extract n/a
Current LSO 28672000
Current LSN 0x00000022F032
Address StartLSN StartLSO State Size Pages Filename
0x000000023001BF58 0x00000022F032 0x000001B58000 0x00000000 1000 1000 S0000002.LOG
0x000000023001BE98 0x000000000000 0x000001F40000 0x00000000 1000 1000 S0000003.LOG
0x0000000230008F58 0x000000000000 0x000002328000 0x00000000 1000 1000 S0000004.LOG
- 如果最近的日志归档失败,那么
Archive Status将设置为值Failure。 如果存在正在进行的归档故障,那么将完全阻止对日志进行归档,Archive Status设置为值First Failure。 - 如果日志归档正在非常缓慢地进行,那么
Next Log to Archive值将低于Current Log Number值。 如果归档速度非常慢,那么可能表明活动日志的空间已耗尽,这将导致无法在数据库中进行任何数据更改。
示例 12:查看综合系统列表
如果不使用显示以下样本输出的 db2pd -sysplex 命令,那么报告综合系统 (sysplex) 列表的唯一方法是使用 DB2 跟踪。
Sysplex List:
Alias: HOST
Location Name: HOST1
Count: 1
IP Address Port Priority Connections Status PRDID
1.2.34.56 400 1 0 0
示例 13:生成堆栈跟踪
您可以针对 Windows 操作系统使用 db2pd -stack all 命令或针对 UNIX 操作系统使用 -stack 命令,以对当前数据库分区中的所有进程生成堆栈跟踪。 如果您怀疑某个进程或线程正在循环或正被挂起,那么可能要反复使用此命令。
您可以通过发出命令 db2pd -stack eduid来获取特定引擎可分派单元 (EDU) 的当前调用堆栈,如以下示例中所示:
Attempting to dump stack trace for eduid 137.
See current DIAGPATH for trapfile.
如果需要所有 Db2 进程的调用堆栈,请使用命令 db2pd -stack all,例如 (在 Windows 操作系统上):
Attempting to dump all stack traces for instance.
See current DIAGPATH for trapfiles.
如果您正在使用具有多个物理节点的分区数据库环境,那么可以使用命令 db2_all "; db2pd -stack all"从所有分区获取信息。 但是,如果分区是同一机器上的所有逻辑分区,那么使用 db2pd -alldbp -stacks 时的速度会更快。
您还可以使用 dumpdir 参数将 db2sysc 进程的 db2pdb -stacks 命令输出重定向到特定目录路径。 可以使用 timeout 参数仅在特定持续时间内重定向输出。 例如,要将 db2sysc 进程中所有 EDU 的堆栈跟踪的输出重定向至 /home/waleed/mydir 并持续 30 秒,请发出以下命令:
db2pd -alldbp -stack all dumpdir=/home/waleed/mydir timeout=30
示例 14:查看数据库分区的实例内存统计信息
db2pd -dbptnmem 命令显示 DB2 服务器当前消耗的内存量,并在较高级别显示使用这些内存的服务器区域。 实例内存使用量不仅包括实际系统耗用/落实的内存,还包括已配置但可能未使用/落实的限额。 因此, Db2 实例的内存使用情况统计信息无法与操作系统监视工具报告的内存使用情况统计信息直接进行比较。
以下示例显示在 AIX® 机器上运行 db2pd -dbptnmem 的输出:
Database Partition Memory Controller Statistics
Controller Automatic: Y
Memory Limit: 122931408 KB
Current usage: 651008 KB
HWM usage: 651008 KB
Cached memory: 231296 KB
- 控制器自动
- 指示内存控制器设置。 设置为“Y”(instance_memory 配置参数设置为 AUTOMATIC)时,仅当产品许可证包含内存限制时,才会强制实施计算的限制。 设置为“N”时,会强制实施声明的限制。
- 内存限制
- 如果强制实施了实例内存限制,那么 instance_memory 配置参数的值是可以耗用的实例内存的上限。
- 当前使用率
- 服务器当前耗用的实例内存量。
- HWM 使用量
- 自激活数据库分区(在 db2start 命令运行时)以来消耗的内存高水位标记(HWM)或实例内存使用量峰值。
- 高速缓存的内存
- 当前使用量中可能已重新声明的内存量。 这适用于以下情况:实例内存使用量将达到强制实施的限制,或者可能需要降低一个或多个使用者的高速缓存使用量,以允许其他某个使用者的高速缓存使用量增长。
以下是在 AIX 操作系统上运行 db2pd -dbptnmem 的样本输出的延续:
Individual Memory Consumers:
Name Mem Used (KB) HWM Used (KB) Cached (KB)
===========================================================
APPL-DBONE 160000 160000 159616
DBMS-name 38528 38528 3776
FMP_RESOURCES 22528 22528 0
PRIVATE 13120 13120 740
FCM_RESOURCES 10048 10048 0
LCL-p606416 128 128 0
DB-DBONE 406656 406656 67200
使用者以及他们所使用的实例内存总量。 各列的描述为如下所示:
- 姓名
- 实例内存使用者的简短专有名称,如以下名称:
- APPL-dbname
- 为数据库 dbname 耗用的应用程序内存
- DBMS-名称
- 全局数据库管理器内存需求
- FMP_RESOURCES
- 与 db2fmps 进行通信所需的内存
- PRIVATE
- 其他专用内存需求
- FCM_RESOURCES
- 快速通信管理器资源
- LCL-pid
- 用于与本地应用程序进行通信的内存段
- 数据库-dbname
- 为数据库 dbname 耗用的数据库内存
- 使用的内存(KB)
- 当前分配给使用者的实例内存量
- 使用的 HWM(KB)
- 使用者已耗用的高水位标记(HWM)或实例内存峰值
- 已高速缓存(KB)
- 在“使用的内存 (KB)”中,可能已为此使用者重新声明的实例内存量。
示例 15:监视索引重组的进度
- db2pd -reorgs index 命令报告分区索引的索引重组进度(FP1 引入了仅对非分区索引的提供支持)。
- db2pd -reorgs index 命令支持在分区级别(也就是在单个分区的重组期间)监视索引重组。
- 非分区索引和分区索引的重组进度在不同的输出中报告。 一个输出显示非分区索引的重组进度,以下输出显示了每个表分区上分区索引的重组进度;在每个输出中仅报告一个分区的索引重组统计信息。
- 将首先处理分分区索引,然后以串行方式处理分区索引。
- db2pd -reorgs index 命令在分区索引的输出中显示以下附加信息:
- MaxPartition-正在处理的表的分区总数。 对于分区级别重组,MaxPartition将始终具有值 1 ,因为仅重组单个分区。
- PartitionID-正在处理的分区的数据分区标识。
Index Reorg Stats:
Retrieval Time: 02/08/2010 23:04:21
TbspaceID: -6 TableID: -32768
Schema: ZORAN TableName: BIGRPT
Access: Allow none
Status: Completed
Start Time: 02/08/2010 23:03:55 End Time: 02/08/2010 23:04:04
Total Duration: 00:00:08
Prev Index Duration: -
Cur Index Start: -
Cur Index: 0 Max Index: 2 Index ID: 0
Cur Phase: 0 ( - ) Max Phase: 0
Cur Count: 0 Max Count: 0
Total Row Count: 750000Retrieval Time: 02/08/2010 23:04:21
TbspaceID: 2 TableID: 5
Schema: ZORAN TableName: BIGRPT
PartitionID: 0 MaxPartition: 2
Access: Allow none
Status: Completed
Start Time: 02/08/2010 23:04:04 End Time: 02/08/2010 23:04:08
Total Duration: 00:00:04
Prev Index Duration: -
Cur Index Start: -
Cur Index: 0 Max Index: 2 Index ID: 0
Cur Phase: 0 ( - ) Max Phase: 0
Cur Count: 0 Max Count: 0
Total Row Count: 375000Retrieval Time: 02/08/2010 23:04:21
TbspaceID: 2 TableID: 6
Schema: ZORAN TableName: BIGRPT
PartitionID: 1 MaxPartition: 2
Access: Allow none
Status: Completed
Start Time: 02/08/2010 23:04:08 End Time: 02/08/2010 23:04:12
Total Duration: 00:00:04
Prev Index Duration: -
Cur Index Start: -
Cur Index: 0 Max Index: 2 Index ID: 0
Cur Phase: 0 ( - ) Max Phase: 0
Cur Count: 0 Max Count: 0
Total Row Count: 375000示例 16:显示耗费处理器时间最多的几个 EDU 并显示 EDU 堆栈信息
如果发出带有 -edus 参数选项的 db2pd 命令,那么输出将列出所有引擎可分派单元 (EDU)。 可以在您指定的详细程度级别(例如,在实例级别或成员级别)返回 EDU 的输出。 仅在 Linux 和 UNIX 操作系统上,还可以指定 interval 参数子选项,以便生成所有 EDU 的两个快照,并以您指定的时间间隔分隔。 指定 interval 参数时,输出中的两个附加列指示处理器用户时间增量 (USR DELTA列) 和处理器系统时间增量 (SYS DELTA列)。
在以下示例中,将在 5 秒的时间间隔内给出处理器用户时间和处理器系统时间的增量:
$ db2pd -edus interval=5
Database Partition 0 -- Active -- Up 0 days 00:53:29 -- Date 06/04/2010 03:34:59
List of all EDUs for database partition 0
db2sysc PID: 1249522
db2wdog PID: 2068678
EDU ID TID Kernel TID EDU Name USR SYS USR DELTA SYS DELTA
===================================================================================================
6957 6957 13889683 db2agntdp (SAMPLE ) 0 58.238506 0.820466 1.160726 0.014721
6700 6700 11542589 db2agent (SAMPLE) 0 52.856696 0.754420 1.114821 0.015007
5675 5675 4559055 db2agntdp (SAMPLE ) 0 60.386779 0.854234 0.609233 0.014304
3088 3088 13951225 db2agntdp (SAMPLE ) 0 80.073489 2.249843 0.499766 0.006247
3615 3615 2887875 db2loggw (SAMPLE) 0 0.939891 0.410493 0.011694 0.004204
4900 4900 6344925 db2pfchr (SAMPLE) 0 1.748413 0.014378 0.014343 0.000103
7986 7986 13701145 db2agntdp (SAMPLE ) 0 1.410225 0.025900 0.003636 0.000074
2571 2571 8503329 db2ipccm 0 0.251349 0.083787 0.002551 0.000857
7729 7729 14168193 db2agntdp (SAMPLE ) 0 1.717323 0.029477 0.000998 0.000038
7472 7472 11853991 db2agnta (SAMPLE) 0 1.860115 0.032926 0.000860 0.000012
3358 3358 2347127 db2loggr (SAMPLE) 0 0.151042 0.184726 0.000387 0.000458
515 515 13820091 db2aiothr 0 0.405538 0.312007 0.000189 0.000178
7215 7215 2539753 db2agntdp (SAMPLE ) 0 1.165350 0.019466 0.000291 0.000008
6185 6185 2322517 db2wlmd (SAMPLE) 0 0.061674 0.034093 0.000169 0.000100
6442 6442 2756793 db2evmli (DB2DETAILDEADLOCK) 0 0.072142 0.052436 0.000092 0.000063
4129 4129 15900799 db2glock (SAMPLE) 0 0.013239 0.000741 0.000064 0.000001
2 2 11739383 db2alarm 0 0.036904 0.028367 0.000009 0.000009
4386 4386 13361367 db2dlock (SAMPLE) 0 0.015653 0.001281 0.000014 0.000003
1029 1029 15040579 db2fcms 0 0.041929 0.016598 0.000010 0.000004
5414 5414 14471309 db2pfchr (SAMPLE) 0 0.000093 0.000002 0.000000 0.000000
258 258 13656311 db2sysc 0 8.369967 0.263539 0.000000 0.000000
5157 5157 7934145 db2pfchr (SAMPLE) 0 0.027598 0.000177 0.000000 0.000000
1543 1543 2670647 db2fcmr 0 0.004191 0.000079 0.000000 0.000000
1286 1286 8417339 db2extev 0 0.000312 0.000043 0.000000 0.000000
2314 2314 14360813 db2licc 0 0.000371 0.000051 0.000000 0.000000
5928 5928 3137537 db2taskd (SAMPLE) 0 0.004903 0.000572 0.000000 0.000000
3872 3872 2310357 db2lfr (SAMPLE) 0 0.000126 0.000007 0.000000 0.000000
4643 4643 11694287 db2pclnr (SAMPLE) 0 0.000094 0.000002 0.000000 0.000000
1800 1800 5800175 db2extev 0 0.001212 0.002137 0.000000 0.000000
772 772 7925817 db2thcln 0 0.000429 0.000072 0.000000 0.000000
2057 2057 6868993 db2pdbc 0 0.002423 0.001603 0.000000 0.000000
2828 2828 10866809 db2resync 0 0.016764 0.003098 0.000000 0.000000
要仅提供有关耗费处理器时间最多的几个 EDU 的信息以及要减少返回的输出数量,您可以进一步包括 top 参数选项。 在以下示例中,将仅返回前 5 个 EDU,时间间隔为 5 秒。 还将返回堆栈信息,可以单独在由 DUMPDIR 指定的目录路径(缺省为 diagpath)中找到此信息。
$ db2pd -edus interval=5 top=5 stacks
Database Partition 0 -- Active -- Up 0 days 00:54:00 -- Date 06/04/2010 03:35:30
List of all EDUs for database partition 0
db2sysc PID: 1249522
db2wdog PID: 2068678
EDU ID TID Kernel TID EDU Name USR SYS USR DELTA SYS DELTA
===============================================================================================================
3358 3358 2347127 db2loggr (SAMPLE) 0 0.154906 0.189223 0.001087 0.001363
3615 3615 2887875 db2loggw (SAMPLE) 0 0.962744 0.419617 0.001779 0.000481
515 515 13820091 db2aiothr 0 0.408039 0.314045 0.000658 0.000543
258 258 13656311 db2sysc 0 8.371388 0.264812 0.000653 0.000474
6700 6700 11542589 db2agent (SAMPLE) 0 54.814420 0.783323 0.000455 0.000310
$ ls -ltr
total 552
drwxrwxr-t 2 vbmithun build 256 05-31 09:59 events/
drwxrwxr-t 2 vbmithun build 256 06-04 03:17 stmmlog/
-rw-r--r-- 1 vbmithun build 46413 06-04 03:35 1249522.3358.000.stack.txt
-rw-r--r-- 1 vbmithun build 22819 06-04 03:35 1249522.3615.000.stack.txt
-rw-r--r-- 1 vbmithun build 20387 06-04 03:35 1249522.515.000.stack.txt
-rw-r--r-- 1 vbmithun build 50426 06-04 03:35 1249522.258.000.stack.txt
-rw-r--r-- 1 vbmithun build 314596 06-04 03:35 1249522.6700.000.stack.txt
-rw-r--r-- 1 vbmithun build 94913 06-04 03:35 1249522.000.processObj.txt
示例 17:显示代理程序事件指标
db2pd 命令支持返回代理程序的事件指标。 如果您需要确定某个代理程序在特定时间段是否更改了状态,那么将事件选项与 -agents 参数一起使用。 返回的 AGENT_STATE_LAST_UPDATE_TIME(记号值)列显示上次由代理程序处理的事件已更改。 结合以前获得的 AGENT_STATE_LAST_UPDATE_TIME(记号值)值,您可以确定某个代理程序是否已移动到新任务,或在较长的时间段内它是否继续处理相同的任务。
db2pd -agents event
Database Partition 0 -- Active -- Up 0 days 03:18:52 -- Date 06/27/2011 11:47:10
Agents:
Current agents: 12
Idle agents: 0
Active coord agents: 10
Active agents total: 10
Pooled coord agents: 2
Pooled agents total: 2
AGENT_STATE_LAST_UPDATE_TIME(Tick Value) EVENT_STATE EVENT_TYPE EVENT_OBJECT EVENT_OBJECT_NAME
2011-06-27-14.44.38.859785(5622972377924968075) IDLE WAIT REQUEST n/a
示例 18:显示扩展数据块移动状态
db2pd -extentmovement -db
dbName 命令来显示表空间的扩展数据块移动状态。$ db2pd -extentmovement -db PDTEST
Database Member 0 -- Database PDTEST -- Active -- Up 0 days 00:04:33 -- Date 2012-10-26-11.19.52.056414
Extent Movement:
Address TbspName Current Last Moved Left TotalTime
0x00002AAB356D4BA0 DAVID 1168 1169 33 426 329636