【发布时间】:2026-01-21 00:20:07
【问题描述】:
应用程序使用官网提供的JDBC驱动连接到oracle 11G数据库。当来自连接到同一架构的不同实例的许多用户(大约 50 个)开始使用该应用程序时,我在应用程序周围遇到了一些冻结,当我运行查询以获取锁定会话和锁定对象时,我发现只有“行独占” lock 类型,通常不应锁定所有表并允许多个会话执行 DML 查询。因此我的问题是行独占表何时可以锁定整个表或引发这些冻结。
注意:我在论坛中查看了一些 MAXTRANS 和 ITL 配置,这些参数会导致这些冻结吗?
谢谢
【问题讨论】:
-
你说得对,Oracle 中的行锁永远不会升级。您是否正在执行任何 DDL,或使用特定行来保持运行总计或维护序列号......或其他可能需要多个会话修改单行的事情?
-
是的,我正在使用序列来插入地址表,这是否会导致问题,并且我的所有用户只执行 SELECT/INSERT/UPDATE/DELETE 查询
-
使用 Oracle 序列对象不会——您当然想检查缓存大小,但不会导致表行锁定。
-
但是你同意吗,如果我有一个小的 maxtrans 可能低于 50,假设我每个用户都有一个事务,填充 ITL 会导致会话进入等待状态吗?
-
要诊断出您最好通过等待事件跟踪它们,因为 ITL 等待中的队列会明确显示在那里。
标签: oracle jdbc database-administration table-locking