由于实时对数据库进行新增操作,在某一时刻发生死锁,持续五分钟,报的错误如下:
COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/AIX64] SQL0911N The current transaction has been rolled back because of a deadlock or timeout. Reason code "68". SQLSTATE=40001
请高手分析一下!
------解决方案--------------------------------------------------------
一般死锁不可能在发生了5分钟后才发现,除非你的数据库死锁监控间隔参数调整了,通常这个参数是不会被修改的。这样的事情我估计是由于你的所等待造成的(你的锁定超时时间上限为300)。当然是你的程序逻辑有问题才导致这个现象发生,那么怎么找到是哪一个程序持有了锁而不释放呢?
1.重新执行你的应用
2.db2 list application show detail,使用此命令可以看到lock-wait状态的应用程序
3.db2 get snapshot for application agentid <>,把处于lock-wait状态的应用程序id放在见括号位置,使用这个命令可以看到该程序等待的应用程序id,继续使用命令3进行跟踪即可
------解决方案--------------------------------------------------------
我们经常碰到,你查一下代码中可有大事务存在,比如删除全表这样的操作。一般自己不显式开启事务的话,是不会出现死锁的,只有可能是处理超时。