| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
龙腾教程网  
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
 
  您当前位置:您现在的位置: 龙腾软件教程网 >> 文章中心 >> 数据库教程 >> db2教程 >> 文章正文>>>>>> 
如何在DB2 UDB中正确的监控死锁
前言:这篇文章通过详细的实例阐述了如何在DB2 UDB 中监控死锁的发生。在DB2 UDB中有两种类型的监控器:快照监控器和事件监控器。快照顾名思义就是数据库连续状态下的一个切面,通过快照监控器,你可以很方便地查看当前连接的应用程序,当前等待的锁,当前的死锁,以及正在执行的SQL语句,同时你可以查看缓冲区,表和表空间的用法。如果保存历史数据,并且能够做出比较,对于分析数据库的并发性能有很大的帮助。

  但是我们并不能预测什么时候发生死锁,所以如果有一个后台程序能够一直监控数据库的活动,记录下所有的死锁事件,这对于数据库管理员来说是非常重要的。DB2 UDB提供了事件监控器。通过不遗漏地获得一段时间内所有的数据库事件(在本文中只关心其中的死锁事件),事件监控器提供了一种可以分析历史数据(本文的重点),预测将来趋势的可能。DB2 UDB同时提供了DB2 Performance Expert (DB2/PE) 或者类似的程序用来生成分析报表,不过这已经超出了本文的范畴。

  常用术语

  锁是控制应用程序并发的数据库软件机制,锁用来防止以下情况的发生:

  1. 丢失以前更新

  2. 不可重复读取

  3. 访问未提交数据

  锁的模式包括共享锁和排他锁,共享锁允许其他程序读取已经被其他共享锁占用的资源,所以也叫读锁,排他锁意味着在释放资源以前其他的应用程序无法访问同一资源,所以也叫写锁。此外,DB2 UDB 还提供了不同的锁级别,不同的应用程序可能会要求访问不同范围的数据,锁级别有利于充分利用系统资源,提高系统性能。若一个应用程序请求一个锁,而该锁被另外一个应用程序所使用且不能共享,DB2 UDB 就会挂起前一个应用程序。锁升级就是当LOCKLIST (LOCKLIST代表锁能够占用的内存空间) 耗尽或者一个应用程序所拥有的锁大于MAXLOCKS*LOCKLIST的时候(MAXLOCKS 代表应用程序所拥有的锁占所空间的百分比),DB2 UDB 就试图把几个行级别的锁合并为一个表级别的锁,从而释放锁空间。虽然锁升级本身并不耗费多少时间,但是锁住整个表通常会大大地降低并发性能。

  当应用程序处于挂起状态超过了一段规定的时间后,DB2 UDB就会自动中止这个应用程序,同时会向SQLCA发送描述性的错误信息。当两个或者更多的应用程序都持有另外一个应用程序所需资源上的锁,没有这些资源,那些应用程序都无法继续完成其工作的时候,就会发生死锁。

  在DLCHKTIME超时之后,DB2 UDB会中止发生死锁的某个应用程序(通常为所做工作最少的那个应用程序),这会释放这个应用程序所持有的所有的锁,并允许别的应用程序继续工作,DB2 UDB 将向被终止的应用程序的SQLCA发送描述性的错误信息。LOCKTIMEOUT 指定一个应用程序被允许的锁等待的时间,这将避免全局的死锁从而导致整个应用崩溃。如果LOCKTIMEOUT 的值为-1,应用程序会等待直到该锁被释放或者发生一个死锁。

  事件监控器

  事件监控器用来收集当一个数据库事件发生时所关联的应用程序的信息。这里的事件指,连接,死锁,声明和事务。你可以定义你想监控的事件类型的监控器。比如说,一个死锁监控器就是用来监控死锁的发生。

  在DB2 UDB 中存在两种和死锁有关的事件类型:

  DEADLOCKS

  记录简单的应用程序信息。

  DEADLOCKS WITH DETAILS

  记录所有复杂的信息,包括应用程序、执行语句声明以及死锁的详细信息。但是使用这种事件监控器会因为需要得到大量额外的信息而降低系统的性能。

如何监控死锁

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

  这里我们需要至少三个应用程序来调用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

[1] [2] 下一页


上一篇:
  • 上一篇文章:
  • 下一篇
  • 下一篇文章: 没有了
  • 收藏此文到百度搜藏 百度搜藏| 新浪VIvi| 365key| Younote| 博采中心| 你好BLOG| 亿友网摘| 和讯网摘|
    相关文章    
    DB2 XML 编程之使用XML数据库支持
    DB2中更新执行计划的几个常见的方法
    DB2数据库性能监控的具体步骤
    DB2 9 数据库恢复简介
    DB2 实用程序介绍之LOAD实用程序
    DB2 实用程序介绍之数据移动实用程序
    使用重定向恢复DB2数据库
    浅谈DB2数据库故障处理及最佳实践
    DB2数据库安全的12条军规
    DB2 9 数据库服务器管理之DB2安全性
     
     
     
    最新文章
    普通文章 如何在DB2 UDB中正确的监控死锁最新文章
    普通文章 让Vista自动管理和刻录照片最新文章
    普通文章 Auto木马群致毒霸2007无法启动解最新文章
    普通文章 Windows Vista系统中如何启动Jav最新文章
    普通文章 Illustrator绘制充满春天气息的新最新文章
    普通文章 Photoshop Elements制作新年祝福最新文章
    普通文章 ASP.NET2.0利用PagedDataSource类最新文章
    普通文章 Photoshop的曲线处理暗角打造时尚最新文章
    普通文章 Photoshop绘制水晶苹果最新文章
    普通文章 Photoshop制作 Zip icon简明图标最新文章
     
    热门文章
    推荐文章 Oracle数据库配置中的常见错误代最新文章
    推荐文章 最新迅雷下载电骡资源技巧放送最新文章
     
     
    设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 

    版权所有2006-2008 龙腾教程网