监控索引的使用情况

2019-04-29

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


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


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

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

 

1、利用library cache数据

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



2、利用statspack表

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

alter index <INDEX_NAME> monitoring usage;


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

alter index <INDEX_NAME> nomonitoring usage;

免费获取报价

  • 29923329

  • 杭州市莫干山路110号华龙大厦307

  • 0571-85815193

  • pady@1t2.cn

网站地图 版权所有 © 2008-2019 杭州派迪科技有限公司  Copyright © 2008-2019  www.hzpady.com  All Rights Reserved    浙ICP备14029905号-1     公安备案:33010802008411    软著登字第3457658号