实例讲解如何在DB2 UDB中正确的监控死锁(二)

2008-11-20    | |
打印本文章
RSS

导读:本篇主要介绍监控死锁的步骤和方法,首先建立一个死锁事件监控器;2、用另外两个应用程序来产生一个死锁;3、两个本身处于锁等待并且占有资源的应用程序互相等待另外一方所持有的资源……

关键词:DB2 UDB DB2 监控死锁

正在加载数据...

  如何监控死锁

  为了详细说明事件监控器在死锁监控中的用途,我引入了一个简单的死锁场景来触发一个死锁,在随后的章节,我会告诉读者如何分析监控结果以及根据结果来避免死锁的发生。

  这里我们需要至少三个应用程序来调用DB2 CLI,一个用来监控死锁的发生,另外两个用来产生死锁。我们可以使用DB2 UDB 安装时附带的SAMPLE数据库。

  1. 首先建立一个死锁事件监控器

Session Monitor
db2 connect to sampledb2 "create event monitor
dlmon for tables, deadlocks with details write
 to file 'C:\dlmon'"mkdir C:\dlmondb2 "
set event monitor dlmon state 1"

  2. 用另外两个应用程序来产生一个死锁


Session A
db2 connect to sampledb2 +c "insert into employee values('000350', 'Truman', 'I', 'Jiang', 
'B00', '5892','1999-02-21', 'Engineer', 19, 'M', 
'1978-06-17', 60000, 2000, 6000)"

  现在应用程序A就拥有了一个EMPLOYEE表的行级别的排他锁

  (注: +c 代表不自动提交SQL语句,DB2 中 autocommit 是缺省设置,也可以通过 db2 update command options using c off 关闭该缺省选项。)


Session B
db2 connect to sampledb2 +c "insert into project 
values('AD3300', 'Dead Lock Monitor', 'B00', '000350',
 7.00, '1982-07-21', '1983-02-03', 'AD3111')"

  现在应用程序B就拥有了一个PROJECT表的行级别的排他锁


Session A
db2 +c "select projname from project"
 
  应用程序A需要PROJECT表上所有行的共享锁,但是因为PROJECT表正在被应用程序B以排他锁的形式独占,这时候应用程序1就进入一个锁等待的状态。


Session B
db2 +c "select firstnme from employee"

 
  应用程序B也进入一个锁等待的状态。此时就出现了一个死锁状态。

  3. 两个本身处于锁等待并且占有资源的应用程序互相等待另外一方所持有的资源,这时候Session A和Session B就出现了死锁状态,这种状态一直会延续直到死锁检查器(超出DLCHKTIME时间以后)检查出一个死锁并且回滚其中的一个事务。

  Session B

  SQLN0991N 因为死锁或者超时,当前事务已经被回滚。原因码为 "2". SQLSTATE=40001这时候死锁事件监控器就会记录这个死锁,同时应用程序A可以完成他的工作。


Session A
PROJNAME----------……20 条记录已选择
Session A
db2 connect reset
Session B
db2 connect reset
 
  4. 通过 db2evmon 工具可以获得死锁信息的日志,并且把日志文件导入到本地机器的文件系统当中。在下面一节,我们将详细分析导出的日志文件。


Session Monitordb2 connect resetdb2evmon 
-path c:\dlmon > c:\dlmon\dllog1.txt


实例讲解如何在DB2 UDB中正确的监控死锁
 实例讲解如何在DB2 UDB中正确的监控死锁(一)
 实例讲解如何在DB2 UDB中正确的监控死锁(二)
 实例讲解如何在DB2 UDB中正确的监控死锁(三)

原文出处:http://tech.ccidnet.com/art/982/20080917/1573039_2.html
来源:赛迪网    作者:fen    
  评论
 
开放的DB2拥有先进的数据库技术,专为随需应变的统一信息平台而设计,它能够使您摆脱现有信息系统的禁锢,全面支持您随机应变的业务发展。它支持Unix、Linux以及……
 
使用IBM DB2数据库时必须了解的几个知识点:第一在安装DB2数据库后,你可以通过命令行方式或图形界面方式来操作;第二控制中心中无法增删改数据,只能编写sql语句……
 
在一次性导入大量数据到表中时,会因为写日志而影响性能,如何提高该操作的性能,在导入数据后,需要做更新统计操作,如何做?DB2中如何实现为一个DMS表空间……
 
如何对应SQLServer的InsertBulk命令?如何给VARGRAPHIC类型字段设置缺省值DB2存储过程中的异常处理如何写,与Oracle中的有何区别?针对上述问题作者在文中作了详细介绍。
 
CLP连接数据库服务器返回错误,提示codepage无法转换,按提示更改代码页后仍然无法连接。Solaris 5.8下用命令行方式无法连接数据库,提示遇到错……,这些问题怎么解决?
在SQL Server中,我们如何进行索引设计来提升系统的性能和对查询进行优化,是许多用户非常关注的问题,在本次技术专题中,我们将分群集索引和非群集索引设计两部分来为您详细分析。
本技术专题主要为使用Oracle SQL Developer和其他开发工具。包括如何使用Oracle SQL Developer和其他开发工具、使用Oracle Database Home Page、在Oracle中使用SQL*Plus等方面。
本专题为QL SELECT语句基础。侧重概述了如何使用SELECT来访问SQL数据库中所有内容以及组成SELECT语句的许多子句名称和功能;同时还阐述了如何使用DISTINCT关键字消除重复的行,以及如何正确使用ORDER BY子句来排序数据。
最新更新
专家答疑
技巧
Brian Fedorko
Oracle数据库审计功能十分强大、灵活并且易于配置,适当并有效地使用数据库审计功能是拥有高效安全策略的基础。
Brian Peasland
Oracle数据库二进制文件和库文件是高版本版本的,而备份的数据库内部如果仍然是较低版本,那么Oracle将不允许你打开数据库,除非你完成了升级过程。
Maria Anderson
在Windows XP环境下,使用数据库升级助手将Oracle从9.2.0.1升级到10g R2,出现DBUA不能识别Oracle数据库的SID问题如何解决。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录