Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103695644
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-07 23:00:18

  来源:ChinaITLab  


在 Oracle9i 之前,监控索引使用的唯一方法是执行他们的程序库缓中的所有SQL,然后手工记下所有被使用的索引。

最近的研究发现 Oracle 数据库所使用的索引从来没有达到过可用索引数的1/4,或者其用法与其开始设计的意图不相同。未用的索引浪费空间,而且还会降低 DML 的速度,尤其是 UPDATE 和 INSERT 语句。

Oracle9i提供一个简单的方法来打开和关闭索引使用跟踪,那就是MONITORING USAGE 子句:

  
  alter index cust_name_idx monitoring usage;
  alter index cust_name_idxnomonitoring usage;
  

这个命令使用V$OBJECT_USAGE 视图和 USAGE 字段来判断索引是否被访问过。你可能期望 USAGE 字段是一个数字值,这样你就可以知道索引被使用的次数,但不幸的是,它的取值只为YES 或NO。

但不管怎样,如果你接手一个以前开发的数据库,而且老数据库在没有考虑到 SQL 访问表的情况下创建了索引,那么这个工具对你是很有用的。INDEX MONITORING 特性的开销非常小,而对定位和丢弃不需要的索引很有帮助。

下面是一个打开整个方案的索引监控的简单 SQL*Plus 脚本:

在 Oracle9i 之前,监控索引使用的唯一方法是执行他们的程序库缓中的所有SQL,然后手工记下所有被使用的索引。

  
  set pages 999
  set heading off
  
  spool run_mon.sql
  
  select
    'alter index '||
    index_name||
    ' monitoring usage;'
  from
    dba_indexes
  where
    owner = 'SCOTT';
  
  spool off
  
  @run_mon
阅读(170) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~