频繁用delete删除容易造成高水位,delete之后数据虽然没有了,但占用的空间还在
如果删除临时数据时是全表删除的话,建议使用truncate进行清除,这样直接就能把水位降到0了

解决方案 »

  1.   

    1.  tt_vehicle_t v, tt_device_t  这两张表的数据是否很大?
    2. 手动收集一下统计信息。
    3. 版主所言极是。 1#
      

  2.   

    现在应该 怎么才能提高 DML tmp_query_car 这个表的速度 啊,,求指教
      

  3.   


     tt_vehicle_t v 这个表很大,是整个数据库 最大的一个表。
     tt_device_t 这个表不是特别大,什么办法才能解决 提高 DML   tmp_query_car 这个表的速度 的目前问题啊。。
      

  4.   

    速度慢应该是高水位造成的,
    删除临时数据时是全表删除的话,改为使用truncate进行清除表
    如果不是全表删除的话,就需要定期执行下面的操作定期降低水位
    1、将DML tmp_query_car表的数据导出
    2、执行truncate table DML tmp_query_car
    3、将数据导回
      

  5.   

    原来delete 删除内容但不释放空间,每delete一行 都会在事务日志中为所删除的每行记录一项。
      

  6.   


    删除tmp_query_car 这个表时 都是删除里面的全部数据, 它本身就是用来临时存放  P_QUERY_CAR 这个存储过程执行完后 传过去的数据。明白了,是不是解决现在这个高水位问题   先定期执行下truncate table DML tmp_query_car    以后 再删除 tmp_query_car这个表的数据时 只要使用truncate 就可以了?
      

  7.   


    再请教个问题:
    还是上面 这一个存储过程 和 这两个表,   之前也遇到过  DML操作cph_tmp,tmp_query_car这两个表的速度可以,但exec P_QUERY_CAR时执行速度很慢,平时在数据据量大的时候,执行这个存储时也都在60秒之内,突然exec P_QUERY_CAR时达到了40分钟左右,还出现过一直exec P_QUERY_CAR 停止不了这种状态,,像这样的情况,一般是什么原因啊?
      

  8.   


    再请教一个问题:
    还是上面 那一个存储过程 和 两个表,还出现这样的情况:DML操作cph_tmp,tmp_query_car这两个表的速度很快,但exec P_QUERY_CAR时却很慢,一般数据量大的时候执行速度也都在60秒之内,后来 exec P_QUERY_CAR这个存储过程的速度高达40多分种,而且还出现过一直exec P_QUERY_CAR停止不了,只能杀这个存储过程的会话才能结束这种状态,这种情况一般是什么原因啊?
      

  9.   

    这个原因吗,只能靠猜了
    1、P_QUERY_CAR操作的数据量很大吗?是否当时数据库undo空间紧张,造成io等待
    2、是否其他用户正在操作表中的数据,造成执行P_QUERY_CAR过程时需要等待其他用户提交之后才能继续执行
      

  10.   


    cph_tmp表中的记录多时,P_QUERY_CAR操作就会很大, 它读取cph_tmp中的hphm数据,然后再去找 tt_vehicle_t这个表中的相应的记录, tt_vehicle_t 表是整个数据库记录最多的一个表。