今天在update一些数据时发现极其慢,平时不会有这个问题,虽然这个表的数据量非常大,但是却有相关索引,怎么会这么慢呢?我经过一直的验证,发现并不是所以的update都这么慢,只是相对这条的记录update非常慢然后我怀疑可能是这条记录被锁了,所以就手动去update,这时出现一个错误信息如下:
Oracle-00054:resource busy and acquire with NOWAIT specified.我想问一下,如果我只是在程序端用了update的语句(申明在update时我并未加锁),是否会造成这种现象?

解决方案 »

  1.   

    没有什么建议. 关键就是察看sessIon 看看什么程序锁定了这些记录.然后再找代码看看,是不是错误了设置了锁定.
      

  2.   

    你所指的那几条记录是否被其他程序正在使用,所以你所执行的Update就一直在那里等待...
      

  3.   

    select b.sql_text text,a.sid sid ,a.serial# sria#,a.username username, c.type type,a.machine machine
    from v$session a ,v$sqltext b ,v$access c
    where c.object=upper('&1')
    and c.type in ('TABLE','PACKAGE','PROCEDURE','FUNCTION','PACKAGE BODY')
    and a.sid=c.sid
    and b.address = a.sql_address
    and b.hash_value = a.sql_hash_value
    order by a.sid,a.serial#,b.piece;看看表被什么session锁定了?
      

  4.   

    用这个查看一下锁定的对象
    select a.sid,a.serial#,a.username,a.program,
    c.owner, c.object_name ,a.MACHINE,a.TERMINAL,a.PADDR,a.STATUS,a.SQL_ADDRESS
    from v$session a, v$locked_object b, all_objects c
    where a.sid=b.session_id and
    c.object_id = b.object_id