知识大全 监视未使用索引
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] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
数据库基础:讲解MySQL索引的概念及数据库索引的应用[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
C#索引器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 索引器概述 索引器使得对象可按照与数
ORACLE索引提高效率 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用索引提高效率 索引是