从报错信息来看,是产生了锁超时,这里就需要找到持有锁的连接和等待锁的连接信息。
1、首先查询目前数据库存在的锁等待
db2pd -d DBNAME -wlocks
有三列信息需要关注的
agent_id :应用程序 id
lockname:锁名字,重点关注锁名一样的信息
sts :锁状态,如果是‘G’说明应用持有这个锁,‘W’说明应用等待这个锁。
2、根据前面查到的 agentid来查application新
db2pd -d DBNAME -app app=agentid
或者
db2pd -d DBNAME -apinfo app=agentid
这样可以查到锁和被锁的连接情况。
还有一种就是直接查系统表 SYSIBMADM.MON_LOCKWAITS。
select LOCK_NAME,REQ_APPLICATION_HANDLE,REQ_STMT_TEXT,HLD_APPLICATION_NAME,HLD_CURRENT_STMT_TEXT from SYSIBMADM.MON_LOCKWAITS with ur
用这条语句可以查出正在锁和锁等待的应用信息,更多信息可以选择更多列。
记住,上面的查锁等待信息的操作需要在锁等待时操作,如果出现了这个报错说明已经超时回滚了,也就差不到信息了。