当前位置:文档之家› 使用 db2pd 进行监视和故障诊断

使用 db2pd 进行监视和故障诊断

使用 db2pd 进行监视和故障诊断因为 db2pd 工具可从 DB2® 内存集合迅速返回即时信息,所以该工具可用于故障诊断。

该工具不需要获得任何锁存器或使用任何引擎资源就可以收集信息。

因此,在 db2pd 收集信息时,有可能(并且预计)会检索到正在更改的信息;这样,数据可能不是十分准确。

如果遇到正在更改的内存指针,可使用信号处理程序来防止 db2pd 异常终止。

这可能会导致输出中出现诸如以下的消息:“正在更改的数据结构已强制终止命令”。

虽然如此,该工具对于故障诊断却非常有用。

在不锁存的情况下收集信息有两个好处:检索速度更快并且不会争用引擎资源。

如果要在出现特定 SQLCODE、ZRC 代码或 ECF 代码时捕获关于数据库管理系统的信息,那么可以使用 db2pdcfg -catch 命令完成此操作。

捕获到错误时,将启动 db2cos(调出脚本)。

db2cos 文件可以自动改变,以便运行解决问题所需的任何 db2pd 命令、操作系统命令或任何其他命令。

在 UNIX® 和Linux™ 上,模板文件 db2cos 位于 sqllib/bin 中。

在 Windows® 操作系统上,db2cos 位于 $DB2PATH in 目录中。

以下是使用 db2pd 快速故障诊断的一组示例。

场景 1:诊断锁定等待使用 db2pd -db <database name> -locks -transactions -applications -dynamic 命令来获取下列结果:锁定:Address TranHdl Lockname Type Mode Sts Owner Dur HldCnt Att ReleaseFlg0x07800000202E5238 3 00020002000000040000000052 Row ..X G 3 1 0 0x00000x400000000x07800000202E4668 2 00020002000000040000000052 Row ..X W* 2 1 0 0x00000x40000000对于使用 -db 数据库名称选项指定的数据库,开头的结果会显示该数据库的锁定。

您会发现 TranHdl 2 正在等待 TranHdl 3 挂起的锁定。

事务:Address AppHandl [nod-index] TranHdl Locks StateTflag Tflag2 Firstlsn Lastlsn LogSpace SpaceReserved TID AxRegCnt GXID0x0780000020251B80 11 [000-00011] 2 4 READ 0x00000000 0x000000000x000000000000 0x000000000000 0 0 0x0000000000B7 1 00x0780000020252900 12 [000-00012] 3 4 WRITE 0x00000000 0x000000000x000000FA000C 0x000000FA000C 113 154 0x0000000000B8 1 0您会发现 TranHdl 2 与 AppHandl 11 相关联,而 TranHdl 3 与 AppHandl 12 相关联。

应用程序:Address AppHandl [nod-index] NumAgents CoorPid Status C-AnchID C-StmtUID L-AnchID L-StmtUID Appid0x07800000006879E0 12 [000-00012] 1 1073336 UOW-Waiting 0 0 17 1 *LOCAL.burford.0603032256020x0780000000685E80 11 [000-00011] 1 1040570 UOW-Executing17 1 94 1 *LOCAL.burford.060303225601您会发现 AppHandl 12 最后运行动态语句 17, 1。

ApplHandl 11 是当前正在运行的动态语句17, 1,而最后运行的语句是 94, 1。

动态 SQL 语句:Address AnchID StmtUID NumEnv NumVar NumRef NumExe Text0x07800000209FD800 17 1 1 1 2 2 update pdtest set c1 = 50x07800000209FCCC0 94 1 1 1 2 2 set lock mode to wait 1您会发现,文本列显示与锁定超时相关联的 SQL 语句。

场景 2:使用 -wlocks 选项捕获所有正在等待的锁定在下面的样本输出中,应用程序 1(AppHandl 47)正在执行插入操作,而应用程序 2(AppHandl 46)正在选择该表。

venus@boson:/home/venus =>db2pd -wlocks -db pdtest数据库分区 0 -- 数据库 PDTEST -- 活动 -- 正常运行 0 天 00:01:22正在等待的锁定:AppHandl [nod-index] TranHdl Lockname Type Mode Conv Sts CoorEDU AppName AuthID AppID47 [000-00047] 8 00020004000000000840000652Row ..X G 5160 db2bp VENUS *LOCAL.venus.0712********46 [000-00046] 2 00020004000000000840000652Row .NS W 5913 db2bp VENUS *LOCAL.venus.0712********场景 3:使用 -apinfo 选项捕获关于锁定所有者和锁定等待者的详细运行时信息下面的样本输出是在与上面的场景 2 相同的条件下捕获的。

venus@boson:/home/venus =>db2pd -apinfo 47 -db pdtest数据库分区 0 -- 数据库 PDTEST -- 活动 -- 正常运行 0 天 00:01:30应用程序:地址: 0x0780000001676480AppHandl [nod-index]: 47 [000-00047]应用程序 PID : 876558应用程序节点名: bosonIP 地址:不适用连接开始时间: (1197063450)Fri Dec 7 16:37:30 2007客户机用户标识: venus系统授权标识: VENUS协调程序 EDU 标识: 5160协调程序分区: 0代理程序数: 1锁定超时值: 4294967294 秒锁定升级:否工作负载标识: 1工作负载出现标识: 2可信上下文:不适用连接信任类型:不可信继承的角色:不适用应用程序状态: UOW 正在等待应用程序名称: db2bp应用程序标识: *LOCAL.venus.0712********当前 UOW 的不活动语句列表:UOW 标识: 2活动标识: 1程序包模式: NULLID程序包名称: SQLC2G13程序包版本:节号: 203SQL 类型:动态隔离: CS语句类型: DML 以及 Insert/Update/Delete语句: insert into pdtest values 99venus@boson:/home/venus =>db2pd -apinfo 46 -db pdtest数据库分区 0 -- 数据库 PDTEST -- 活动 -- 正常运行 0 天 00:01:39应用程序:地址: 0x0780000000D77A60AppHandl [nod-index]: 46 [000-00046]应用程序 PID: 881102应用程序节点名: bosonIP 地址:不适用连接开始时间: (1197063418)Fri Dec 7 16:36:58 2007客户机用户标识: venus系统授权标识: VENUS协调程序 EDU 标识: 5913协调程序分区: 0代理程序数: 1锁定超时值: 4294967294 秒锁定升级:否工作负载标识: 1工作负载出现标识: 1可信上下文:不适用连接信任类型:不可信继承的角色:不适用应用程序状态:锁定等待应用程序名称: db2bp应用程序标识: *LOCAL.venus.0712********活动语句列表:*UOW 标识: 3活动标识: 1程序包模式: NULLID程序包名称: SQLC2G13程序包版本:节号: 201SQL 类型:动态隔离: CS语句类型: DML 和 Select(可阻塞)语句: select * from pdtest场景 4:在考虑锁定问题时使用调出脚本查找 db2cos 输出文件。

该文件的位置由数据库管理器配置参数 DIAGPATH 控制。

输出文件的内容将随您在 db2cos 文件中输入的命令不同而不同。

当 db2cos 文件包含 db2pd -db sample -locks 命令时,提供的输出示例如下所示:捕获到锁定超时Thu Feb 17 01:40:04 EST 2006实例 DB2 数据库:SAMPLE分区号:0PID:940TID:2136函数:sqlplnfd组件:锁管理器探测点:999时间戳记:2006-02-17-01.40.04.106000AppID:*LOCAL.DB2...AppHdl:...数据库分区 0 -- 数据库 SAMPLE -- 活动 -- 正常运行 0 天 00:06:53锁定:Address TranHdl Lockname Type Mode Sts Owner Dur HldCnt Att Rlse0x402C6B30 3 00020003000000040000000052 Row ..X W* 3 1 0 0 0x40仅查找“W*”,因为这是经历超时的锁定。

当锁定转换为更高级的方式时,也会发生锁定超时。

在这种情况下,您只会在输出中见到“C*”,而不会见到“W*”。

但是,在此特定情况下发生了锁定等待。

可使用db2cos 文件中的其他db2pd 命令提供的输出将结果映射至事务、应用程序、代理程序甚至是 SQL 语句。

可以缩小输出范围或使用其他命令来收集需要的信息。

例如,可以更改 db2pd 命令选项以使用 -locks wait 选项,后一个选项仅打印具有等待状态的锁定。

如果需要 -app 和 -agent 选项,也可以输入它们。

相关主题