频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

深入探讨DB2 9.5中的锁定超时分析新方法

来源:赛迪网 作者:Alizze 出处:巧巧读书 2008-07-04 进入讨论组
下一页 1 2 

在 DB2?9.5中,分析锁定超时的方法得到了极大改进,锁定超时分析变得更加简单。本文探索这些全新的锁定超时报告功能,并检查收集的附加信息以确定发生锁定超时的原因。

回顾DB2 9.1中的锁定超时分析

使用db2pd工具和db2cos脚本进行锁定超时分析的方法包含以下几步:

1.使用一个特殊的DB2脚本 — 名为 db2cos — 在每次调用db2cos脚本时执行一个db2pd调用。db2pd 调用收集与锁定、事务、应用程序、语句缓存相关的信息,并将信息存储在一个文本文件中以供分析。

2.要在锁定超时发生时自动执行 db2cos 脚本(以及包含的 db2pd 命令,需要使用 db2pdcfg 命令注册锁定超时事件。

3.在锁定超时事件中,DBA 可以检查通过自动调用 db2cos 脚本生成的 db2pd 输出。这使 DBA 能够确定发生锁定争用的原因,从而设法在以后避免发生这类情形。

尽管其中介绍的方法提供了大量信息,使得锁定超时分析比以前的 DB2 9 for Linux, Unix, and Windows 版本更加简单,但它仍然存在一些不足:

◆使用此方法需要手动改写 db2cos 脚本并通过调用 db2pdcfg 来注册锁定超时事件。两个步骤都不复杂,但是对于新手来说可能有些困难。

◆解释 db2pd 输出以识别锁定超时情形中涉及的应用程序和 SQL 语句,这个任务并不容易,而且需要一些尝试。

◆如果锁定超时是由包含多个 SQL 命令的事务引起的,那么 db2pd 收集的信息可能还不足以确定导致锁定的 SQL 语句。

DB2 9.5 中全新的锁定超时报告功能

在 DB2 9.5 的锁定超时报告功能中,引入了一个新特性,使得锁定超时分析变得非常简单。要激活锁定超时报告,只需将 DB2 注册变量 DB2_CAPTURE_LOCKTIMEOUT 设置为 ON,并重新启动您的 DB2 实例:

清单 1. 激活 DB2 9.5 中的锁定超时报告

db2set DB2_CAPTURE_LOCKTIMEOUT=ON

db2stop

db2start

是的,就是这么简单。当 DB2_CAPTURE_LOCKTIMEOUT 设置为 ON 时,DB2 为每个锁定超时事件自动创建一个报告文件。报告文件保存在 DIAGPATH 数据库管理员配置(DBM CFG)参数指向的目录中,包含的信息有:锁定超时的日期和时间、存在问题的锁定、锁定请求程序和锁定拥有者。

那么 DB2 9.5 中就不使用 db2cos 脚本了吗?事实并非如此。将 db2cos 脚本和 db2pd 工具结合具有非常广泛的用途。这意味着,这些工具组合仍然可用于捕捉与 SQL 代码和 DB2 内部返回代码相关的任何 DB2 事件信息,而不仅仅是锁定超时信息。

现在看看新的 DB2 9.5 注册变量 DB2_CAPTURE_LOCKTIMEOUT 并查看一个使用 DB2 SAMPLE 数据库的锁定超时示例场景。如果 SAMPLE 数据库不存在,可以调用下面的命令创建一个:

清单2. 创建 SAMPLE 数据库

db2sampl

只有当数据库配置(DB CFG)参数 LOCKTIMEOUT 未被设置为 -1 时,锁定超时才会发生。-1 意味着一个应用程序可能在无限期地等待一个必需的锁定,在一些情形中,这并不是期望发生的行为,但是 -1 是 LOCKTIMEOUT 的默认设置。对于此示例场景,假设 LOCKTIMEOUT 被更改为 10 秒(LOCKTIMEOUT 的值以秒为单位):

清单3.更改LOCKTIMEOUT的值

db2 "UPDATE DB CFG FOR SAMPLE USING LOCKTIMEOUT 10"

为了促使一个锁定超时错误发生,我们首先建立一个数据库连接,并执行一些 SQL 语句来模拟表 EMPLOYEE 上的真实事务:

清单4. 第一个事务将每个员工的工资提高2%

db2 "CONNECT TO SAMPLE"

db2 +c "UPDATE EMPLOYEE SET SALARY = SALARY * 1.02"

db2 +c "SELECT LASTNAME, FIRSTNME, SALARY FROM EMPLOYEE ORDER BY LASTNAME ASC"

到目前为止,这个事务包含一个 UPDATE 命令,该命令将每个员工的工资提高 2%。然后,使用 SELECT 语句查询新的工资。注意,通过为 DB2 命令行处理程序(CLP)调用指定 +c 选项,我们禁用了自动提交功能。UPDATE 语句会导致 EMPLOYEE 表中的每行上发生一个独占(X)锁。这些独占锁会一直持续下去,直到使用 COMMIT 或 ROLLBACK 语句结束事务。

不需要结束事务,在一个单独的 shell 中建立第二个数据库连接并开始另一个事务:

清单5. 第二个事务为每位经理提供 10%(取决于他们的工资)的奖金

db2 "CONNECT TO SAMPLE"

db2 +c "UPDATE EMPLOYEE SET BONUS = SALARY * 0.1 WHERE JOB = 'MANAGER'"

这个事务的用途是,根据每位经理的当前工资,为他们提供 10% 的奖金。由于 EMPLOYEE 表中的所有行都被第一个事务独占锁定,第二个应用程序进入了锁等待模式。10 秒钟之后(还记得 LOCKTIMEOUT 的设置吧),就会发生预期的锁定超时。

目前为止还没有出现什么新内容。但是由于 DB2 注册变量 DB2_CAPTURE_LOCKTIMEOUT 被设置为 ON,锁定超时报告处于激活状态,DB2 会在 DIAGPATH 目录中自动生成锁定超时报告。注意,DB2 9.5 for Windows 中默认的 DIAGPATH 发生了改变。如果 DIAGPATH 参数未设置,DIAGPATH 会指向目录 DB2INSTPROF\DB2INSTANCE,其中 DB2INSTPROF 是实例目录的位置,而 DB2INSTANCE 是 DB2 实例的名称。要确定存储在 DB2INSTPROF 中的路径,可以通过执行 db2set -all 命令显示 DB2 注册内容。如果在默认实例中创建 SAMPLE 数据库,那么 DB2INSTANCE 的值为 DB2。报告文件的名称为 db2locktimeout.dbpartition.agentid.timestamp,对于单分区的数据库,其中的 dbpartition 始终为 0。

DB2 生成的锁定超时报告如下所示:

清单6. 锁定超时报告

LOCK TIMEOUT REPORT

Date: 03/01/2008

Time: 07:34:31

Instance: DB2

Database: SAMPLE

Database Partition: 0

Lock Information:

Lock Name: 02000600040040010000000052

Lock Type: Row

Lock Specifics: Tablespace ID=2, Table ID=6, Row ID=x0400400100000000

Lock Requestor:

System Auth ID: FECHNER

Application Handle: [0-38]

Application ID: *LOCAL.DB2.080103063343

Application Name: db2bp.exe

Requesting Agent ID: 5232

Coordinator Agent ID: 5232

Coordinator Partition: 0

Lock timeout Value: 10000 milliseconds

Lock mode requested: ..U

Application Status: (SQLM_UOWEXEC)

Current Operation: (SQLM_EXECUTE_IMMEDIATE)

Lock Escalation: No

Context of Lock Request:

Identification: UOW ID (1); Activity ID (1)

Activity Information:

Package Schema: (NULLID )

Package Name: (SQLC2G13NULLID )

Package Version: ()

Section Entry Number: 203

SQL Type: Dynamic

Statement Type: DML, Insert/Update/Delete

Effective Isolation: Cursor Stability

Statement Unicode Flag: No

Statement: UPDATE EMPLOYEE SET BONUS = SALARY * 0.1

WHERE JOB = 'MANAGER'

Lock Owner (Representative):

System Auth ID: FECHNER

Application Handle: [0-33]

Application ID: *LOCAL.DB2.080103063332

Application Name: db2bp.exe

Requesting Agent ID: 5488

Coordinator Agent ID: 5488

Coordinator Partition: 0

Lock mode held: ..X

List of Active SQL Statements: Not available

List of Inactive SQL Statements from current UOW: Not available

锁定超时报告包括 4 部分:

更多文章 更多内容请看DB2DB2中的数据处理DB2基本操作专题,或进入讨论组讨论。
下一页 1 2 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章