知识大全 Oracle9i中监视索引的使用
Posted 索引
篇首语:人们常说,常识是两点之间最短的直线。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle9i中监视索引的使用相关的知识,希望对你有一定的参考价值。
Oracle9i中监视索引的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
介绍 DBA和开发者都喜欢索引 它们可以加速查询搜索 特别是在一个数据仓库的环境中 因为这时数据库会接收到许多ad hoc请求 要避免全表搜索 我们一般在每个可能被搜索的列中建立索引 不过索引会占用许多的表空间 在许多的情况下 索引比被索引的表消耗更多的存储空间 在插入和删除行的时候 索引还会引入额外的开销 在Oracle i之前 要知道一个索引是否被使用是困难的 因此许多数据库都有许多没用的索引 这篇文章的目的就是向你介绍通过Oracle i中的新特性来辨别未使用的索引 辨别未使用的索引 Oracle i提供了一个新的技术来监控索引以辨别索引有否被使用 要开始监控一个索引的使用 使用这个命令 ALTER INDEX index_name MONITORING USAGE; 要停止监控一个索引 输入 ALTER INDEX index_name NOMONITORING 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: 结束监控的时间 所有被使用过至少一次的索引都可以被监控并显示到这个视图中 不过 一个用户只可以接收它自己模式中的索引使用 Oracle并没有提供一个视图来接收所有模式中的索引 要接收所有模式的索引使用 以SYS用户登录并且运行以下的脚本(注意 这并不是Oracle提供的一个脚本 v$all_object_usage是一个自定义的视图 它包含多一个列 即索引的拥有者) $ cat all_object_usage sql 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_monitoring ou end_monitoring from sys obj$ io sys obj$ t sys ind$ i sys object_usage ou sys user$ u where i obj# = ou obj# and io obj# = ou obj# and t obj# = i bo# and io owner# = u user# / MENT ON TABLE SYS V$ALL_OBJECT_USAGE IS Record of all index usage developed by Daniel Liu / GRANT SELECT ON SYS V$ALL_OBJECT_USAGE TO PUBLIC / CREATE PUBLIC SYNONYM V$ALL_OBJECT_USAGE FOR SYS V$ALL_OBJECT_USAGE / 每次你使用MONITORING USAGE 视图就会为特别的索引而复位 所有以前的使用信息都会被清除和复位 并且会记录下一个新的启动时间 每次你执行NOMONITORING USAGE 就不会进行进一步的监控 监视期间的结束时间就会被记录下来 如果你删除一个正在被监控的索引 该索引的相关信息就会由V$OBJECT_USAGE和V$ALL_OBJECT_USAGE视图中删除 辨别数据库中所有未被使用的索引 这个脚本将会启动监控所有的索引 ##################################################################### ## start_index_monitoring sh ## ##################################################################### #!/bin/ksh # input parameter: : password # : SID if (($#<1)) then echo "Please enter \'system\' user password as the first parameter !" exit 0 fi if (($#<2)) then echo "Please enter instance name as the second parameter!" exit 0 fi sqlplus -s < system/$1@$2 set heading off set feed off set pagesize 200 set linesize 100 spool start_index_monitoring.sql select \'ALTER INDEX \'||OWNER||\'.\'||INDEX_NAME||\' MONITORING USAGE;\' from dba_indexes where owner not in (\'SYS\',\'SYSTEM\',\'OUTLN\',\'AURORA\\$JIS\\$UTILITY\\$\'); spool off exit ! sqlplus -s < oracle/$1@$2 @./start_index_monitoring.sql exit ! 这个脚本将会停止监控全部的索引: ##################################################################### ## stop_index_monitoring.sh ## ##################################################################### #!/bin/ksh # input parameter: 1: password # 2: SID if (($#<1)) then echo "Please enter \'system\' user password as the first parameter !" exit 0 fi if (($#<2)) then echo "Please enter instance name as the second parameter!" exit 0 fi sqlplus -s < system/$1@$2 set heading off set feed off set pagesize 200 set linesize 100 spool stop_index_monitoring.sql select \'ALTER INDEX \'||OWNER||\'.\'||INDEX_NAME||\' NOMONITORING USAGE;\' from dba_indexes where owner not in (\'SYS\',\'SYSTEM\',\'OUTLN\',\'AURORA/$JIS/$UTILITY/$\'); spool off exit ! exit sqlplus -s < oracle/$1@$2 @./stop_index_monitoring.sql exit ! 这个脚本将会为所有未被使用的索引产生一个报表: ##################################################################### ## identify_unused_index.sh ## ##################################################################### #!/bin/ksh # input parameter: 1: password # 2: SID if (($#<1)) then echo "Please enter \'system\' user password as the first parameter !" exit 0 fi if (($#<2)) then echo "Please enter instance name as the second parameter!" exit 0 fi sqlplus -s < system/$1@$2 set feed off set pagesize 200 set linesize 100 ttitle center "Unused Indexes Report" skip 2 spool unused_index.rpt select owner,index_name,table_name,used from v\\$all_object_usage where used = \'NO\'; spool off exit ! 以下就是一个未被使用索引报表的例子: Unused Indexes Report OWNER INDEX_NAME TABLE_NAME USE ------------------------------ ------------------------------ ----------------- --- HR DEPT_ID_PK DEPARTMENTS NO HR DEPT_LOCATION_IX DEPARTMENTS NO HR EMP_DEPARTMENT_IX EMPLOYEES NO HR EMP_EMAIL_UK EMPLOYEES NO HR EMP_EMP_ID_PK EMPLOYEES NO HR EMP_JOB_IX EMPLOYEES NO HR EMP_MANAGER_IX EMPLOYEES NO HR EMP_NAME_IX EMPLOYEES NO HR JHIST_DEPARTMENT_IX JOB_HISTORY NO HR JHIST_EMPLOYEE_IX JOB_HISTORY NO HR JHIST_EMP_ID_ST_DATE_PK JOB_HISTORY NO HR JHIST_JOB_IX JOB_HISTORY NO HR JOB_ID_PK JOBS NO HR LOC_CITY_IX LOCATIONS NO HR LOC_COUNTRY_IX LOCATIONS NO HR LOC_ID_PK LOCATIONS NO HR LOC_STATE_PROVINCE_IX LOCATIONS NO HR REG_ID_PK REGIONS NO OE INVENTORY_PK INVENTORIES NO OE INV_PRODUCT_IX INVENTORIES NO OE INV_WAREHOUSE_IX INVENTORIES NO OE ITEM_ORDER_IX ORDER_ITEMS NO OE ITEM_PRODUCT_IX ORDER_ITEMS NO OE ORDER_ITEMS_PK ORDER_ITEMS NO OE ORDER_ITEMS_UK ORDER_ITEMS NO OE ORDER_PK ORDERS NO cha138/Article/program/Oracle/201311/18193相关参考
在Oracle9i里基于函数的仅索引扫描 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Orac
作者gototop 索引可以加快查询的速度但索引会占用许多存储空间在插入和删除行的时候索引还会引入额外的开销因此确保索引得到有效利用是我们很关注的一个问题在Oraclei之前要知道一个索引是
在Oracle9i中建立SPFILE文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Orac
oracle9i中Rman的备份使用点滴 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! rman
在Oracle9i中如何自行编译BBED工具 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! [o
Oracle9i中如何建立不同字符集的数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在安
C#类中索引器的使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 索引器(Indexer)是C
在Oracle数据库中数据库管理员不仅在索引的选择上要花费一定的精力而且在索引的存储上也有所讲究因为索引与表一样不仅需要在数据字典中保存索引的定义还需要在表空间中为他分配实际的存储空间并为其设置存
在SQLServer中使用索引的技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在SQLSe
降序索引 降序索引是i里面新出现的一种索引是B*Tree的另一个衍生物它的变化就是列在索引中的储存方式从升序变成了降序在某些场合下降序索引将会起作用举个例子我们来查询一张表并进行排序 SQL&