【第22期】观点:IT 行业加班,到底有没有价值?

oracle笔记——索引

原创 2016年06月01日 15:58:50

数据库运行一定的时间后,索引方面可能出现两种问题:


一、新建了从未被命中的索引,占用空间资源,增加DML操作的性能消耗;

二、数据的变动导致索引碎片的增加,具体表现为索引所占用空间增加,查询效率下降;


问题一,可以对占用空间过大的索引进行分析,具体步骤:

1、查看当前用户所用表空间下的索引情况

select t.segment_name,t1.TABLE_NAME,t.bytes / 1024 / 1024 / 1024 sizeG
  from user_segments t,user_indexes t1
 where t.segment_name=t1.INDEX_NAME order by sizeG desc

2、将占用空间较大的索引开启监控

alter index {index_name} monitoring usage

3、过段时间查看监控结果

select * from SYS.V$OBJECT_USAGE

4、如果USED字段一直为NO,则表示此索引从未被使用过;


问题二:对索引进行分析,分析过程中会造成锁表,建议将数据异地恢复至从库后进行

以下为我的索引分析操作步骤:

1、新建一张临时表存放分析结果

create table TEST
(
  name        VARCHAR2(30),
  lf_rows     NUMBER,
  lf_blks     NUMBER,
  del_lf_rows NUMBER,
  ratio       NUMBER
)

2.通过存储过程循环分析,并将分析结果写入结果表中,当前会话分析第二个索引后,分析结果会前第一个覆盖,因此每分析完一笔保存一笔

[以下过程只分析索引占用空间排名前100的索引]

create or replace procedure p_index_check is
  cursor index_name is
    select segment_name from (select t.segment_name,t1.TABLE_NAME,t.bytes / 1024 / 1024 / 1024 sizeG
  from user_segments t,user_indexes t1
 where t.segment_name=t1.INDEX_NAME order by sizeG desc) where rownum<=100;
  sqlt varchar(200);
begin
  for iname in index_name loop
    begin
      sqlt := 'analyze index ' || iname.segment_name || '  validate structure ';
      EXECUTE IMMEDIATE sqlt;
      insert into TEST select t.name,
       t.lf_rows,
       t.lf_blks,
       t.del_lf_rows,
       (t.del_lf_rows / t.lf_rows) * 100 ratio
  from index_stats t where t.name=iname.segment_name;
  commit;
    EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line(SQLERRM);
    end;
  end loop;
end;

3、查看结果表上的ratio字段,其值为碎片比例,如索引程度过高

使用ALTER INDEX indexname REBUILD ONLINE;重建

【生产环境记得添加online,以免锁表】

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

oracle学习笔记——视图、索引(转载)

oracle学习笔记——视图、索引(转载) 1.视图(VIEW) 1.1 概念        视图-----是由SELECT查询语句(可以是单表或者多表查询)定义的一个"逻辑表",只...

Oracle性能优化笔记——并行&位图索引

  自打2003掉进某公司的DB维护项目组,到今天断断续续接触Oracle已经是十年了。尽管它依然是数一数二的RDBMS,但Oracle数据库在我这里的声望始终是仇恨。这次遇到的性能调试如下:     一个业务表,数据级别在千万行,检索条件只有一个业务年月字段,但是...
  • clxy
  • clxy
  • 2013-12-04 12:02
  • 448

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

OracleDBA+性能优化8日游笔记——第二天(二)之Oracle体系架构详解

OracleDBA+性能优化8日游笔记——第二天(二)之Oracle体系架构详解     "Oracle体系架构"为前4天的OracleDBA课程中最重要的部分,因此特别传上图片供大家理解,不过...

STM32NET学习笔记——索引

<s

9. Oracle深度学习笔记——性能调优汇总

9. Oracle深度学习笔记——性能调优汇总 欢迎转载,转载请标明出处:          数据字典高速缓存命中率 数据字典高速缓存命中率如下: select (sum(gets-getmisses...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)