手机
当前位置:查字典教程网 >编程开发 >Oracle教程 >Oracle监控索引怎么使用
Oracle监控索引怎么使用
摘要:Oracle监控索引使用Oracle提供一个监控索引的方法,来确定索引是否被使用。如果索引没有被使用,就可以删除它们以减少不必要的语句的开销...

Oracle监控索引使用

Oracle提供一个监控索引的方法,来确定索引是否被使用。如果索引没有被使用,就可以删除它们以减少不必要的语句的开销。因为表上的大量不必要的索引可能会降低DML语句的性能,给数据库性能产生压力。所以生产环境上,以根据业务增长情况定期监控、分析数据库索引的使用,特别是一些大表上的索引,提升数据库事务提交的性能。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 --查看表上的索引 SQL Selectindex_name,table_name,num_rows From dba_indexes i Where i.table_name ='WEBSITE_VIEW_TB' ; INDEX_NAME TABLE_NAME NUM_ROWS ------------------------------------------------------------ ---------- CURRTIME_IDX WEBSITE_VIEW_TB 79284331 ORDERNO_IDX WEBSITE_VIEW_TB 2021984 ORDERSOURCE_IDX WEBSITE_VIEW_TB 938174 --开启索引监控 SQL ALTER INDEX CURRTIME_IDX MONITORING USAGE; Index altered --查看索引监控 SQL Select * From v$object_usage; INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING ------------------------------------------------------------ ------------------- --------- -------------------------------------- CURRTIME_IDX WEBSITE_VIEW_TB YES NO 08/20/2013 14:19:48
注意: 如果开启了索引监控功能,用v$object_usage视图可以查看正在被监控的索引记录,USED列表示在开启索引监控过程中索引是否被使用,MONITORING列表示是否开启了索引监控,START_MONITORING表示开启索引监控的开始时间,END_MONITORING表示开启索引监控的结束时间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 --执行查询语句,使用被监控的索引 SQL Select Count(*) From log.WEBSITE_VIEW_TB t 2 Where t.currtime between to_date('2013-1-27','yyyy-mm-dd')And to_date('2013-1-28','yyyy-mm-dd'); COUNT(*) ---------- 750603 --可以看到记录的USED列值变成了YES,表示索引被使用过。

SQL Select * From v$object_usage; INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING ---------------------------- ----------------------------- --------------- -------- ------------------------------ -------- CURRTIME_IDX WEBSITE_VIEW_TB YES YES 08/20/2013 14:19:48 --分析完毕后,关闭索引监控,因为监控也会占用一定的资源 SQL ALTER INDEX CURRTIME_IDX NOMONITORING USAGE; Index altered --可以看到MONITORING列变为NO,END_MONITORING列被填充,索引停止监控 SQL Select * From v$object_usage; INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING ----------------------------------------------------------------- ------------------- -------- ------------------------------- --------------------------- CURRTIME_IDX WEBSITE_VIEW_TB NO YES 08/20/2013 14:19:48 08/20/2013 14:32:18 --再次执行查询,监控记录无变化 SQL Select Count(*) From log.WEBSITE_VIEW_TB t 2 Where t.currtime between to_date('2013-1-27','yyyy-mm-dd') And to_date('2013-1-28','yyyy-mm-dd'); COUNT(*) ---------- 750603 SQL Select * From v$object_usage; INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING ----------------------------------------------------------------- ------------------- -------- ------------------------------- --------------------------- CURRTIME_IDX WEBSITE_VIEW_TB NO YES 08/20/2013 14:19:48 08/20/2013 14:32:18 --再次开启索引监控,相应监控记录值又发生了变化 SQL ALTER INDEX CURRTIME_IDX MONITORING USAGE; Index altered SQL Select * From v$object_usage; INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING ------------------------------------------------------------ ---------- ---- -------------------------------------- CURRTIME_IDX WEBSITE_VIEW_TB YES NO 08/20/2013 14:34:15

总结:

虽然v$object_usage表能记录索引监控和使用的状态,但它不能统计索引被使用的次数和频率,只记录了在开启索引监控的时间段索引是否被使用过,这一点要值的注意。

【Oracle监控索引怎么使用】相关文章:

Oracle约束管理脚本

如何检查oracle表或索引可回收空间

oracle的归档模式 ORACLE数据库归档日志常用命令

Oracle 忘记密码的找回方法

Oracle数据更改后出错怎么做?

Oracle与Mysql的区别

浅析Oracle中的不等于号

oracle中的decode的使用介绍

Oracle10g 安装方法

Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法

精品推荐
分类导航