在生产环境、我们会发现:

① 索引表空间 I/O 非常高
     ② "db file sequential read" 等待事件也比较高
   这种迹象表明、整个数据库系统、索引的读写操作比较多、已经成为系统的主要瓶颈
   
   一般的原因、大抵如下:
   ① 大量SQL均采用索引
   ② DML操作导致索引维护工作量暴增
   ③ 频繁DML导致很多索引碎片、增加I/O开销
   ④ 索引建立策略失误、走索引如同全表扫
   
   如果、一张表字段30个、但索引竟有 50个!?
   作为 DBA、你可能不了解业务逻辑、不敢删、也不知该删哪些、怎么办?
   
   建议综合采用如下两种策略:
   ⑴ 根据原理去判断
      
      这种情况肯定存在很多复合索引!依据复合索引的前缀性和可选性两大原理
      分析这 50 个索引的具体字段的分布情况、自己做出合并、整合的判断
      
   ⑵ 利用 Oracle 索引监控特性
      
      在典型业务周期开始之前、执行:
      ora@node1> alter index <索引名> monitoring usage;
      
      在典型业务周期结束之后、执行:
      ora@node1> alter index <索引名> nomonitoring usage;
      
      然后、查询:
      ora@node1> select * from v$object_usage;
      
      这样子、你就知道在这个典型周期之内、这个索引到底有木有用了
      即便是这样了、可是、友情提示两下、上面的结论不一定正确、因为:
      ① 10g在收集统计信息时会导致索引被监控、这并非SQL语句产生、而在11g则不会出现这种情况了
      ② 外键索引不会因为主表的DML操作而被监控到、不要因为该索引没用而将它给删了
   
   不过、这里、毕竟还会有个问题、对于一个复杂系统来说,索引的数量可能是庞大的
   那么、我们该如何选择嫌疑对象、减少监控范围呢?
   以下介绍两种方法:
   ① 利用 library cache 数据

在library cache中,存储了系统中游标的查询计划(并非全部,受library cache大小的限制)

通过视图v$sql_plan,我们可以查询到这些数据。利用这些数据,我们可以排除那些出现在查询计划中的索引:

  1. select a.object_owner, a.object_name
  2. from v$sql_plan a, v$sqlarea b
  3. where a.sql_id = b.sql_id and a.object_type='INDEX' and
  4. b.last_load_time > <START_AUDIT_DATE>

② 利用 AWR 数据
      
      10g以后,我们可以借助 AWR 分析哪些索引被使用到了

  1. select b.object_owner, b.object_name
  2. from dba_hist_snapshot a, dba_hist_sql_plan b, dba_hist_sqlstat c
  3. where a.snap_id = c.snap_id and
  4. b.sql_id=c.sql_id and
  5. b.object_type = 'INDEX' and
  6. a.startup_time > <START_AUDIT_DATE>

利用上述方法,过滤掉大部分肯定被使用的index后,再综合应用,选择可疑索引进行监控,找出并删除无用索引,为数据库减肥
   
   频繁对索引字段进行 DML操作、会对索引造成大量碎片、从而极大影响索引的使用效率、并造成索引I/O的增加
   那么如何进行索引碎片的分析和整理呢?
   
   执行如下语句可监测索引的碎片情况:
   
   analyze index <索引名> validate structure online;
   
   select name,(del_lf_rows_len/lf_rows_len)*100 from index_stats;
   
   其中、索引碎片率(%)=(del_lf_rows_len/lf_rows_len)*100
   如果索引碎片率超过20%、则Oracle认为索引碎片已经非常严重
   
   建议DBA编写一个检测所有索引碎片率的脚本、定期运行、保持对索引碎片率的监测
   因为、进行索引碎片分析和整理是DBA日常维护的工作之一
   
   Oracle 进行索引碎片的处理包括两种策略:
   ① 重建索引
      
      alter index <索引名> rebuild;
      
   ② 压缩索引
      
      alter index <索引名> coalesce;
      
   不过、Rocky 建议大家采取定期索引重建的策略、例如可在每个周末或者每天夜晚对挥发表的索引进行在线重建

本文转自:http://blog.csdn.net/dba_waterbin/article/details/8805010

oracle如何进行索引监控分析和优化的更多相关文章

  1. Web服务器性能监控分析与优化

    Web服务器性能监控分析与优化 http://www.docin.com/p-759040698.html

  2. Oracle表与索引的分析及索引重建

    1.分析表与索引(analyze 不会重建索引)   analyze table tablename compute statistics 等同于 analyze table tablename co ...

  3. mysql性能优化-慢查询分析、优化索引和配置

    一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connec ...

  4. ORACLE索引监控的简单使用

    --ORACLE索引监控的简单使用-------------------------2013/11/20 说明:     应用程序在开发时,可能会建立众多索引,但是这些索引的使用到底怎么样,是否有些索 ...

  5. [转]Oracle 索引质量分析

    http://blog.csdn.net/leshami/article/details/23687137 索引质量的高低对数据库整体性能有着直接的影响.良好高质量的索引使得数据库性能得以数量级别的提 ...

  6. [转]mysql性能优化-慢查询分析、优化索引和配置

    一. 优化概述 MySQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候.磁盘I/O瓶颈发生在装入数据远大于内存容量的时候,如果应用分布在 ...

  7. mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)

    mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...

  8. mysql性能优化-慢查询分析、优化索引和配置【转】

    一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connec ...

  9. 41.oracle索引,分析索引,索引碎片整理

    概述 索引分为B树索引和位图索引.我们主要研究B树索引,B树索引如下图(图片源自网络):

随机推荐

  1. 探究堆喷射(heap spray)

    博客园的自动保存系统真心不咋地,写的差不多的文章蓝屏之后就没有了,醉了! 浏览器是互联网世界最主要的软件之一,从IE6到IE11安全攻防在不断升级,防御措施的实施促使堆喷射技巧不断变化.写这篇博文想好 ...

  2. jsp笔记3(内置对象)

    jsp脚本中的9个内置对象: 1.application:javax.servlet.ServletContext的实例对象,该实例对象代表jsp所属的web应用本身,可用于在jsp页面或Servle ...

  3. C语言的运算符、位操作

    + - * / (加 减 乘 除) > >= < <= (大于 大于等于 小于 小于等于) == != (测试等于 测试不等于) && || ! (逻辑与 逻辑 ...

  4. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

  5. Android 使用SQLite本地数据库

    参考:http://blog.csdn.net/jianghuiquan/article/details/8569252 在Android平台上,集成了一个嵌入式关系型数据库—SQLite.以SQLi ...

  6. 文件流:"fopen","fclose",“ftell”"fseek","fgets","fprintf" ,“feof”,"fwrite","fread"

    char const* filename="D:/hello.txt"; 路径名使用的是“/”或者使用 转义字符“\\”: "fopen", FILE *fp= ...

  7. JAVA之方法的重载

    package com.test; //方法重载(overload)定义://1.方法名称相同//2.方法的参数类型.个数.顺序至少有一项不同//3.方法的返回类型可以不同//4.方法的修饰符可以不同 ...

  8. 利用yarn多队列实现hadoop资源隔离

    大数据处理离不开hadoop集群的部署和管理,对于本来硬件资源就不多的创业团队来说,做好资源的共享和隔离是很有必要的,毕竟不像BAT那么豪,那么怎么样能把有限的节点同时分享给多组用户使用而且互不影响呢 ...

  9. CKEditor+SWFUpload实现功能较为强大的编辑器(二)---SWFUpload配置

    在前面配置完CKEditor之后,就可以拥有一个功能挺强大的编辑器了 但是现在还不够,还要能够在发表文字中插入自己电脑上的图片 CKEditor自己好像有这个功能,但是实在是...没法说,很难用(这是 ...

  10. jQuery中dom对象与jQuery对象之间互相转换

    首先介绍一下什么是dom对象什么时候jQuery对象 1.dom对象就是使用原生js的api获取到的对象就是dom对象 eg: var box1 = document.getElementById(& ...