3
跟踪,调试和修复行锁争用
迟到了,我遇到了很多行锁争用。争用的表似乎是特定的表。 通常就是这样- 开发人员1从Oracle Forms前端屏幕开始事务 开发人员2使用同一屏幕从不同的会话开始另一笔交易 大约5分钟后,前端似乎没有反应。检查会话显示行锁争用。每个人都抛出的“解决方案”是终止会话:/ 作为数据库开发人员 如何消除行锁争用? 是否有可能找出存储过程的哪一行引起这些行锁争用 减少/避免/消除此类问题的通用准则是什么? 如果您觉得此问题过于开放/信息不足,请随时进行编辑/让我知道-我会尽力补充一些其他信息。 有问题的表有很多插入和更新,我想说它是最繁忙的表之一。SP相当复杂-为简化起见-它从各种表中获取数据,将其填充到工作表中,在工作表上发生许多算术运算,并且将工作表的结果插入/更新到有问题的表中。 数据库版本为Oracle Database 10g企业版10.2.0.1.0版-64位。逻辑流在两个会话中以相同的顺序执行,事务未保持打开状态的时间过长(或至少我认为如此),并且在事务的主动执行过程中发生了锁定。 更新:表行数比我预期的要大,大约为310万行。另外,在跟踪会话后,我发现该表的几个更新语句没有利用索引。为什么会这样-我不确定。where子句中引用的列已建立索引。我目前正在重建索引。