我正面临一些锁超时问题,我需要更好的工具来找到根本原因。考虑IBM堆栈、WebSphere 8.5和DB2 10.5,并给出如下锁信息:
Lock Information:
Lock Name: 000301230000000008C0000252
Lock Type: Basic RECORD lock(DMS/IXM)
Lock Specifics: (obj={4;511}, rid=d(0;2440;6), x0000000002A00001)
Lock Requestor:
...
Requesting Agent ID: 28648
Coordinator Agent ID: 28648
...
Lock Owner (Representative):
...
Requesting Agent ID: 295623
Coordinator Agent ID: 295623
...
假设我有两个JDBC事务,一个持有锁,另一个等待释放锁,我如何通过编程方式从JDBC连接(例如代理ID)获取事务信息,以便在我的应用程序中诊断哪个JDBC连接示例持有锁?假设我有一个多线程、多服务器环境。
我在这个链接上看到了一个关于Oracle、SQLServer和PostgreSQL的类似问题:How to get the current database transaction id using JDBC or Hibernate?但我没有找到任何有关DB2的信息
要对锁定原因进行故障排除,我需要找到:
- SQL锁定表
- 等待释放锁的SQL
- 上述SQL中涉及的绑定参数(数据)
2条答案
按热度按时间vjhs03f71#
到目前为止,为了帮助我更好地诊断DB2和WebSphere锁的相关性,我发现需要做以下工作。
首先,我需要知道哪些表发生了死锁。我可以通过发出以下命令之一找到它:
然后,我可以根据前面命令的结果查询ROWID:
根据表中的行信息(如果处于锁定状态,则不会提交),我可以将其与应用程序关联起来,以发现哪个服务器导致了问题。