用于监控 DB2 实例和数据库的新的 DB2 UDB 工具
2008-09-17 16:31:40 来源:WEB开发网简介
DB2 UDB V8.2 带来了一种新工具称为 db2pd,用于收集 DB2 实例和数据库的统计信息。与 Informix® Dynamic Server 的 onstat 工具类似,db2pd 提供了 20 多个选项显示关于数据库事务、表空间、表统计信息、动态 SQL、数据库配置和其他很多数据库细节的信息。单个 db2pd 命令可以检索多个领域的信息,并把结果保存到文件中。也可以在特定时期内调用该工具一定的次数,帮助您了解随着时间的变化数据库中的变动情况。该工具可用于故障检修、问题确定、数据库监控、性能调优和帮助应用程序的开发设计。本文介绍了这种新的工具,并通过例子说明如何使用它来提高生产率。
使用 db2pd 工具
使用这种强大的工具,必须具有 SYSADMIN 权限,而且在 UNIX® 或 Linux™ 环境中必须是实例的所有者。该命令的语法和选项说明,可以在 DB2 UDB Information Center 中在线找到。查找 db2pd 命令语法最简单的办法是使用 Web 搜索引擎,比如下面使用 Google:
打开 Google 搜索引擎,如图 1 所示。
图 1. 使用 Google 搜索引擎搜索 DB2 命令 db2pd
搜索“db2pd”,如图 2 所示。
图 2. DB2 命令 dp2pd 在 Google 的搜索结果
打开 db2pd – Monitor and Troubleshoot DB Command,如图 3 所示。
图 3. DB2 Information Center 中关于 db2pd 工具的信息
调用 db2pd 工具有两种方式。可以用交互模式调用 db2pd 工具,或者直接在操作系统命令提示符下运行。要是用交互模式执行该工具,可以在操作系统命令提示符下输入 db2pd –interactive 或者直接输入 db2pd,这样将看到 db2pd 命令提示符 db2pd>,可以输入命令选项。使用 –help 选项可以获得帮助信息。退出 db2pd 命令提示符只需要输入 quit 或者 q。图 4 中的例子说明了如何使用交互模式显示当前的代理。
图 4. 用交互模式调用 db2pd
在操作系统命令提示符下调用该工具可以输入带有命令选项的 db2pd 命令。下面的例子(图 5)使用 -agents 选项显示了所有的活动代理。
图 5. 在操作系统命令提示符下调用 db2pd
此外,还可以通过将选项保存在文件中或者在 DB2PDOPT 环境变量中设置选项来控制该命令。下面的例子(图 6)说明可以将 -agents 选项保存在一个(在该例中)名叫 file.out 的文件中,然后使用 db2pd –command file.out 执行选项。
图 6. 将 db2pd 选项保存在文件中
如果要使用 DB2PDOPT 环境变量,可以将 DB2PDOPT 设成需要的选项然后像下面这样调用 db2pd:
图 7. 在 DB2PDOPT 环境变量中设置 db2pd 选项
db2pd 命令有 22 个选项。如果要对所有数据库分区服务器上、所有活动的本地数据库运行所有这些选项,只需要输入 db2pd –everything,也可通过下表所示的范围选项限制信息的范围。
表 1. db2pd 范围选项
范围 | 范围选项 | 说明 |
实例 | -inst 或 -ins | 用于实例 |
数据库 | -database x 或 –db x | 用于特定的数据库x |
数据库 | -alldatabase 或 –alldb | 用于所有数据库 |
分区 | -dbpartitionnum n 或 –dbp n | 用于特定的数据库分区服务器 n |
分区 | -alldbpartitionnums 或 –alldbp | 用于实例中的所有数据库分区服务器 |
注意,dbp2pd 选项可以在实例的范围内,也可以在数据库的范围内。如果使用数据库范围,指定的数据库必须已经激活。表 2 显示了每个 db2pd 选项、选项的说明和对应的范围。
表 2. db2pd 选项的范围
db2pd 选项 | 说明 | 范围 |
agents | 返回关于代理的信息 | 实例 |
applications | 返回应用程序的信息 | 数据库 |
bufferpools | 返回缓冲池的信息 | 数据库 |
Catalogcache | 返回目录缓冲的信息 | 数据库 |
dbcfg | 返回数据库配置参数的设置 | 数据库 |
dbmcfg | 返回数据库管理器配置参数的设置 | 实例 |
dynamic | 返回动态 SQL 的执行信息 | 数据库 |
fcm | 返回快速通信管理器的信息 | 实例 |
help | 返回 db2pd 命令的帮助信息 | 无 |
logs | 返回日志信息 | 数据库 |
locks | 返回锁定信息 | 数据库 |
mempools | 返回内存池的信息 | 两者 |
memsets | 返回内存设置的信息 | 两者 |
osinfo | 返回操作系统信息 | Instance |
recovery | 返回恢复活动的信息 | 数据库 |
reopt | 返回使用 REOPT ONCE 选项应用程序重新优化的 Cached SQL 语句的信息 | 数据库 |
reorg | 返回表重组的信息 | 数据库 |
static | 返回静态 SQL 和包的执行信息 | 数据库 |
sysplex | 返回和所有数据库或者某个数据库的别名相关的服务器列表信息 | 实例 |
tablespace | 返回表空间的信息 | 数据库 |
tcbstats | 返回表和索引的信息 | 数据库 |
transactions | 返回活动事务的信息 | 数据库 |
version | 返回当前 DB2 版本和级别的信息 | 实例 |
更好的是,可以指定 –repeat 参数重复该命令。比方说,下面的命令每 2 秒钟显示一次 DB2 内存信息,共 5 次:
db2pd –mempools –repeat 2 5
此外,通过 file= 参数还可以将特定 db2pd 命令选项的结果保存到文件中。file 和 repeat 参数可以结合使用:
db2pd –mempools file=memp.txt –repeat 2 5
其中,memp.txt 保存输出结果。
监控的例子
下面这些例子说明了如何用 db2pd 工具监控您的数据库环境。
例 1:
如果希望了解当前 DB2 的级别和当前操作系统的信息,可以输入以下命令:
db2pd –version –osinfo
图 8. 监控例子 1
–version 选项显示了系统上运行的当前 DB2 的版本和级别。输入 db2level 命令也可以得到同样的信息。–osinfo 选项显示 OS、CPU、物理内存和虚拟内存信息。类似的 OS 信息也可以在 DB2 启动时的 db2diag.log 中找到。这个例子也说明了获得版本信息和 OS 信息是多么简单,只需要在一个 db2pd 命令中指定两个选项。
例 2:
如果希望了解谁给数据库加了锁,可以使用下面的命令确定这个人:
db2pd –database sample –locks –transactions –agents –file lock.txt
db2pd 命令的所有选项都可以使用前三个字符的缩写,只有两个除外:-mempools 和 –memsets。使用缩写形式,上面的例子可以改写为:
db2pd –db sample –loc –tra –age –fil lock.txt
上面的命令使用了混合范围选项。–lock/-loc 和 –transactions/-tra 是数据库范围内的选项,agents/–age 是实例范围内的选项。虽然范围选项是混合的,仍然可以显示当前活动代理的锁定和事务信息。使用 –file/-fil 选项,命令的输出保存到 lock.txt 文件中。该命令的消息显示如下。
图 9a. 监控例子 2
要注意,–db 选项被 –agents 选项忽略了。
下图(图 9b)显示了 lock.txt 文件的部分内容。
图 9b. lock.txt 文件的内容
通过以下步骤很容易发现谁加了锁。
图 9b 中,–lock 选项生成的第一段输出表明,一个共享锁(Mode=S)被句柄号为 3(TranHdl=3)的事务持有,而且锁定的状态是授权(Sts=G)。
–transactions 选项生成的第二部分输出表明,事务句柄号 3 具有应用程序句柄号 28(AppHandl=28)。
最后,可以在输出的第三部分中发现,ID 为 POONS 的用户拥有应用程序句柄号 28。
事务在等到被锁定的资源时,–locks 在输出中的状态(Sts)将是 W,代表 Waiting(等待)状态。然后使用上面的方法很容易确定谁在等待锁定的资源。
这个例子说明,一个简单的命令可以检索必要的信息确定谁加了锁,也说明可以将多个选项的输出保存到一个文件中,还说明了选项的缩写形式。一旦熟悉了 db2pd 工具,为了更快地执行命令可以使用缩写形式减少按键的次数。但是为了清晰起见,在脚本文件中可能希望避免使用缩写形式。
例 3:
如果需要检查动态 SQL 语句的当前隔离级别,可以使用下面的命令:
db2pd –db sample –dynamic
图 10. 监控例子 3
图 10 中,在 Dynamic SQL Environments 部分可以找到执行中的动态 SQL 语句的当前隔离级别。该例中,散列的锚标识符 171 (AnchID=171) 具有最严格的隔离级别,Repeatable Read(可重复读,RR)。通过交叉参照 Dynamic SQL Statements,可以确定哪个具体的 SQL 语句具有 RR 隔离级别:
select * from employee
例 4:
如果希望监控表的重组(reorg)状态,在 v8.2 之前可以使用 GET SNAPSHOT FOR TABLES ON 数据库名 检查重组状态。使用 db2pd 工具,执行下面的命令就能获得重组状态:
db2pd –db sample –reorg file=reorg.txt
reorg.txt 文件包含以下信息:
图 11a. 监控开始的重组状态
图 11a 中,对表 STAFF 运行了一个离线的重组工具。如果稍后再执行相同的命令,结果将如图 11b 所示,状态已经从“Started”变为了“Done”。“Done”状态表明重组已经完成了。
图 11b. 监控结束的重组状态
例 5:
V8.2 之前的 DB2 UDB 版本中,可以使用命令 DB2 LIST TABLESPACES SHOW DETAIL 检查表空间的状态,现在只需要在操作系统命令提示符下输入以下命令。
db2pd -db sample –tablespace
图 12 中可以看到,SAMPLE 数据库中共有三个表:SYSCATSPACE、USERSPACE1 和 SYSTOOLSPACE,在 Tablespaces 节中说明表空间状态为 0x00000800。
图 12a. 监控例子 5
可以使用 db2tbst 命令对表空间状态解码。可以发现,表空间处于“Backup in progress(备份中)”状态。结果如图 12b 所示。
图 12b. db2tbst 命令
结束语
DB2 UDB V8.2 新增的 db2pd 工具对于数据管理员来说是一种方便的工具。这些例子可以帮助您理解这种工具和它的潜在能力。通过试验不同的选项,可以加深理解,并用它简化您的数据库管理任务。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
- ››DB2 pureScale 实战
更多精彩
赞助商链接