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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

该工具不需要获得任何锁存器或使用任何引擎资源就可以收集信息。因此,在db2pd收集信息时,有可能(并且预计)会检索到正在更改的信息;这样,数据可能不是十分准确。如果遇到正在更改的内存指针,可使用信号处理程序来防止db2pd异常终止。这可能会导致输出中出现诸如以下的消息:“正在更改的数据结构已强制终止命令”。虽然如此,该工具对于故障诊断却非常有用。在不锁存的情况下收集信息有两个好处:检索速度更快并且不会争用引擎资源。

如果要在出现特定SQLCODE、ZRC 代码或ECF 代码时捕获关于数据库管理系统的信息,那么可以使用db2pdcfg -catch命令完成此操作。捕获到错误时,将启动db2cos(调出脚本)。db2cos文件可以自动改变,以便运行解决问题所需的任何db2pd命令、操作系统命令或任何其他命令。在UNIX® 和Linux® 上,模板文件db2cos位于sqllib/bin中。在Windows® 操作系统上,db2cos位于$DB2PATH\bin目录中。

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

场景1:诊断锁定等待

使用db2pd -db -locks -transactions -applications -dynamic 命令来获取下列结果:

对于使用 -db 数据库名称选项指定的数据库,开头的结果会显示该数据库的锁定。您会发现TranHdl 2 正在等待TranHdl 3 挂起的锁定。

您会发现TranHdl 2 与AppHandl 11 相关联,而TranHdl 3 与AppHandl 12 相关联。

您会发现AppHandl 12 最后运行动态语句17, 1。ApplHandl 11 是当前正在运行的动态语句17, 1,而最后运行的语句是94, 1。

您会发现,文本列显示与锁定超时相关联的SQL 语句。

场景2:使用-wlocks选项捕获所有正在等待的锁定

在下面的样本输出中,应用程序1(AppHandl 47)正在执行插入操作,而应用程序2(AppHandl 46)正在选择该表。

场景3:使用-apinfo选项捕获关于锁定所有者和锁定等待者的详细运行时信息

下面的样本输出是在与上面的场景 2 相同的条件下捕获的。

venus@boson:/home/venus =>db2pd -apinfo 47 -db pdtest

数据库分区 0 -- 数据库 PDTEST -- 活动 -- 正常运行 0 天 00:01:30

应用程序:

地址: 0x0780000001676480

AppHandl [nod-index]: 47 [000-00047]

应用程序 PID : 876558

应用程序节点名: boson

IP 地址:不适用

连接开始时间: (1197063450)Fri Dec 7 16:37:30 2007 客户机用户标识: venus

系统授权标识: VENUS

协调程序 EDU 标识: 5160

协调程序分区: 0

代理程序数: 1

锁定超时值: 4294967294 秒

锁定升级:否

工作负载标识: 1

工作负载出现标识: 2

可信上下文:不适用

连接信任类型:不可信

继承的角色:不适用

应用程序状态: UOW 正在等待

应用程序名称: db2bp

应用程序标识: *LOCAL.venus.0712********

ClientUserID: n/a

ClientWrkstnName: n/a

ClientApplName: n/a

ClientAccntng: n/a

当前 UOW 的不活动语句列表:

UOW 标识: 2

活动标识: 1

程序包模式: NULLID

程序包名称: SQLC2G13

程序包版本:

节号: 203

SQL 类型:动态

隔离: CS

语句类型: DML 以及 Insert/Update/Delete

语句: insert into pdtest values 99

venus@boson:/home/venus =>db2pd -apinfo 46 -db pdtest

数据库分区 0 -- 数据库 PDTEST -- 活动 -- 正常运行 0 天 00:01:39

应用程序:

地址: 0x0780000000D77A60

AppHandl [nod-index]: 46 [000-00046]

应用程序 PID: 881102

应用程序节点名: boson

IP 地址:不适用

连接开始时间: (1197063418)Fri Dec 7 16:36:58 2007 客户机用户标识: venus

系统授权标识: VENUS

协调程序 EDU 标识: 5913

协调程序分区: 0

代理程序数: 1

锁定超时值: 4294967294 秒

锁定升级:否

工作负载标识: 1

工作负载出现标识: 1

可信上下文:不适用

连接信任类型:不可信

继承的角色:不适用

应用程序状态:锁定等待

应用程序名称: db2bp

应用程序标识: *LOCAL.venus.0712********

ClientUserID: n/a

ClientWrkstnName: n/a

ClientApplName: n/a

ClientAccntng: n/a

活动语句列表:

*UOW 标识: 3

活动标识: 1

程序包模式: NULLID

程序包名称: SQLC2G13

程序包版本:

节号: 201

SQL 类型:动态

隔离: CS

语句类型: DML 和 Select(可阻塞)

语句: select * from pdtest

场景4:在考虑锁定问题时使用调出脚本

查找db2cos输出文件。该文件的位置由数据库管理器配置参数DIAGPATH 控制。输出文件的内容将随您在db2cos文件中输入的命令不同而不同。当db2cos文件包含db2pd -db sample -locks命令时,提供的输出示例如下所示:

仅查找“W*”,因为这是经历超时的锁定。当锁定转换为更高级的方式时,也会发生锁定超时。在这种情况下,您只会在输出中见到“C*”,而不会见到“W*”。但是,在此特定情况下发生了锁定等待。可使用db2cos文件中的其他db2pd命令提供的输出将结果映射至事务、应用程序、代理程序甚至是SQL 语句。可以缩小输出范围或使用其他命令来收集需要的信息。例如,可以更改db2pd命令选项以使用-locks wait选项,后一个选项仅打印具有等待状态的锁定。如果需要-app和-agent选项,也可以输入它们。

场景5:将应用程序映射至动态SQL 语句

db2pd -applications命令报告动态SQL 语句的当前和最后一个锚点标识和语句唯一标识。这允许直接从应用程序映射至动态SQL 语句。

相关文档
最新文档