锁不在Sybase ASE中释放

时间:2015-12-21 21:33:35

标签: java-ee jboss ejb sybase database-locking

我的应用程序在Jboss 2.4上的EJB 1.1上运行并使用Sybase。最近我们看到一个问题,即特定表上存在无限期锁,导致后续查询等待锁被释放,因此整个应用程序失败。数据库管理员声称应用程序没有发布任何锁定,我们没有对处理该特定表的代码进行任何更改。我的问题是Jboss 2.4是否存在需要检查或需要查找的特定区域的常见问题?

我运行的查询只是一个带有read_committed事务隔离的简单选择/更新语句。我从jboss池获得连接并执行select或update,然后关闭connection,statement和resultset。

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

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

2 个答案:

答案 0 :(得分:2)

对于Sybase ASE,我在同一时间使用两个事务具有相同的症状。

很难在没有看到任何代码的情况下给出一个坚定的答案,只能阅读有关症状,但调整锁定方案应该可以解决问题。

建议修复:

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

配置lock scheme

sp_configure "lock scheme", 0, datarows

<强>参考文献:

修改

在评论中Michael Gardner指出,这可以在每个表的基础上进行更改,这使您可以控制不需要更改整个服务器上的锁定方案,并且如果您知道哪个锁定方案将导致更少的锁定开销桌子给你带来了问题。

alter table table_name lock datarows

答案 1 :(得分:1)

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