Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle行锁的长队列时间_Oracle_Rowlocking - Fatal编程技术网

oracle行锁的长队列时间

oracle行锁的长队列时间,oracle,rowlocking,Oracle,Rowlocking,当我在Oracle9DB中运行下面的Sql命令时,我一直在运行“enq:TX-row lock configuration”。 表mytable是一个小表,不到300行 UPDATE MYTABLE SET col1 = col1 + :B3 , col2 = SYSDATE WHERE :B2 = col3 AND :B1 = col4 我同时运行10个线程,有些线程要等待10秒才能有机会更新。我知道我将面临这个死

当我在Oracle9DB中运行下面的Sql命令时,我一直在运行“enq:TX-row lock configuration”。 表mytable是一个小表,不到300行

UPDATE MYTABLE
SET     col1 = col1 + :B3 ,
        col2    = SYSDATE
WHERE   :B2            = col3
    AND :B1        = col4
我同时运行10个线程,有些线程要等待10秒才能有机会更新。我知道我将面临这个死锁问题,但对我来说,问题是它们应该能够更快,因为表很小,所以更新它会很快

编辑:我无法更改此代码,它位于第三方应用程序中。我只能调整数据库

如何提高rowlock队列的速度?
如何提高等待时间,使线程运行更快?

如果您不想被阻止,请不要尝试盲目更新。首先执行选择更新NOWAIT。如果引发异常(ORA-00054),则表示另一个会话当前正在处理该行。在这种情况下,根据您的要求,您可以尝试更新另一行(是否尝试构建队列/出列进程?),等待(dbms_lock.sleep)或向调用应用程序返回错误消息


如果先用FOR UPDATE NOWAIT锁定行,您将永远不会遇到死锁。

您的更新通常会影响多少行?每个更新只影响一行。但很多时候,我有十个线程试图更新同一行。忘记说,但我不能改变代码。现在我编辑了我的question@kurast:更新本身可能不会花费很多时间。等待其他会话提交/回滚的时间。如果这些线程是后台批处理作业,则争用可能是预期的/无害的。如果它们是活动的前台会话,为什么要更新同一行?