实例讲解如何在DB2 UDB中正确的监控死锁
2008-01-28 16:24:38 来源:WEB开发网当应用程序处于挂起状态超过了一段规定的时间后,DB2 UDB就会自动中止这个应用程序,同时会向SQLCA发送描述性的错误信息。当两个或者更多的应用程序都持有另外一个应用程序所需资源上的锁,没有这些资源,那些应用程序都无法继续完成其工作的时候,就会发生死锁。
在DLCHKTIME超时之后,DB2 UDB会中止发生死锁的某个应用程序(通常为所做工作最少的那个应用程序),这会释放这个应用程序所持有的所有的锁,并答应别的应用程序继续工作,DB2 UDB 将向被终止的应用程序的SQLCA发送描述性的错误信息。LOCKTIMEOUT 指定一个应用程序被答应的锁等待的时间,这将避免全局的死锁从而导致整个应用崩溃。假如LOCKTIMEOUT 的值为-1,应用程序会等待直到该锁被释放或者发生一个死锁。
事件监控器
事件监控器用来收集当一个数据库事件发生时所关联的应用程序的信息。这里的事件指,连接,死锁,声明和事务。你可以定义你想监控的事件类型的监控器。比如说,一个死锁监控器就是用来监控死锁的发生。
在DB2 UDB 中存在两种和死锁有关的事件类型:
DEADLOCKS
记录简单的应用程序信息。
DEADLOCKS WITH DETAILS
记录所有复杂的信息,包括应用程序、执行语句声明以及死锁的具体信息。但是使用这种事件监控器会因为需要得到大量额外的信息而降低系统的性能。
如何监控死锁
为了具体说明事件监控器在死锁监控中的用途,我引入了一个简单的死锁场景来触发一个死锁,在随后的章节,我会告诉读者如何分析监控结果以及根据结果来避免死锁的发生。
这里我们需要至少三个应用程序来调用DB2 CLI,一个用来监控死锁的发生,另外两个用来产生死锁。我们可以使用DB2 UDB 安装时附带的SAMPLE数据库。
更多精彩
赞助商链接