处理在线日志数据过大问题之一--根据rowid批量删除
我们有一个实时日志表数据量太大了(这个不是分区表),这个表不能中断业务,我们先要在线删除部分数据。有这个是生产库不能中断业务不能使用create table rename 的方法来搞。我就老老实实的使用rowid批删除的方法。
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的时间太长了。
还是考虑分区表。