2015-12-21 92 views
1

我的应用程序在Jboss 2.4上的EJB 1.1上运行并使用Sybase。最近我们看到一个问题,那就是某个表上有无限制的锁,导致后续查询等待锁释放,从而导致整个应用程序失败。数据库管理员声称,该应用程序没有释放任何锁,并且我们没有对处理该特定表的代码进行任何更改。我的问题是,是否有任何常见问题与需要检查的Jboss 2.4或任何特定领域寻找?在Sybase ASE中未释放的锁

我运行的查询只是一个简单的选择/更新语句与read_committed事务隔离。我从jboss池中获取连接并执行select或update,然后关闭连接,语句和结果集。

为什么问题是随机发生的?

对不起,我无法提供任何代码。

+1

只需添加到下面的答案,如果您不希望进行服务器范围更改,也可以基于每个表配置锁。启用数据行时会有额外的开销,所以如果您只有一些表有问题,您可能只想更改这些表。 http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc20021_1251/html/locking/X12029.htm –

+0

我会建议询问数据库管理员有关锁定连接的所有信息。假设此RDBMS是Sybase ASE而不是ASA或其他,则可以在syslocks中查询锁,在锁中可以获取锁定进程的连接标识(spid)。从spid中可以得到sysprocesses中的一些信息:开始时间,用户和一些依赖于应用程序的信息。收集所有,也许这允许识别jboss交易并推断结论。 – Corral

回答

2

对于Sybase ASE,我同时使用两个事务同时使用两个事务。

很难给出一个确切的答案,但没有看到您的任何代码,只能读取有关症状的信息,但调整您的锁定方案应该可以做到。

修复建议:

默认情况下,为Sybase ASE的锁定方案是“所有页”,我发现是容易死锁。要解决死锁,请使用更精细的锁定机制(如“datarows”)。

配置lock scheme

sp_configure "lock scheme", 0, datarows 

参考文献:

编辑:

在评论中Michael Gardner指出,这可以根据每个表格进行更改,这样就可以控制无需更改整个服务器上的锁定方案,并且如果您知道哪些表给你带来问题。

alter table table_name lock datarows 
+1

我也建议通过'alter table'添加更改个别表上的锁定方案到您的答案。使用数据行会产生额外的开销,所以如果只有少数表有问题,那么在整个服务器上更改方案可能并不理想。检查我上面评论中的链接,获取语法 –

+0

@MichaelGardner Thanks!我已经用你的建议更新了我的答案。 –

1

听起来有可能不提交公开的交易?查询master..syslogshold以获得清晰度。

+0

你好,有可能你可以检查这个问题吗? http://stackoverflow.com/questions/34995600/sybase-alternative-way-for-error-to-catch-error – Moudiz