zoukankan      html  css  js  c++  java
  • oracle 索引监控

    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最大的作用是监控该用户下的所有索引是否被使用。我们可以在上班时打开所有索引的监控,下班后关闭并查询那些索引没有被使用到。如果没有被使用到则要考虑采取一些措施了。

    另:它不能统计索引的被使用次数和频率。

  • 相关阅读:
    分享 35 套精美的 PSD 图标素材
    HTML 5 标签、属性、事件及浏览器兼容性速查表
    推荐21款最佳 HTML 5 网页游戏
    二分查找
    双指针合并两个排序数组
    关于explorer.exe文件或目录已损坏的问题
    一文弄懂数组的和
    云效DevOps实践如何基于云效实现测试自动化集成和分析
    五福背后的 Web 3D 引擎 Oasis Engine 正式开源
    Delta Lake在Soul的应用实践
  • 原文地址:https://www.cnblogs.com/weixun/p/3231519.html
Copyright © 2011-2022 走看看