UPDATE TSA_COMBINED_ANS 
SET 
SCORED_ANS_MARK = '' 
WHERE AMK_REQUEST_ID = 30540;  we found that the data volume in "TSA_COMBINED_ANS " is very large. For AMK_REQUEST_ID = 30540, there is 3165259 record.how can this sql running for 4 days, what is the problem? it's anyone know why?

解决方案 »

  1.   

    三百多万条记录,也不着四天吧?你对这个表加个主键或索引,然后再去update.
      

  2.   

    有锁发生么?v$lock
    有等待发生么?v$session v$session_wait表pctfree ,pctused如何?  索引如何的?执行计划看看
      

  3.   

    更新太慢了。
    先把创建一张表获取 AMK_REQUEST_ID = 30540的 数据(不包括SCORED_ANS_MARK字段) ,设为1 
    然后对TSA_COMBINED_ANS  这个进行delete 数据(AMK_REQUEST_ID = 30540) 设为2
    然后把刚才的数据(1)插入到(2)中。
    当然,你先对TSA_COMBINED_ANS进行备份好。
      

  4.   

    给数据库加并行 /*+parallel(a,10)*/ 嘿嘿
      

  5.   

    上面不是已经有图说明explain plan了吗?
    你说的执行计划指的是什么,具体怎么操作?
      

  6.   

    UPDATE TSA_COMBINED_ANS 
    SET 
    SCORED_ANS_MARK = '' 
    WHERE AMK_REQUEST_ID = 30540;  id 为30540 的记录数有300W条 。 CREATE INDEX TSA_COMBINED_ANS_N17 ON TSA_COMBINED_ANS(AMK_REQUEST_ID, SCORED_ANS_MARK); CREATE INDEX TSA_COMBINED_ANS_N18 ON TSA_COMBINED_ANS(AMK_REQUEST_ID);应该用哪个index?
      

  7.   

    肯定是有锁了。
    查看一下v$lock或v$sesson_wait数据字典中的信息。
      

  8.   

    能不能有人说一下具体该怎么检测问题啊。应该怎么去查v$lock和v$sesson_wait的信息,具体点的解决方案。有或者,建index只需要建在AMK_REQUEST_ID?还是需要建组合index(AMK_REQUEST_ID,SCORED_ANS_MARK )UPDATE TSA_COMBINED_ANS  
    SET  
    SCORED_ANS_MARK = ''  
    WHERE AMK_REQUEST_ID = 30540; 
      

  9.   

    Login with a DBA role user, you could try to use:
    select * from v$locked_object;if your table name is in this list, then you could find out who locks it.
    then you could kill his session.