在我参与过的许多商店系统开发中,我发现在生产系统中创建一个索引并不需要经过详细的论证,甚至连应用程序代码也没有检查就创建了,大多数时候都是靠个人经验和感觉行事的,人们往往只会思考与创建索引有关的列是否会受到影响,完全靠临场反应,到最后数据库中往往有上百个索引创建了但可能从未使用过,或对SQL执行性能有负面影响。作为一名DBA,我们有责任找到并清除这些闲置的以及对性能有负面影响的索引。但我们从哪里开始呢?其实Oracle已经为我们提供了解决之道。
有两种基本的情况:
1、 我们必须确定索引是否被使用,如果索引没有使用,只需要删除它就可以了。
2、 如果索引被使用了,或认为索引将会被使用,对于这种索引,要确定索引对数据库性能的影响稍微有点难度。
对于第一种情况(判断索引是否被使用),我们可以对数据库索引进行监视,关键是要监视足够长的时间,可以监视一小时,一天,一周或一个业务季度,这要取决于表上的索引是与什么相关的。
那该如何监视一个索引呢?其实简单得很,只需要使用ALTER INDEX命令,加上MONITORING USAGE子句就可以了,还是来看一看实例吧:
SQL> ALTER INDEX pk_emp MONITORING USAGE; Index altered. SQL> ALTER INDEX ix_emp_sal MONITORING USAGE; Index altered. |
当你在该表上进行SELECT,UPDATE,DELETE(没有INSERT)时,一旦使用了索引,就会在V$OBJECT_USAGE动态视图中将该索引标记为在使用中:
SQL> select * from emp where empno = 7844; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO —– —— ——— —- ——— —– —- —— 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 SQL> SELECT v.index_name, v.table_name, v.monitoring, v.used, start_monitoring, end_monitoring FROM v$object_usage v, user_indexes u WHERE v.index_name = u.index_name; INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING ———- ———- — — ——————- ——————- PK_EMP EMP YES YES 04/28/2009 10:16:51 IX_EMP_SAL EMP YES NO 04/28/2009 10:17:01 |
就这么简单。显然,如果前面的SELECT语句只是查询EMP表,或许我们应该删除掉IX_EMP_SAL索引。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号

TechTarget
官方微博

TechTarget中国
作者
相关推荐
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。
-
如何应对Oracle EBS实施中的六个挑战?
在18个月的时间里,Vitamix启动运行了Oracle电子商务套件(E-Business Suite,EBS),而且Vitamix还对诸如Oracle ATG Web Commerce等所有页面属性进行了重新整理,并实现了全球数据中心。
-
Oracle的云产品“砸了自己脚”?
Sparc和Solaris都是Oracle云计划的一部分,但是硬件和支持人员的减少意味着本地Solaris和Sparc将变得更加稀少。
-
2017年3月数据库流行度排行榜 Oracle卫冕之路困难重重
时隔一个月,数据库市场经过一轮“洗牌”,旧的市场格局是否会被打破,曾经占巨大市场份额的企业是否可能失去优势?