基于单个业务表浅谈ORACLE高水位线

        我这里有个附表,查了下有20574161条数据,没有建立索引,查询一条数据时间大概为96S左右,查询水位线:

        select blocks, empty_blocks from dba_tables where table_name='I_GENER_D';

    

        又查了下对应的表空间使用率:

        select Round(total.MB,2) as Total_MB,
  Round(total.MB-free.MB,2) as Used_MB, Round((1-free.MB/total.MB)*100,2) || '%' as Used_Rct
from (select tablespace_name,Sum(bytes)/1024/1024 as MB from dba_free_space group by tablespace_name) free,
  (select tablespace_name,Sum(bytes)/1024/1024 as MB from dba_data_files  group by tablespace_name) total
WHERE free.tablespace_name = total.tablespace_name and total.tablespace_name = 'ORACLE_DATA03';

        我们把数据删除一部分:

        delete from I_GENER_D where  ts<'2017-11-29 22:08:01';--执行结果:19984922行 已删除。

        我们这时候在查一下表数据和水位线以及表空间使用率、单条数据查询:

        

        


       表数据只剩58W条了查询时间还是很长,水位线和表空间占用率也没有变化,因为delete并不会降低水位线以及释放表空间占用。而且我们发现单挑数据查询仍然很慢,按理说数据删除95%以上,查询效率应该大幅度提升,但这里并没有,这就是水位线高影响的。

        解决方案就是表重建( alter table table_name move;)、压缩(alter table table_name shrink space;)、复制表(复制要保留的数据到临时表t,drop原表)等等。

        我们释放压缩下表,然后再查询看看效果。

        高水位线是oracle数据库的存储特性,所以数据库数据delete后不进行任何操作,效率并不会提升。小伙伴们记得以后遇到这种情况知道怎么优化就OK了。

https://mp.weixin.qq.com/s/-yfWQOn8MBliQihddeTCjQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值