由于oracle锁定,应用程序变得无法响应

时间:2016-05-16 14:10:44

标签: oracle jdbc database-administration table-locking

使用官方网站提供的JDBC驱动程序将应用程序连接到oracle 11G数据库。当来自连接到同一架构的不同实例的许多用户(大约50个)开始使用该应用程序时,我在应用程序周围遇到一些冻结,当我运行查询以获取锁定会话和锁定对象时,我只发现“行独占”锁类型,通常不应锁定所有表,并允许多个会话执行DML查询。因此,我的问题是什么时候行独占表可以锁定整个表,或者说这些冻结。

注意:我在论坛中浏览过并看到了一些MAXTRANS和ITL配置,这些参数是否会产生这些冻结?

谢谢

2 个答案:

答案 0 :(得分:0)

我认为你的条款很混乱..“Row Exclusive”锁意味着'我已经锁定了这一行......没有其他会话可以更新它'。

所以如果你有50个会话都尝试更新或删除特定行,那么是..你将有争用。这将严重限制你的表现。

所以我猜你的应用程序可能缺少一个commit语句,可以在修改行后释放锁定。

你说你正在使用序列..你使用的是一个实际的oracle序列(即create sequence my_seq;),还是你正在使用像select max(id)+1 from sequence_table那样的自定义事物,这将是另一个坏主意。

答案 1 :(得分:0)

也许现在责怪甲骨文还为时过早。它可以是servlet容器配置,例如没有足够的exec线程。或者它可以是内部争用。很多事情都可能出错。识别瓶颈的一种快速方法是在应用程序遇到问题时获取一个线程转储,并在应用程序周围进行一些冻结。并看看你的线程卡在哪里。您可以通过向您的Java进程发送kill -3来获取线程转储。将它发布在这里并很乐意看到它。