加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 安全 > 正文

性能优化:监控索引的使用情况

发布时间:2021-01-08 09:16:08 所属栏目:安全 来源:网络整理
导读:《性能优化:监控索引的使用情况》要点: 本文介绍了性能优化:监控索引的使用情况,希望对您有用。如果有疑问,可以联系我们。 黄玮(Fuyuncat),资深 Oracle DBA,从事 Oracle 数据库管理、维护与开发工作十余年,有丰富的大型数据库设计、开发与维护方面的

《性能优化:监控索引的使用情况》要点:
本文介绍了性能优化:监控索引的使用情况,希望对您有用。如果有疑问,可以联系我们。

黄玮(Fuyuncat),资深 Oracle DBA,从事 Oracle 数据库管理、维护与开发工作十余年,有丰富的大型数据库设计、开发与维护方面的经验,博客www.HelloDBA.com,

编辑手记:索引的合理使用能够提高SQL的执行效率,但索引并不是万能的,也不是所有的索引都会被Oracle使用,今天拣选这篇文章,带大家一起给数据库减肥.

一个系统,经过长期的运行、维护和版本更新后,可能会产生大量的索引,甚至索引所占空间远远大于数据所占的空间.很多索引,在初期设计时,对于系统来说是有用的.但是,经过系统的升级、数据表结构的调整、应用的改变,很多索引逐渐不被使用,成为了垃圾索引.这些索引占据了大量数据空间,增加了系统的维护量,甚至会降低系统性能.因此,DBA应该根据系统的变化,找出垃圾索引,为系统减肥.

Oracle 9i后,可以通过设置对索引进行监控,来监视索引在系统中是否被使用到.语法如下:

alter index <INDEX_NAME> monitoring usage;

如果需要取消监控,可以使用以下语句:

alter index <INDEX_NAME> nomonitoring usage;

设置监控后,就可以查询视图v$object_usage来确认该索引是否被使用.

以下是一个DEMO演示:

但是,这个方法可能存在一个问题:对于一个复杂系统来说,索引的数量可能是庞大的,那么我们如何来鉴定那些索引是值得怀疑的,应该被监控的呢?换句话说,我们如何减少监控范围呢?这里介绍几个方法.

?1、利用library cache数据

在library cache中,存储了系统中游标的查询计划(并非全部,受library cache大小的限制),通过视图v$sql_plan,我们可以查询到这些数据.利用这些数据,我们可以排除那些出现在查询计划中的索引:

2、利用statspack表

Statspack建立以后,为了记录快照的统计数据,会创建一系列的以stats$开头的表.其中stats$sql_plan表记录了每个快照中超过其阈值的语句的查询计划.因此我们可以将出现在该表中索引对象排除在监控范围之外:

但是,这张表在默认情况下(snapshot level=5)是不会记录数据的,只有snapshot>=6才会有记录.另外,该表在8i中是没有的.

?3、利用AWR数据

10g以后,oracle出现了比statspack更加强大的性能分析工具AWR,它也同样记录了系统中的统计数据以供分析.我们也同样可以从其中分析出那些索引是被使用到的.

利用上述方法,过滤掉大部分肯定被使用的index后,再综合应用,选择可疑索引进行监控,找出并删除无用索引,为数据库减肥.

文章来源:Oracle

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读