Oracle--索引监控

来源:互联网 发布:淘宝使用他人图片 代销 编辑:程序博客网 时间:2024/05/10 16:04

相信很多开发人员都在使用索引功能,我们建立索引的目的是使用索引来提高效率,所以如果建立的索引没有被使用,

我们就应该删掉从来没有被使用过的索引。怎么查看那些索引被使用了呢?实际我们可以通过对索引的监视来发现。

下面以INDEX_HX_STUDY为例简单说明,

进入SQL命令窗口, 输入alter index INDEX_HX_STUDY monitoring usage,回车结果如下

SQL> alter index INDEX_HX_STUDY monitoring usage;
Index altered.

输入select * from v$object_usage;查看当前所有索引,可以找到INDEX_HX_STUDY 这条记录
SQL> select * from v$object_usage;
索引名称                                    表名称                 被监视否             使用过否          开始监视时间                         结束监视时间
INDEX_NAME                    TABLE_NAME          MONITO              USED             START_MONITORING          END_MONITORING

INDEX_HX_STUDY           HX_STU                   YES                      NO                   09/21/2011 10:06:00            09/25/2011 10:07:12
---------- --------------- ------ ------ ------------------------- -------------------

倘若你想监视当前用户下的所有索引。你可以通过如下方式获得信息,并建议导出产生一个脚本。
SQL> select 'alter index '||index_name||' monitoring usage;' from user_indexes;
'ALTERINDEX'||INDEX_NAME||'MONITORINGUSAGE;'

alter index INDEX_HX_STUDY monitoring usage;

alter index INDEX_HX_STU_1 monitoring usage;

alter index INDEX_HX_STUDY_1 monitoring usage;
....
-------------------------------------------------------------------------------
运行查询得到的结果,批量执行后,就会监视当前用户下的所有索引。
通过程序运行一段时间后,还是通过上述查询方法查看" USED"列,就可以找到那些从来未被使用得索引。

这样就找到了未使用的索引,可以删除. 值得注意的是,主键和唯一键的索引需要仔细考虑是否可以删除。
在整个监视过程中不能重新启动数据库,因为v$的视图会被重新建立,丢失原来的监视。

如法炮制,加个NO就会取消监视。可以产生一个取消监视所有索引的脚本
SQL> select 'alter index '||index_name||' nomonitoring usage;' from user_indexes;
'ALTERINDEX'||INDEX_NAME||'NOMONITORINGUSAGE;'

alter index INDEX_HX_STUDY nomonitoring usage;

alter index INDEX_HX_STU_1 nomonitoring usage;

alter index INDEX_HX_STUDY_1 nomonitoring usage;

....

原创粉丝点击