监控项目,16个传感器,采样频率50hz, 建了一个表存储数据,结构简单:时间+ 数值
 
Create Table real_data(
    record_time timestamp(3),
    ac_1 Float,
    ac_2 Float,
    ac_3 Float,
    ac_4 Float,
    ac_5 Float,
    ac_6 Float,
    ac_7 Float,
    ac_8 Float,
    ac_9 Float,
    ac_10 Float,
    ac_11 Float,
    ac_12 Float,
    ac_13 Float,
    ac_14 Float,
    ac_15 Float,
    ac_16 Float
    )
    Tablespace data_test;
现在定期 10分钟,将数据表移出到另一个表,用job做的。有个问题,10天后的该表的高水位会达到6000多,查询效率降低很多。其实高水位4w多,检索效率没有明显下降。SQL> ANALYZE TABLE AC_REAL_DATA ESTIMATE STATISTICS;
    Table analyzed    SQL> SELECT table_name,num_rows,blocks,empty_blocks FROM user_tables WHERE table_name='AC_REAL_DATA';
    TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS
    ------------------------------ ---------- ---------- ------------
    AC_REAL_DATA                            0      61109          331
疑惑的是:1. 这个表最大的容量是 10分钟数据,即3w 条数据,怎么高水位可以达到6W 呢?2.  哪些因素会导致高水位? 除了频繁的删除,和建表的初始化参数有关系否?谢谢各位!

解决方案 »

  1.   


    move , shrink 都试过了,刚开始挺好,但是过了7天后,高水位又上去了。
      

  2.   

    如果做过了 shrink ,那就跟 初始参数没什么关系了;排查以下两个情况:1、某个时刻,大概量的数据写入,比如 超过 10W 
    2、有批量写入时,是否加了 /*+  append*/ 选项;
      

  3.   


    谢谢。
    1.  没有大数据量的写入,每个10分钟,我就会转移一次。
    2.  写入数据库是 采用 原始的insert  方式,没有任何并行操作。
      

  4.   

    nd目前就两个表,做测试的iyou。一个 实时表 ,一个历史表,实时表10分钟导到历史表中去。难道单个表的高水位 和其他表 还有关联吗? 
    如果这样,所有oracle 数据表时间长了,都存在高水位, 因为都会存在插入和删除操作的?
      

  5.   

    你的10分钟的插入水位线到底是多少,10天后有增加了多少。
    如果你的数据插入频率和数量都是稳定的,理论上水位线应该不会出现暴增的情况
    有可能是从实时表转移到历史表是需要时间的,而这个过程中你的应用还在实时插入,所以实时表的水位线会有一点点增加。
    另外如果表格没有修改动作,把Pctfree降低,让每个块尽可能多的存放数据
      

  6.   

    如果每次转移表后没有使用turncate而只靠delete后空间的重用,还是会慢慢扩展高水位线的。
    http://blog.sina.com.cn/s/blog_6ff05a2c0100mjrw.html
      

  7.   

    楼主,你不是定期10分钟迁移表数据吗?
    建议迁移完毕后,马上truncate原表,这样的话,高水位就会下去!