与多个用户一起测试我的应用程序时,我遇到了ORA-00060死锁错误。我不确定如何确定此错误的原因,因此,如果有人可以帮助我,将不胜感激。
我查看了为此事件生成的跟踪文件,它显示了导致此问题的查询:
UPDATE TABLE_A SET CK=CK+1 WHERE A_ID=(
SELECT A_ID FROM TABLE_B WHERE SOME_COLUMN=:SOMECOLUMN
)
它也产生了这个:
[Transaction Deadlock]
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TM-0002a675-00000000 51 200 SX SSX 52 22 SX SSX
TM-0002a675-00000000 52 22 SX SSX 51 200 SX SSX
session 200: DID 0001-0033-0000014A session 22: DID 0001-0034-0000005A
session 22: DID 0001-0034-0000005A session 200: DID 0001-0033-0000014A
Rows waited on:
Session 200: obj - rowid = 0002A6B1 - AAAqaxAAUAAAAFTAAA
(dictionary objn - 173745, file - 20, block - 339, slot - 0)
Session 22: obj - rowid = 0002A6B1 - AAAqaxAAUAAAAFTAAA
(dictionary objn - 173745, file - 20, block - 339, slot - 0)
我如何使用以上信息来找出导致问题的原因?TABLE_A或TABLE_B上都没有任何未索引的外键(我相信这通常是导致这种类型错误的原因)。
当我运行此查询时:
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OBJECT_ID = 173745;
我在完全不同的表上获得了主键的名称!这可能是导致僵局发生的线索吗?
因为涉及的排队是“ TM”排队,并且因为持有锁的模式是“ SX”,而等待锁的模式是“
SSX”,所以我可以绝对确定地告诉您,这是由于到外键关系,其中引用表(子表)列未建立索引。如果您寻找未索引的外键并添加索引,则此问题应消失。
希望能有所帮助。
PS我的演示文稿“了解和解释死锁,或如何处理ORA-00060”可在OakTable网站http://www.oaktable.net上下载。在“贡献的文件”部分中查找。
我在运行以下代码时遇到了一个奇怪的问题: 首先,代码是用OpenJDK-11和OpenJFX-11编译的,在Windows中运行良好(即退出call)。 然而,如果我在Linux(特别是Ubuntu20.04)上运行这个程序,调用会锁定线程,程序永远不会退出。注释出调用将使其重新正常工作。 我只是在(这是SystemLookAndFeel返回的结果)或者我在这里做了什么错误/意外的事情?
seata版本:1.4.0,但1.4以下的所有版本也都有这个问题 问题描述:在一个全局事务中,一个分支事务上的纯查询操作突然卡住了,没有任何反馈(日志/异常),直到消费端RPC超时 问题排查 整个流程在一个全局事务中,消费者和提供者可以看成是全局事务中的两个分支事务,消费者 --> 提供者 消费者先执行本地的一些逻辑,然后向提供者发送RPC请求,确定消费者发出了请求已经并且提供者接到了请求 提供者
问题内容: 现在,当多个用户正在使用该应用程序时,我的应用程序中经常会出现此“ ora-00060在等待资源时检测到死锁”错误。我已经从oracle Admin获得了跟踪文件,但是在读取它时需要帮助。以下是跟踪文件中的一些数据,我希望这将有助于找到原因。 如果有人可以告诉我“死锁图::”在说什么,我将不胜感激。同样,在该节上等待的行表示没有行。 我还在一些博客中读到,跟踪文件中的“ sqltxt”
我遇到了一些使用c#的/关键字进行异步编程的最佳实践(我是c# 5.0的新手)。 给出的建议之一如下: 稳定性:了解您的同步上下文 ...一些同步上下文是不可重入的和单线程的。这意味着在给定时间只能在上下文中执行一个工作单元。这方面的一个例子是Windows UI线程或ASP.NET请求上下文。在这些单线程同步上下文中,很容易死锁。如果您从单线程上下文中生成一个任务,然后在上下文中等待该任务,您的
我试图使用C++11的std::condition_variable,但是当我试图从第二个线程锁定与其关联的unique_lock时,我得到一个异常“资源死锁已避免”。创建它的线程可以锁定和解锁它,但不能锁定第二个线程,即使我非常肯定unique_lock不应该在第二个线程试图锁定它的地方已经锁定。 FWIW我在Linux中使用gcc4.8.1和-std=gnu++11。 我已经围绕conditi
在使用信号量时,我应该注意多线程问题吗?在我的测试之后,似乎有一段时间信号灯#release not cause acquire wake up,即使有足够的许可证。 底部是我的测试代码。 带有2个许可证的信号灯 Thread3和Thread2先向上 线程3获取许可,等待锁,锁将由线程1通知 线程2获取许可,等待锁1,锁1将由线程3通知 线程1启动,线程1和线程2先睡眠30ms启动 线程1通知锁定