Oracle 监控索引的使用率

Oracle提供了索引监控特性来判断索引是否被使用。在Oracle 10g中,收集统计信息会使得索引被监控,在Oracle 11g中该现象不复存在。尽管如此,该方式仅提供的是索引是否被使用。索引被使用的频率未能得以体现。下面的脚本将得到索引的使用率,可以很好的度量索引的使用情况以及根据这个值来判断当前的这些索引是否可以被移除或改进。

 

1、索引使用频率报告

  1. --运行环境  
  2. SQL> select * from v$version where rownum<2;  
  3.   
  4. BANNER  
  5. ----------------------------------------------------------------  
  6. Oracle Database 10g Release 10.2.0.3.0 - 64bit Production  
  7.   
  8. --获得当前数据库索引的使用频率  
  9. SQL> @idx_usage_detail.sql  
  10. Enter value for 1: GO_ADMIN  
  11. Enter value for 2: 100  
  12.                                                                                  Index  
  13. Table name                     Index name                     Index type       Size MB Index operation       Executions  
  14. ------------------------------ ------------------------------ ------------ ----------- --------------------- ----------  
  15. ACC_POS_CASH_PL_TBL_ARC        PK_ACC_POS_CASH_PL_ARCH_TBL    NORMAL          3,328.00 RANGE SCAN                    99  
  16.                                                                                        SAMPLE FAST FULL SCAN          8  
  17.                                                                                        UNIQUE SCAN                    3  
  18.                                                                                        SKIP SCAN                      2  
  19. ****************************** ****************************** ************ -----------                       ----------  
  20. sum                                                                          13,312.00                              112  
  21.   
  22.   
  23. ACC_POS_CASH_TBL_ARC           PK_ACC_POS_CASH_ARCH_TBL       NORMAL          2,560.00 RANGE SCAN                   168  
  24.                                                                                        UNIQUE SCAN                   14  
  25.                                                                                        SAMPLE FAST FULL SCAN         12  
  26.                                                                                        SKIP SCAN                      1  
  27. ****************************** ****************************** ************ -----------                       ----------  
  28. sum                                                                          10,240.00                              195  
  29.   
  30.   
  31. ACC_POS_HIST_TBL               ACC_HIST_TRANS_DATE_IDX        NORMAL            384.00 RANGE SCAN                   917  
  32.                                                                                        SKIP SCAN                    210  
  33.                                                                                        SAMPLE FAST FULL SCAN          4  
  34.                                                                                        FAST FULL SCAN                 1  
  35.                                PK_ACC_POS_HIST_TBL            NORMAL            192.00 UNIQUE SCAN                    7  
  36.                                                                                        SAMPLE FAST FULL SCAN          3  
  37.                                TRANS_NUM_IDX                  NORMAL            232.00 RANGE SCAN                    41  
  38.                                                                                        SAMPLE FAST FULL SCAN          3  
  39.                                                                                        FAST FULL SCAN                 1  
  40. ****************************** ****************************** ************ -----------                       ----------  
  41. sum                                                                           2,616.00                            1,187  
  42.   
  43.   
  44. ACC_POS_INT_TBL                ACC_POS_INT_10DIG_IDX          FUNCTION-       2,622.00 RANGE SCAN                    59  
  45.                                                               BASED NORMAL  
  46.   
  47.                                                                                        SAMPLE FAST FULL SCAN          4  
  48.                                                                                        FAST FULL SCAN                 2  
  49.                                PK_ACC_POS_INT_TBL             NORMAL          2,496.00 RANGE SCAN                    65  
  50.                                                                                        FAST FULL SCAN                53  
  51.                                                                                        UNIQUE SCAN                   14  
  52.                                                                                        SKIP SCAN                     13  
  53.                                                                                        SAMPLE FAST FULL SCAN          1  
  54. ****************************** ****************************** ************ -----------                       ----------  
  55. sum                                                                          20,346.00                              211  
  56.   
  57.   
  58. ACC_POS_STOCK_TBL_ARC          PK_ACC_POS_STOCK_ARCH_TBL      NORMAL         18,977.00 RANGE SCAN                   177  
  59.                                                                                        SAMPLE FAST FULL SCAN         10  
  60.                                                                                        UNIQUE SCAN                    4  
  61.                                                                                        SKIP SCAN                      3  
  62. ****************************** ****************************** ************ -----------                       ----------  
  63. sum                                                                          75,908.00                              194  
  64.   
  65.   
  66. STK_TBL_ARC                    PK_STK_ARCH_TBL                NORMAL            920.00 RANGE SCAN                   126  
  67.                                                                                        UNIQUE SCAN                   38  
  68.                                                                                        SKIP SCAN                     17  
  69.                                                                                        SAMPLE FAST FULL SCAN          2  
  70. ****************************** ****************************** ************ -----------                       ----------  
  71. sum                                                                           3,680.00                              183  
  72.   
  73.   
  74. STK_TBL_LOG                    PK_STK_TBL_LOG                 NORMAL            480.00 UNIQUE SCAN                   56  
  75. ****************************** ****************************** ************ -----------                       ----------  
  76. sum                                                                             480.00                               56  
  77.   
  78.   
  79. TRADE_BROKER_CHRG_TBL_ARC      PK_TRADE_BROKER_CHRG_TBL_ARC   NORMAL            128.00        -                       0  
  80.                                UNI_TDBK_CHRG_ARC              NORMAL            104.00 RANGE SCAN                   283  
  81. ****************************** ****************************** ************ -----------                       ----------  
  82. sum                                                                             232.00                              283  
  83.   
  84.   
  85. TRADE_BROKER_JOURNAL_TBL_ARC   IDX_TDBK_JRNL_ARC_ENTRY_DT     NORMAL            168.00        -                       0  
  86.                                IDX_TDBK_JRNL_ARC_INSTRU_ID    NORMAL            144.00 FULL SCAN                      1  
  87.                                IDX_TDBK_JRNL_ARC_STOCK_CD     NORMAL            144.00 FULL SCAN                      1  
  88.                                IDX_TDBK_JRNL_ARC_TRADED_PRICE NORMAL            144.00 FULL SCAN                      1  
  89.                                PK_TRADE_BROKER_JOURNAL_ARC    NORMAL            200.00        -                       0  
  90. ****************************** ****************************** ************ -----------                       ----------  
  91. sum                                                                             800.00                                3  
  92.   
  93.   
  94. TRADE_CLIENT_CHRG_TBL_ARC      IDX_TDCL_CHRG_ARC_GRP_REF_ID   NORMAL            704.00 RANGE SCAN                 3,537  
  95.                                PK_TRADE_CLIENT_CHRG_TBL_ARC   NORMAL          1,539.00 RANGE SCAN                    24  
  96.                                                                                        SAMPLE FAST FULL SCAN          2  
  97.                                UNI_TDCL_CHRG_ARC              NORMAL          1,216.00 RANGE SCAN                 1,103  
  98.                                                                                        FAST FULL SCAN                 3  
  99.                                                                                        SAMPLE FAST FULL SCAN          2  
  100. ****************************** ****************************** ************ -----------                       ----------  
  101. sum                                                                           7,430.00                            4,671  
  102.   
  103.   
  104. TRADE_CLIENT_DTL_TBL_ARC       IDX_TDCL_DTL_ARC_ACTION_N_STUS NORMAL            312.00        -                       0  
  105.                                IDX_TDCL_DTL_ARC_ACT_TD_PRICE  NORMAL            184.00 FULL SCAN                      1  
  106.                                IDX_TDCL_DTL_ARC_REF_ID        NORMAL            344.00 RANGE SCAN                 4,623  
  107.                                                                                        FAST FULL SCAN                 1  
  108.                                                                                        FULL SCAN                      1  
  109.                                IDX_TDCL_DTL_ARC_TRADED_PRICE  NORMAL            184.00        -                       0  
  110.                                PK_TRADE_CLIENT_DTL_TBL_ARC    NORMAL            432.00        -                       0  
  111.                                UNI_TDCL_DTL_ARC_TRADE_DTL_ID  NORMAL            272.00        -                       0  
  112. ****************************** ****************************** ************ -----------                       ----------  
  113. sum                                                                           2,416.00                            4,626  
  114.   
  115.   
  116. TRADE_CLIENT_TBL_ARC           IDX_TDCL_ARC_ACC_NUM           NORMAL            152.00 RANGE SCAN                   534  
  117.                                IDX_TDCL_ARC_GRP_REF_ID        NORMAL            120.00 RANGE SCAN                   550  
  118.                                                                                        FAST FULL SCAN                 1  
  119.                                IDX_TDCL_ARC_INPUT_DATE        NORMAL            120.00 RANGE SCAN                 7,231  
  120.                                IDX_TDCL_ARC_PL_STK            NORMAL            144.00 SKIP SCAN                    156  
  121.                                                                                        RANGE SCAN                     3  
  122.                                                                                        FULL SCAN                      1  
  123.                                IDX_TDCL_ARC_TRADE_DATE        NORMAL            120.00 RANGE SCAN                12,778  
  124.                                PK_TRADE_CLIENT_TBL_ARC        NORMAL            160.00 RANGE SCAN                    37  
  125.                                UNI_TDCL_ARC_REF_ID            NORMAL            112.00 UNIQUE SCAN                  157  
  126.                                                                                        FAST FULL SCAN                 8  
  127.                                                                                        SAMPLE FAST FULL SCAN          1  
  128. ****************************** ****************************** ************ -----------                       ----------  
  129. sum                                                                           1,560.00                           21,457  
  130.   
  131. --Author : Robinson  
  132. --Blog   : http://blog.csdn.net/robinson_0612  
  133.   
  134. "Showed only indexes in GO_ADMIN schema whose size > 100 MB in period:"  
  135.   
  136. 30.01.2013-07.04.2013  

2、结果分析与建议
   a、上面的结果列出了当前数据库中schema为GOEX_ADMIN且索引大小大于100MB的索引的使用频率。
   b、由于当前的数据库为标准版,没有分区表功能,所以可以看到很多arc结尾的表,且索引很大,如ACC_POS_STOCK_TBL_ARC上索引达到19G。
   c、表ACC_POS_CASH_PL_TBL_ARC上的主键PK_ACC_POS_CASH_PL_ARCH_TBL上范围扫描最多,总计被使用次数为112次。
   d、对于上述列出的被使用的次数为0的那些索引,应考虑索引的设置是否合理。
   e、过大的索引应考虑能否使用索引压缩。
   f、最后列出的是报告的schema名称以及索引大小的过滤条件、索引被收集的日期。注,索引列的大小sum求和有些不准确。

 

3、获得索引使用频率脚本

  1. --该脚本作者为Damir Vadas,感谢Damir Vadas的贡献  
  2. robin@SZDB:~/dba_scripts/custom/sql> more idx_usage_detail.sql  
  3. /* ---------------------------------------------------------------------------  
  4.  CR/TR#  :  
  5.  Purpose : Shows index usage by execution (find problematic indexes)  
  6.    
  7.  Date    : 22.01.2008.  
  8.  Author  : Damir Vadas, damir.vadas@gmail.com  
  9.    
  10.  Remarks : run as privileged user  
  11.            Must have AWR run because sql joins data from there  
  12.            works on 10g >          
  13.               
  14.            @index_usage SCHEMA MIN_INDEX_SIZE  
  15.               
  16.  Changes (DD.MM.YYYY, Name, CR/TR#):            
  17.           25.11.2010, Damir Vadas  
  18.                       added index size as parameter  
  19.           30.11.2010, Damir Vadas  
  20.                       fixed bug in query  
  21.                                    
  22. --------------------------------------------------------------------------- */  
  23.   
  24. set linesize 140  
  25. set pagesize 160  
  26.    
  27. clear breaks  
  28. clear computes  
  29.    
  30. break on TABLE_NAME skip 2 ON INDEX_NAME ON INDEX_TYPE ON MB  
  31. compute sum of NR_EXEC on TABLE_NAME SKIP 2  
  32. compute sum of MB on TABLE_NAME SKIP 2  
  33.    
  34.    
  35. SET TIMI OFF  
  36. set linesize 140  
  37. set pagesize 10000  
  38. set verify off  
  39. col OWNER noprint  
  40. col TABLE_NAME for a30 heading 'Table name'  
  41. col INDEX_NAME for a30 heading 'Index name'  
  42. col INDEX_TYPE for a15 heading 'Index type'  
  43. col INDEX_OPERATION for a21 Heading 'Index operation'  
  44. col NR_EXEC for 9G999G990 heading 'Executions'  
  45. col MB for 999G990D90 Heading 'Index|Size MB' justify  right  
  46.    
  47.         WITH Q AS (  
  48.                 SELECT  
  49.                        S.OWNER                  A_OWNER,  
  50.                        TABLE_NAME               A_TABLE_NAME,  
  51.                        INDEX_NAME               A_INDEX_NAME,  
  52.                        INDEX_TYPE               A_INDEX_TYPE,  
  53.                        SUM(S.bytes) / 1048576   A_MB  
  54.                   FROM DBA_SEGMENTS S,  
  55.                        DBA_INDEXES  I  
  56.                  WHERE S.OWNER =  '&&1'  
  57.                    AND I.OWNER =  '&&1'  
  58.                    AND INDEX_NAME = SEGMENT_NAME  
  59.                  GROUP BY S.OWNER, TABLE_NAME, INDEX_NAME, INDEX_TYPE  
  60.                 HAVING SUM(S.BYTES) > 1048576 * &&2  
  61.         )  
  62.         SELECT /*+ NO_QUERY_TRANSFORMATION(S) */  
  63.                A_OWNER                                    OWNER,  
  64.                A_TABLE_NAME                               TABLE_NAME,  
  65.                A_INDEX_NAME                               INDEX_NAME,  
  66.                A_INDEX_TYPE                               INDEX_TYPE,  
  67.                A_MB                                       MB,  
  68.                DECODE (OPTIONS, null'       -',OPTIONS) INDEX_OPERATION,  
  69.                COUNT(OPERATION)                           NR_EXEC  
  70.          FROM  Q,  
  71.                DBA_HIST_SQL_PLAN d  
  72.          WHERE  
  73.                D.OBJECT_OWNER(+)= q.A_OWNER AND  
  74.                D.OBJECT_NAME(+) = q.A_INDEX_NAME  
  75.         GROUP BY  
  76.                A_OWNER,  
  77.                A_TABLE_NAME,  
  78.                A_INDEX_NAME,  
  79.                A_INDEX_TYPE,  
  80.                A_MB,  
  81.                DECODE (OPTIONS, null'       -',OPTIONS)  
  82.         ORDER BY  
  83.                A_OWNER,  
  84.                A_TABLE_NAME,  
  85.                A_INDEX_NAME,  
  86.                A_INDEX_TYPE,  
  87.                A_MB DESC,  
  88.                NR_EXEC DESC  
  89. ;  
  90.   
  91. PROMPT "Showed only indexes in &&1 schema whose size > &&2 MB in period:"  
  92.    
  93. SET HEAD OFF;  
  94. select to_char (min(BEGIN_INTERVAL_TIME), 'DD.MM.YYYY')  
  95.        || '-' ||  
  96.        to_char (max(END_INTERVAL_TIME), 'DD.MM.YYYY')  
  97. from dba_hist_snapshot;  
  98.    
  99. SET HEAD ON  
  100. SET TIMI ON  


4、补充说明
    脚本使用了2个替代变量,一个是schema,一个是索引的大小。缺省情况下,对于那些较小的索引以及仅仅运行一至两次的sql语句的历史执行计划不会被收集到DBA_HIST_SQL_PLAN。因此执行脚本时索引大小输入的建议值是100。如果需要收集所有的历史sql执行计划来判断索引是否被使用,需要修改statistics_level为all或者修改snapshot的收集策略。收集策略对系统性能有一定的影响,以及耗用大量磁盘空间,因此Prod环境应慎用(UAT和DEV则无妨)。


Forward from http://blog.csdn.net/leshami/article/details/8823133

Author: Leshami


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值