db2 V9.1死锁

时间:2014-12-12 15:16:52

标签: sql db2 odbc deadlock

我的应用程序中有4个不同的服务,SELECTUPDATE位于AIX 6.1上的数据库(db2 v9.1)中的同一个表上,而不是300,000个记录中的大表.4个服务工作以并行方式执行,每个服务按顺序执行(不是并行)。 每天我遇到可怕的死锁问题,db挂起大约5到10分钟,然后它恢复到正常的性能。 我的服务是以一种方式同步的,这使得它们在同一行上永远不会SELECTUPDATE所以我相信即使发生了死锁,它应该在行级别而不是表级别,对吗? 此外,在我的SELECT查询中,我使用"ONLY FOR FETCH WITH UR",在db2 v9.1中,这意味着不将该行仅作为读取目的锁定,并且不会更新(UR =未提交读)。 关于什么事发生的想法和原因?

1 个答案:

答案 0 :(得分:0)

首先,这些肯定不是死锁:DB2会在几秒钟内通过回滚其中一个冲突的事务来解决死锁。您遇到的情况很可能是锁定等待。

至于发生了什么,您需要在锁定发生时对其进行监控。您可以使用db2pd实用程序,例如

db2pd -d mydb -locks showlocks

db2pd -d mydb -locks wait

您也可以使用快照监视器:

db2 update monitor switches using statement on lock on
db2 get snapshot for locks on mydb

或快照视图:

select * from sysibmadm.locks_held
select * from sysibmadm.lockwaits