Informix表已被锁定

时间:2010-11-24 10:45:03

标签: locking informix

我们的J2EE Web应用程序针对Informix 9.40运行。

有时一个表被锁定,然后任何具有访问该表的SQL代码的JSP都将返回错误。我知道如何使用onstat -k来查看当前的锁,但我想知道有没有办法跟踪 所有锁都发生在历史记录和导致表锁的相关会话和SQL语句中?

因为我不知道接下来会发生同样的错误......

1 个答案:

答案 0 :(得分:2)

首先,您应该知道IBM不再支持IBM Informix Dynamic Server(IDS)版本9.40;也不是后继版本,10.00。您应该计划升级,可能升级到11.70,可能只升级到11.50。

没有办法全面跟踪锁定。其中一个原因是这种跟踪会对系统造成相当大的减速 - 非常显着的减速。锁通常是共享内存的第二大组件(在包含数据页的缓冲池后面),因此它们很多,并且它们通常非常活跃,并且锁通常是短暂的(对于小部分一秒,甚至几分之一毫秒)。从这种日志记录中生成的数据量非常大,很难筛选出来。

如果您使用的是更高版本,可能有一些选项可以帮助DB-Cron和Admin API(不一定是这样,但机会会更好),但是对于9.40,选项是相当严格限制的。

我能想到的最接近的方法是使用onstat -k -u -r 1进行快照。锁定表上的-k报告(如您所知); -u报告用户(会话),-r 1每秒重复一次命令。您可以根据需要添加其他数据请求; -g ses会在运行命令时提供更详细的会话报告(如果您是DBSA,通常是用户informix)。但这是1秒的抽样...唯一的好消息是,当把锁放在桌子上时,它可能会暂停一段时间(因为你注意到了问题),所以-g ses或{ {1}}输出将告诉您谁应用锁或什么。但是过渡期间的数据量会很大。

您需要查看系统周围的所有SQL,查找表锁定内容。时机有什么一致性吗?例如,可能是由cron作业运行的UPDATE STATISTICS吗?我相信,这会迅速获得表锁;自从您的IDS版本以来,它也在版本中得到了改进。