读书人

处理在线日志数据过大有关问题之一-根

发布时间: 2013-01-17 10:28:55 作者: rapoo

处理在线日志数据过大问题之一--根据rowid批量删除

我们有一个实时日志表数据量太大了(这个不是分区表),这个表不能中断业务,我们先要在线删除部分数据。有这个是生产库不能中断业务不能使用create table rename 的方法来搞。我就老老实实的使用rowid批删除的方法。


1、先创建了一个存储过程:
  SELECT table_name,         ROUND (BLOCKS * 8192 / 1024 / 1024 , 2) "total_size(M)",         ROUND (num_rows * AVG_ROW_LEN / 1024 / 1024 , 2) "used_size(M)",         ROUND ( ( (BLOCKS * 8192 / 1024 / 1024 ) - (num_rows * AVG_ROW_LEN / 1024 / 1024 )), 2) "wasted_size(M)",         ROUND (ROUND ( ( (BLOCKS * 8192 / 1024 / 1024 )- (num_rows * AVG_ROW_LEN / 1024 / 1024 )),2)/                     ROUND (BLOCKS * 8192 / 1024 / 1024 , 2),2)* 100|| '%' wasted_percent    FROM user_tables   WHERE   ROUND (BLOCKS * 8192 / 1024 / 1024 , 2) <> 0ORDER BY 2 desc;

发现表碎片比较厉害,我打算收缩一下表。

4、在线收缩一下表使用的空间,降低水位。
alter table accesslog shrink space。

5、总结,效果还是可以的。查询速度比之前快了一点,磁盘也省了。但是存储过程和表shrink的时间太长了。
还是考虑分区表。

读书人网 >其他数据库

热点推荐