Oracle表查询慢的问题(高水位)解决方案

最近工作中碰到一个问题,生产环境中某一张表查询变的好慢,而本地同样的镜像环境查询却很快,研究了半天都没有发现问题。 

开会进行讨论,发现一条线索, 由于业务需求,这表中的大部分数据全部被delete删除了,只保留了2w.

因此,推断此问题很有可能就是表的高水位问题。 下面我们就来验证一下:


第一步,查询当前表的blocks大小

执行搜集统计

    ANALYZE TABLE Table_A COMPUTE STATISTICS;

查询blocks大小
    select table_name,num_rows,blocks,empty_blocks 
      from user_tables 
     where table_name='Table_A';

查询结果:TABLE_A    421669     143320           40

第二步,查询当前表实际使用的blocks大小

    select count(distinct dbms_rowid.rowid_block_number(rowid)) used_blocks 
      from Table_A;

查询结果:11369


情况已经很明显了,实际使用的blocks远远小于当前表的blocks.  所以我们需要将表的空间释放掉,

    alter table Table_A move;
    alter index IDX_ID rebuild online;

注:对表进行move以后,需要重建失效的索引


重新对表进行查询,查询速度很快,问题解决。 


进一步学习Oracle高水位知识,可参考:http://blog.csdn.net/tianlesoftware/article/details/4707900#comments




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值