当我在oracle 9 DB中运行下面的Sql命令时,我一直遇到"enq: TX - row锁争用“。该表mytable是一个小表,少于300行。
UPDATE MYTABLE
SET col1 = col1 + :B3 ,
col2 = SYSDATE
WHERE :B2 = col3
AND :B1 = col4我同时运行10个线程,一些线程等待10秒才有机会更新。我知道我将面临这个死锁问题,但对我来说,问题是它们应该能够更快一些,因为表很小,所以更新它将是快速的。
编辑:我不能修改这段代码,它在第三方应用程序中。我只能调整数据库。
我能做些什么来提高行锁队列的速度?如何改进这个等待时间,使我的线程运行得更快?
发布于 2010-03-11 14:49:45
,如果您不想被阻塞,不要试图盲目地更新。首先执行更新NOWAIT的选择。如果引发异常(ORA-00054),这意味着另一个会话当前正在处理该行。在这种情况下,根据您的需求,您可以尝试更新另一个行(您是在构建队列/排队列进程吗?)、等待(dbms_lock.sleep)或向调用应用程序返回错误消息。
如果您首先锁定了用于更新NOWAIT的行,那么永远不会遇到死锁。
https://stackoverflow.com/questions/2425627
复制相似问题