监控项目,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. 哪些因素会导致高水位? 除了频繁的删除,和建表的初始化参数有关系否?谢谢各位!
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. 哪些因素会导致高水位? 除了频繁的删除,和建表的初始化参数有关系否?谢谢各位!
move , shrink 都试过了,刚开始挺好,但是过了7天后,高水位又上去了。
2、有批量写入时,是否加了 /*+ append*/ 选项;
谢谢。
1. 没有大数据量的写入,每个10分钟,我就会转移一次。
2. 写入数据库是 采用 原始的insert 方式,没有任何并行操作。
如果这样,所有oracle 数据表时间长了,都存在高水位, 因为都会存在插入和删除操作的?
如果你的数据插入频率和数量都是稳定的,理论上水位线应该不会出现暴增的情况
有可能是从实时表转移到历史表是需要时间的,而这个过程中你的应用还在实时插入,所以实时表的水位线会有一点点增加。
另外如果表格没有修改动作,把Pctfree降低,让每个块尽可能多的存放数据
http://blog.sina.com.cn/s/blog_6ff05a2c0100mjrw.html
建议迁移完毕后,马上truncate原表,这样的话,高水位就会下去!