您的位置:首页 > 数据库 > Oracle

oracle 索引监控

2013-08-01 23:27 435 查看

oracle 索引监控

即使是一个初期设计非常优秀的数据库系统,在持续运行一段时间后,由于数据量的累加,数据库对象的变化,甚至是业务方面的改变,多可能会对数据库的性能带来影响。所以一个持续、健康的数据库系统,时常在半年或一年进行一次全面体检。其中极其重要的体检的指标就是对索引的修改。有可能当初设计合理的索引现在没有发挥大的作用,也有可能已经完成没有作用,甚至可能对数据库性能产生了负担。。。 那么就需要我们去监控、分析、修改甚至删除了。

我们可以打开索引监控性能。查看一段时间内索引的使用频率。

[TEST1@orcl#26-12月-10] SQL>select index_name,table_name from user_indexes where table_name='T';

INDEX_NAME TABLE_NAME ------------------------------ ------------------------------ T_INDEX T

打开监控功能:

[TEST1@orcl#26-12月-10] SQL>alter index t_index monitoring usage;

索引已更改。

运行一段时间后,查看v$object_usage

[TEST1@orcl#26-12月-10] SQL>select * from v$object_usage where index_name='T_INDEX';

INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING ------------------------------ ------------------------------ --- --- ------------------- ------------------- T_INDEX T YES YES 12/26/2010 17:04:23

可以分析索引的使用次数、频率,为优化作出判断。

分析完后,关闭监控功能。因为监控也消耗一定的资源。

[TEST1@orcl#26-12月-10] SQL>alter index t_index nomonitoring usage;

索引已更改。

----------------------------20101228补充-------------------------------------------

[TEST1@orcl#28-12月-10] SQL>alter index v_y monitoring usage;

索引已更改。

[TEST1@orcl#28-12月-10] SQL>select * from v$object_usage;

INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING ------------------------------ ------------------------------ --- --- ------------------- ------------------- T_INDEX T NO YES 12/26/2010 17:04:23 12/26/2010 18:27:14 V_Y Y_ONE YES NO 12/28/2010 23:00:00

我现在查询y_one表:

[TEST1@orcl#28-12月-10] SQL>set autotrace on

[TEST1@orcl#28-12月-10] SQL>select * from y_one where id=1;

ID NAME ---------- ---------------------------------------- 1 aaa

执行计划 ---------------------------------------------------------- Plan hash value: 4290364449

------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 7 | 2 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| Y_ONE | 1 | 7 | 2 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | V_Y | 1 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------

OK,使用到了v_y索引。

[TEST1@orcl#28-12月-10] SQL>select * from v$object_usage where index_name='V_Y';

INDEX_NAME TABLE_NAME MON USE START_MONITORING END_MONITORING ------------------------------ ------------------------------ --- --- ------------------- ------------------- V_Y Y_ONE YES YES 12/28/2010 23:00:00

总结:v$object_usage最大的作用是监控该用户下的所有索引是否被使用。我们可以在上班时打开所有索引的监控,下班后关闭并查询那些索引没有被使用到。如果没有被使用到则要考虑采取一些措施了。

另:它不能统计索引的被使用次数和频率。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: