我们遇到了Oracle数据库存在死锁问题的情况。
我说也许我们应该锁进一些桌子锁,而男人对我的反应是
“除非我误解了表锁的含义,否则我认为表锁不会消除死锁…--它可能会加剧死锁。”
他说的是真的吗?
我们得到的错误:“等待资源堆栈跟踪时检测到死锁”
以下是我们收到的错误的大部分电子邮件:
System Error: Error for Step Type:REMOVE PRED OPEN MAN User Error:
ORA-00060: deadlock detected while waiting for resource Stack Trace:
Timestamp 2015/08/21 14:02:39:130363000130363000
dbms_utility.format_error_backtrace:
ORA-06512: at "OM.FOLDER_PKG", line 2661
ORA-06512: at "OM.DOC_LOG_STEP_PKG", line 2436
dbms_utility.format_error_stack:
ORA-00060: deadlock detected while waiting for resource这可能是有用的,这是一位熟悉这种情况的开发人员每隔几个月就会发生一次,而该公司的DBA似乎无法解决这一问题。
这个项目的主要开发商是这样说的:
除非我误解了您所说的表锁的含义,否则我认为表锁不会消除死锁…它有可能加剧这一问题。
例如:
交易1
交易2
可以用“记录”代替“表”一词。问题依然存在。认为较低的表格粒度而不是记录会使问题变得更糟。
我们可以通过以下方式处理这一问题:
发布于 2015-08-24 12:11:50
除了有人做完整的表锁,还有两件事我可以想到。如果您有一个表,其中有几个列与子表中的同一列有父列关系,如果子列没有索引,则索引它可能会有所帮助。我有一个在线内容管理系统的案例,该系统取消了导致级联锁的索引外键。通过使用Tom查询查找缺少的索引并将它们添加进来,我能够解决这个问题。
http://tkyte.blogspot.com/2009/10/httpasktomoraclecomtkyteunindex.html另一种可能是,有两个触发器在不同的表上触发,并且每个触发器都试图更新另一个表。您可以通过查看从死锁生成的跟踪日志并确定哪些对象和行被锁定,然后检查触发器是否有任何触发器正在运行该SQL来判断这一点。
了解这种情况发生了多长时间,以及在这成为一个问题时发生了什么变化,这将是有帮助的。
https://dba.stackexchange.com/questions/111971
复制相似问题