知识大全 监视未使用索引

Posted 索引

篇首语:眼前多少难甘事,自古男儿当自强。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 监视未使用索引相关的知识,希望对你有一定的参考价值。

  作者 gototop    索引可以加快查询的速度 但索引会占用许多存储空间 在插入和删除行的时候 索引还会引入额外的开销 因此确保索引得到有效利用是我们很关注的一个问题 在Oracle i之前 要知道一个索引是否被使用是困难的 而Oracle i中提供了一个有效的监控方法:ALTER INDEX MONITORING USAGE 下面我讲详细说明如何使用该方法来鉴别未使用的索引     一 我们先通过一个例子具体说明 ALTER INDEX MONITORING USAGE 的使用方法      建测试表    create table test(id number( ) name varchar ( ));     insert into test values( aaaaaaaa );     insert into test values( );     insert into test values( aadfaaaa );     insert into test values( gototop );     insert into test values( shenzhen );     insert into test values( china );     mit;    alter table test add (constraint test_pk primary key (id));     查询v$object_usage(因为没有监视 所以还看不到内容)    column index_name format a     column monitoring format a     column used format a     column start_monitoring format a     column end_monitoring format a     select index_name monitoring used start_monitoring end_monitoring from v$object_usage;     SQL> l     * select index_name monitoring used start_monitoring end_monitoring from v$object_usage    SQL> /    no rows selected    Elapsed: : :      开始监控索引的使用情况    SQL> alter index test_pk monitoring usage;    Index altered     Elapsed: : :      查询v$object_usage(可以看到正监视中)    SQL> select index_name monitoring used start_monitoring end_monitoring from v$object_usage;    INDEX_NAME MONITORING USED START_MONITORING END_MONITORING         TEST_PK YES NO / / : :     Elapsed: : :      使用索引进行查询    SQL> set autotrace on explain    SQL> select * from test where id = ;    ID NAME              Elapsed: : :     Execution Plan          SELECT STATEMENT Optimizer=CHOOSE     TABLE ACCESS (BY INDEX ROWID) OF TEST      INDEX (UNIQUE SCAN) OF TEST_PK (UNIQUE)    SQL> set autotrace off    SQL> /    ID NAME              Elapsed: : :     SQL>    从上我们可以看到确实使用了索引      查询v$object_usage(可以看到索引被使用过 但目前还处于被监视过程中)    SQL> select index_name monitoring used start_monitoring end_monitoring from v$object_usage;    INDEX_NAME MONITORING USED START_MONITORING END_MONITORING         TEST_PK YES YES / / : :     Elapsed: : :      停止监视 并查询v$object_usage    SQL> alter index test_pk nomonitoring usage;    Index altered     Elapsed: : :     SQL> select index_name monitoring used start_monitoring end_monitoring from v$object_usage;    INDEX_NAME MONITORING USED START_MONITORING END_MONITORING         TEST_PK NO YES / / : : / / : :     Elapsed: : :     到此为止 监视结束 MONITORING为NO END_MONITORING给出了时间戳     二 v$object_usage视图解释    从上面的例子中我们可以看出 索引的监视信息都是存在在v$objec_usage视图中 该视图的定义如下     CREATE OR REPLACE VIEW SYS V$OBJECT_USAGE     (    INDEX_NAME     TABLE_NAME     MONITORING     USED     START_MONITORING     END_MONITORING    )    AS    select io name t name     decode(bitand(i flags ) NO YES )     decode(bitand(ou flags ) NO YES )     ou start_monitoring     ou end_monitoring    from sys obj$ io sys obj$ t sys ind$ i sys object_usage ou    where io owner# = userenv( SCHEMAID )    and i obj# = ou obj#    and io obj# = ou obj#    and t obj# = i bo#    /    MENT ON TABLE SYS V$OBJECT_USAGE IS      Record of index usage     /    GRANT SELECT ON SYS V$OBJECT_USAGE TO PUBLIC     /     下面是该视图列的描述     INDEX_NAME: sys obj$ name 中的索引名字    TABLE_NAME: sys obj$obj$name 中的表名    MONITORING: YES (索引正在被监控) NO (索引没有被监控)     USED: YES (索引已经被使用过) NO (索引没有被使用过)     START_MONITORING: 开始监控的时间     END_MONITORING: 结束监控的时间    所有被使用过至少一次的索引都可以被监控并显示到这个视图中     三 监视数据库中所有索引的使用情况     生成开始/结束监视索引的SQL脚本     set heading off    set echo off    set feedback off    set pages     spool start_index_monitor sql    select alter index ||owner|| ||index_name|| monitoring usage;     from dba_indexes    where owner in ( YOUR PROD_DB OWNER LIST );     spool off     set heading on    set echo on    set feedback on         set heading off    set echo off    set feedback off    set pages     spool stop_index_monitor sql    select alter index ||owner|| ||index_name|| nomonitoring usage;     from dba_indexes    where owner in ( YOUR PROD_DB OWNER LIST );     spool off     set heading on    set echo on    set feedback on     进行监视并查询结果          在业务量比较多的一天上班时运行start_index_monitor sql 下班前运行stop_index_monitor sql 之后就可以在各用户自己的v$object_usage视图中看到该SCHEMA下的索引使用情况了     SQL> conn t/t    Connected     SQL> select index_name table_name used     from v$object_usage     where used= NO ;    INDEX_NAME TABLE_NAME USED         TEST_PK TEST NO     row selected     SQL>     改进结果查寻方法    你也许已经注意到 上面查询结果是需要我们单独查询各SCHEMA中的v$object_usage 其实我们可以通过给v$object_usage视图添加一个owner列来创建一个可以存储所有SHCEMA的v$object_usage视图 不妨叫做v$all_object_usage 定义如下     CREATE OR REPLACE VIEW SYS V$ALL_OBJECT_USAGE    (    OWNER     INDEX_NAME     TABLE_NAME     MONITORING     USED     START_MONITORING     END_MONITORING    )    AS    select u name io name t name     decode(bitand(i flags ) NO YES )     decode(bitand(ou flags ) NO YES )     ou start_mon cha138/Article/program/Oracle/201311/17521

相关参考

知识大全 Oracle9i新特性-索引监视及注意事项[修正版]

Oracle9i新特性-索引监视及注意事项[修正版]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 各种索引的结构分析降序索引和位图索引

  降序索引  降序索引是i里面新出现的一种索引是B*Tree的另一个衍生物它的变化就是列在索引中的储存方式从升序变成了降序在某些场合下降序索引将会起作用举个例子我们来查询一张表并进行排序  SQL&

知识大全 文件 - 索引文件(一)

  索引文件构成  索引文件  索引文件由主文件和索引表构成  ①主文件文件本身  ②索引表在文件本身外建立的一张表它指明逻辑记录和物理记录之间的一一对应关系  索引表组成  索引表由若干索引项组成一

知识大全 分区表、分区索引和全局索引部分总结

  分区表分区索引和全局索引  在一个表的数据超过过万条或占用G空间时建议建立分区表       create table ta(

知识大全 跳跃式索引

  从Oraclei开始索引跳跃式扫描特性可以允许优化器使用组合索引即便索引的前导列没有出现在WHERE子句中索引跳跃式扫描比全索引扫描要快的多下面的程序清单显示出性能的差别  createindex

知识大全 文件 - 索引文件(二)

  索引文件的操作  检索操作  检索分两步进行  ①将外存上含有索引区的页块送人内存查找所需记录的物理地址  ②将含有该记录的页块送人内存  注意  ①索引表不大时索引表可一次读入内存在索引文件中检

知识大全 讲解MySQL索引的概念及数据库索引的应用[1]

数据库基础:讲解MySQL索引的概念及数据库索引的应用[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 讲解MySQL索引的概念及数据库索引的应用[2]

数据库基础:讲解MySQL索引的概念及数据库索引的应用[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 C#索引器

C#索引器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  索引器概述  索引器使得对象可按照与数

知识大全 ORACLE索引提高效率

ORACLE索引提高效率  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用索引提高效率  索引是