`
sjk2013
  • 浏览: 2182586 次
文章分类
社区版块
存档分类
最新评论

深入理解Oracle索引(8):如何进行索引监控分析和优化

 
阅读更多

生产环境、我们会发现:

① 索引表空间 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,我们可以查询到这些数据。利用这些数据,我们可以排除那些出现在查询计划中的索引:


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


② 利用 AWR 数据

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


select b.object_owner, b.object_name
  from dba_hist_snapshot a, dba_hist_sql_plan b, dba_hist_sqlstat c
 where a.snap_id = c.snap_id and
       b.sql_id=c.sql_id and 
       b.object_type = 'INDEX' and 
       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 建议大家采取定期索引重建的策略、例如可在每个周末或者每天夜晚对挥发表的索引进行在线重建


分享到:
评论

相关推荐

    Oracle索引的监控.pdf

    Oracle索引的监控.pdfOracle索引的监控.pdfOracle索引的监控.pdfOracle索引的监控.pdf

    Oracle优化日记:一个金牌DBA的故事 白鳝.扫描版

    优化流程优化小技巧 转储文件内容1:数据文件5月14日 聚会优化小技巧 系统级 优化优化小技巧 转储文件内容2:转储对象的段头5月15日 业务支撑系统出问题了今日点评优化小技巧 索引监控优化小技巧 性能 优化时常用的...

    oracle数据库的优化

    oracle数据库的优化 数据库的优化 2 概述 2 监控数据库的性能: 2 优化数据库磁盘I/O 2 建立和优化数据库文件的方针: 6 监控磁盘I/O的方法: 7 优化回滚段 7 检测回滚段争用: 7 通过以下公式计算等待比率: 8 若...

    深入理解Oracle Exadata(Expert Oracle Exadata)

    《深入理解Oracle Exadata》深入地诠释了Exadata 的各项特性,如智能扫描、混合列式存储、存储索引、智能闪存、IO 资源管理;系统地介绍了如何安装、配置和管理Exadata;完美地阐述了Exadata 的等待事件、性能监控和...

    如何监控Oracle索引的使用完全解析

    在oracle8i中,确定使用了那个索引的方法意味着要对存在语共享SQL区中的所有语句运行EXPLIAN PALN,然后查询计划表中的OPERATION列,从而识别有OBJECT_OWNER和OBJECT_NAME列所确定的那个索引上的索引访问。在oracle...

    oracle 11g 性能优化扫描版

    第二章 选择和优化索引 第三章 优化实例内存 第四章 监控系统性能 第五章 最小化系统资源争夺 第六章 分析操作系统性能 第七章 检修数据库 第八章 创建高效的sql 第九章 sql手工调优 第十章 追踪sql执行 第十一章 ...

    深入解析Oracle.DBA入门进阶与诊断案例

    针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手...

    ORACLE9i_优化设计与系统调整

    §6.2.8 步骤8:优化I/O和物理结构 89 §6.2.9 步骤9:优化资源争用 89 §6.2.10 步骤10:优化所采用的平台 89 §6.3 应用优化方法 90 §6.3.1 设定明确的优化目标 90 §6.3.2 创建最少可重复测试 90 §6.3.3 测试...

    oracle数据库优化

    建立和优化数据库文件的方针: 6 监控磁盘I/O的方法: 6 优化回滚段 7 检测回滚段争用: 7 通过以下公式计算等待比率: 7 若任何一个的比率大于1%则建议再创一个回滚段: 7 避免动态分配空间 7 优化Redo日志 8 检测...

    Oracle Index索引无效的原因与解决方法

    索引无效原因 最近遇到一个Oracle SQL语句的性能问题,修改功能之前的运行时间平均为0.3s,...即将索引至于监控状态下,对索引进行分析。如下对 ID_TT_SHOHOU_HIST_002 索引进行分析 alter index ID_TT_SHOHOU_HIST_

    Oracle 监控索引使用率脚本分享

    主要介绍了Oracle 监控索引使用率脚本分享,本文给出的脚本将得到索引的使用率,可以很好的度量索引的使用情况以及根据这个值来判断当前的这些索引是否可以被移除或改进,需要的朋友可以参考下

    Oracle性能监控工具1.1

    8.临时文件使用情况 9.表死锁情况 10.锁表数量 11.长时间使用的SQL语句 12.事例的等待 13.回滚段的争用情况 14.表空间I/O比例 15.文件系统I/O比例 16.用户下所有索引 17.SGA命中率 18.SGA字典缓冲区命中率 19.SGA...

    Oracle数据库监控、性能检查小工具(OPCT)

    8.临时文件使用情况 9.表死锁情况 10.锁表数量 11.长时间使用的SQL语句 12.事例的等待 13.回滚段的争用情况 14.表空间I/O比例 15.文件系统I/O比例 16.用户下所有索引 17.SGA命中率 18.SGA字典缓冲区命中率 19.SGA...

    Oracle性能监控SQL语句

    1.分析表 2.监控事例的等待 3.查看碎片程度高的表 4.找使用CPU多的用户session 5.回滚段的争用情况 6.在某个用户下找所有的索引 7..... etc.

    Oracle 索引监控(monitor index)

    Oracle 提供了索引监控特性来初略判断未使用到的索引。本文描述如何使用Oracle 索引的监控。  1、冗余索引的弊端  大量冗余和无用的索引导致整个数据库性能低下,耗用了大量的CPU与I/O开销,具体表现如下: ...

    PLSQL程序优化和性能分析方法

    2.3 ORACLE优化器 6 2.4 PLSQL优化 7 2.4.1 选择最有效率的表名顺序 7 2.4.2 WHERE子句中的连接顺序 8 2.4.3 SELECT子句中避免使用 ‘ * ‘ 8 2.4.4 用EXISTS替代IN 8 2.4.5 用NOT EXISTS替代NOT IN 9 2.4.6 用表...

    Oracle性能优化求生指南

    全书分为6部分、23章,实例丰富,兼具技术深度和广度,被读者誉为“最有用的Oracle性能调优参考书”。主要内容包括:,  有效的Oracle性能优化方法描述;, 如何充分利用Oracle的核心工具来跟踪、监控、诊断性能;...

    高性能动态SQL Oracle数据安全 Oracle 数据库的聚簇技术 等等

    Oracle字段上建立并使用索引 29 用Windows脚本宿主自动化Oracle工具 31 进程结构和内存结构 32 Oracle监控数据库性能的SQL汇总 36 Oracle如何精确计算row的大小 38 PL/SQL编程 39 数据库的分组问题 41 oracle知识 42...

    IBM DB2经典视频教程

    第9周 DB2性能优化:SQL语句调优,包括监控找出问题SQL、获取访问计划、解读和分析访问计划、调优SQL语句的招式等。 第10周 DB2性能优化:最佳实践 第11周 某ERP数据库性能优化实战案例分享(1):系统调优 第12周 ...

Global site tag (gtag.js) - Google Analytics