数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle监控索引怎么使用


发布日期:2020年03月13日
 
Oracle监控索引怎么使用

Oracle监控索引使用

Oracle提供一个监控索引的方法来确定索引是否被使用如果索引没有被使用就可以删除它们以减少不必要的语句的开销因为表上的大量不必要的索引可能会降低DML语句的性能给数据库性能产生压力所以生产环境上以根据业务增长情况定期监控分析数据库索引的使用特别是一些大表上的索引提升数据库事务提交的性能 查看表上的索引 SQL> Selectindex_nametable_namenum_rows From dba_indexes i Where itable_name =WEBSITE_VIEW_TB ; INDEX_NAME TABLE_NAME NUM_ROWS CURRTIME_IDX WEBSITE_VIEW_TB ORDERNO_IDX WEBSITE_VIEW_TB ORDERSOURCE_IDX WEBSITE_VIEW_TB 开启索引监控 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 // :: 注意如果开启了索引监控功能用v$object_usage视图可以查看正在被监控的索引记录USED列表示在开启索引监控过程中索引是否被使用MONITORING列表示是否开启了索引监控START_MONITORING表示开启索引监控的开始时间END_MONITORING表示开启索引监控的结束时间 执行查询语句使用被监控的索引 SQL> Select Count(*) From logWEBSITE_VIEW_TB t Where tcurrtime between to_date(yyyymmdd)And to_date(yyyymmdd); COUNT(*) 可以看到记录的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 // :: 分析完毕后关闭索引监控因为监控也会占用一定的资源 SQL> ALTER INDEX CURRTIME_IDX NOMONITORING USAGE; Index altered 可以看到MONITORING列变为NOEND_MONITORING列被填充索引停止监控 SQL> Select * From v$object_usage; INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING CURRTIME_IDX WEBSITE_VIEW_TB NO YES // :: // :: 再次执行查询监控记录无变化 SQL> Select Count(*) From logWEBSITE_VIEW_TB t Where tcurrtime between to_date(yyyymmdd) And to_date(yyyymmdd); COUNT(*) SQL> Select * From v$object_usage; INDEX_NAME TABLE_NAME MONITORING USED START_MONITORING END_MONITORING CURRTIME_IDX WEBSITE_VIEW_TB NO YES // :: // :: 再次开启索引监控相应监控记录值又发生了变化 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 // ::

总结

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

上一篇:查询Oracle正在执行和执行过的SQL语句

下一篇:Oracle中优化SQL的原则