写了个应用,循环地删除一些表里的所有数据,然后再往这些表中插入一些数据,开始执行时4秒就能完成所有的操作,一天跑下来后,执行一遍要10多秒,表中的数据量一直删除再插入,数据量保持规模变化不大,而且,被操作的表的日志已经被我关闭了,所以觉得有点奇怪,不知道是什么问题???

解决方案 »

  1.   

    在主关键字上要建立索引。删除后,索引先禁一下,再rebuild。
      

  2.   

    也可能是你老是删除数据,导致hwm越来越高。
    在晚上清除一上.sql> alter table you_table_name move;
      

  3.   

    同意楼上几位,重建成索引,清HWM
      

  4.   

    补充说明一下:我把应用停了之后,重新开,时间又比较短了,所以觉得不是索引的问题,hwm的问题不确定,感觉也不像,按道理重新插入的数据应该先使用原来的空间,hwm不会太大才对
      

  5.   

    好象是没问题,是Oracle被你惹恼火了
      

  6.   

    oracle say: "你老是插我做啥?换个姿势好不好哎."
      

  7.   

    楼上说的好那个,呵呵。>被操作的表的日志已经被我关闭了
    数据库是在归档还是非归档?
    insert时是insert /*+ append */的吗?>我把应用停了之后,重新开,时间又比较短了
    想当于把一个session关掉,重连一个session,然后就快了。难道是 sga,pga等分配不够?
      

  8.   

    全部删除的话可以试试truncate,也有可能内存分配有问题
      

  9.   

    猜测多麻烦啊。直接看看具体的等待事件不就知道为什么了。SELECT W.EVENT, S.STATUS, Q.SQL_TEXT
      FROM V$SESSION_WAIT W, V$SESSION S, V$SQL Q
     WHERE W.SID = S.SID
       AND Q.HASH_VALUE = S.SQL_HASH_VALUE
       AND W.EVENT NOT LIKE '%message from client%'
       AND S.SID =&yoursid ;
      

  10.   


    /--写个存贮过程:
    /--1.先删除符合条件的记录,再插入;
    /--2.再写个存贮过程,主要是重建索引,加入如下语句:
     spool c:\rebuild_index.sql   
     select   'alter index '|| index_name|| ' rebuild' from dba_indexes;   
     spool   off   
     @ c:\rebuild_index.sql;  
     
    /--如果可以的话,可以做个JOB,定时执行这个存贮过程。
      

  11.   

    改一下:
    /--写个存贮过程:
    /--1.先删除符合条件的记录,再插入;
    /--2.重建索引,加入如下语句(存贮过程中直接执行index rebuild可能有误):
     spool c:\rebuild_index.sql   
     select   'alter index '|| index_name|| ' rebuild' from dba_indexes;   
     spool   off   
     @ c:\rebuild_index.sql;  
     
    /--如果可以的话,可以做个JOB,定时执行这个存贮过程。