1

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

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

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

很抱歉,我无法提供任何代码。

4

2 回答 2

2

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

于 2015-12-28T14:00:33.907 回答
2

对于 Sybase ASE,我同时使用两个事务时出现了相同的症状。

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

建议修复:

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

要配置lock scheme

sp_configure "lock scheme", 0, datarows

参考:

编辑:

在评论中,Michael Gardner 指出,这可以在每个表的基础上进行更改,这样您就可以控制不需要更改整个服务器上的锁定方案,并且如果您知道哪些表正在提供,则会产生更少的锁定开销你的问题。

alter table table_name lock datarows
于 2015-12-21T22:21:13.703 回答