• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle 监控索引使用率脚本分享

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

    1、索引使用频率报告

    --运行环境
    SQL> select * from v$version where rownum2;
    
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
    
    --获得当前数据库索引的使用频率
    SQL> @idx_usage_detail.sql
    Enter value for 1: GO_ADMIN
    Enter value for 2: 100
                                             Index
    Table name           Index name           Index type    Size MB Index operation    Executions
    ------------------------------ ------------------------------ ------------ ----------- --------------------- ----------
    ACC_POS_CASH_PL_TBL_ARC    PK_ACC_POS_CASH_PL_ARCH_TBL  NORMAL     3,328.00 RANGE SCAN          99
                                                SAMPLE FAST FULL SCAN     8
                                                UNIQUE SCAN          3
                                                SKIP SCAN           2
    ****************************** ****************************** ************ -----------            ----------
    sum                                     13,312.00               112
    
    
    ACC_POS_CASH_TBL_ARC      PK_ACC_POS_CASH_ARCH_TBL    NORMAL     2,560.00 RANGE SCAN          168
                                                UNIQUE SCAN          14
                                                SAMPLE FAST FULL SCAN     12
                                                SKIP SCAN           1
    ****************************** ****************************** ************ -----------            ----------
    sum                                     10,240.00               195
    
    
    ACC_POS_HIST_TBL        ACC_HIST_TRANS_DATE_IDX    NORMAL      384.00 RANGE SCAN          917
                                                SKIP SCAN          210
                                                SAMPLE FAST FULL SCAN     4
                                                FAST FULL SCAN         1
                    PK_ACC_POS_HIST_TBL      NORMAL      192.00 UNIQUE SCAN          7
                                                SAMPLE FAST FULL SCAN     3
                    TRANS_NUM_IDX         NORMAL      232.00 RANGE SCAN          41
                                                SAMPLE FAST FULL SCAN     3
                                                FAST FULL SCAN         1
    ****************************** ****************************** ************ -----------            ----------
    sum                                      2,616.00              1,187
    
    
    ACC_POS_INT_TBL        ACC_POS_INT_10DIG_IDX     FUNCTION-    2,622.00 RANGE SCAN          59
                                   BASED NORMAL
    
                                                SAMPLE FAST FULL SCAN     4
                                                FAST FULL SCAN         2
                    PK_ACC_POS_INT_TBL       NORMAL     2,496.00 RANGE SCAN          65
                                                FAST FULL SCAN        53
                                                UNIQUE SCAN          14
                                                SKIP SCAN           13
                                                SAMPLE FAST FULL SCAN     1
    ****************************** ****************************** ************ -----------            ----------
    sum                                     20,346.00               211
    
    
    ACC_POS_STOCK_TBL_ARC     PK_ACC_POS_STOCK_ARCH_TBL   NORMAL     18,977.00 RANGE SCAN          177
                                                SAMPLE FAST FULL SCAN     10
                                                UNIQUE SCAN          4
                                                SKIP SCAN           3
    ****************************** ****************************** ************ -----------            ----------
    sum                                     75,908.00               194
    
    
    STK_TBL_ARC          PK_STK_ARCH_TBL        NORMAL      920.00 RANGE SCAN          126
                                                UNIQUE SCAN          38
                                                SKIP SCAN           17
                                                SAMPLE FAST FULL SCAN     2
    ****************************** ****************************** ************ -----------            ----------
    sum                                      3,680.00               183
    
    
    STK_TBL_LOG          PK_STK_TBL_LOG         NORMAL      480.00 UNIQUE SCAN          56
    ****************************** ****************************** ************ -----------            ----------
    sum                                       480.00                56
    
    
    TRADE_BROKER_CHRG_TBL_ARC   PK_TRADE_BROKER_CHRG_TBL_ARC  NORMAL      128.00    -            0
                    UNI_TDBK_CHRG_ARC       NORMAL      104.00 RANGE SCAN          283
    ****************************** ****************************** ************ -----------            ----------
    sum                                       232.00               283
    
    
    TRADE_BROKER_JOURNAL_TBL_ARC  IDX_TDBK_JRNL_ARC_ENTRY_DT   NORMAL      168.00    -            0
                    IDX_TDBK_JRNL_ARC_INSTRU_ID  NORMAL      144.00 FULL SCAN           1
                    IDX_TDBK_JRNL_ARC_STOCK_CD   NORMAL      144.00 FULL SCAN           1
                    IDX_TDBK_JRNL_ARC_TRADED_PRICE NORMAL      144.00 FULL SCAN           1
                    PK_TRADE_BROKER_JOURNAL_ARC  NORMAL      200.00    -            0
    ****************************** ****************************** ************ -----------            ----------
    sum                                       800.00                3
    
    
    TRADE_CLIENT_CHRG_TBL_ARC   IDX_TDCL_CHRG_ARC_GRP_REF_ID  NORMAL      704.00 RANGE SCAN         3,537
                    PK_TRADE_CLIENT_CHRG_TBL_ARC  NORMAL     1,539.00 RANGE SCAN          24
                                                SAMPLE FAST FULL SCAN     2
                    UNI_TDCL_CHRG_ARC       NORMAL     1,216.00 RANGE SCAN         1,103
                                                FAST FULL SCAN         3
                                                SAMPLE FAST FULL SCAN     2
    ****************************** ****************************** ************ -----------            ----------
    sum                                      7,430.00              4,671
    
    
    TRADE_CLIENT_DTL_TBL_ARC    IDX_TDCL_DTL_ARC_ACTION_N_STUS NORMAL      312.00    -            0
                    IDX_TDCL_DTL_ARC_ACT_TD_PRICE NORMAL      184.00 FULL SCAN           1
                    IDX_TDCL_DTL_ARC_REF_ID    NORMAL      344.00 RANGE SCAN         4,623
                                                FAST FULL SCAN         1
                                                FULL SCAN           1
                    IDX_TDCL_DTL_ARC_TRADED_PRICE NORMAL      184.00    -            0
                    PK_TRADE_CLIENT_DTL_TBL_ARC  NORMAL      432.00    -            0
                    UNI_TDCL_DTL_ARC_TRADE_DTL_ID NORMAL      272.00    -            0
    ****************************** ****************************** ************ -----------            ----------
    sum                                      2,416.00              4,626
    
    
    TRADE_CLIENT_TBL_ARC      IDX_TDCL_ARC_ACC_NUM      NORMAL      152.00 RANGE SCAN          534
                    IDX_TDCL_ARC_GRP_REF_ID    NORMAL      120.00 RANGE SCAN          550
                                                FAST FULL SCAN         1
                    IDX_TDCL_ARC_INPUT_DATE    NORMAL      120.00 RANGE SCAN         7,231
                    IDX_TDCL_ARC_PL_STK      NORMAL      144.00 SKIP SCAN          156
                                                RANGE SCAN           3
                                                FULL SCAN           1
                    IDX_TDCL_ARC_TRADE_DATE    NORMAL      120.00 RANGE SCAN        12,778
                    PK_TRADE_CLIENT_TBL_ARC    NORMAL      160.00 RANGE SCAN          37
                    UNI_TDCL_ARC_REF_ID      NORMAL      112.00 UNIQUE SCAN         157
                                                FAST FULL SCAN         8
                                                SAMPLE FAST FULL SCAN     1
    ****************************** ****************************** ************ -----------            ----------
    sum                                      1,560.00              21,457
    
    --Author : Robinson
    --Blog  : http://blog.csdn.net/robinson_0612
    
    "Showed only indexes in GO_ADMIN schema whose size > 100 MB in period:"
    
    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、获得索引使用频率脚本

    --该脚本作者为Damir Vadas,感谢Damir Vadas的贡献
    robin@SZDB:~/dba_scripts/custom/sql> more idx_usage_detail.sql
    /* ---------------------------------------------------------------------------
     CR/TR# :
     Purpose : Shows index usage by execution (find problematic indexes)
     
     Date  : 22.01.2008.
     Author : Damir Vadas, damir.vadas@gmail.com
     
     Remarks : run as privileged user
          Must have AWR run because sql joins data from there
          works on 10g >    
          
          @index_usage SCHEMA MIN_INDEX_SIZE
          
     Changes (DD.MM.YYYY, Name, CR/TR#):     
         25.11.2010, Damir Vadas
               added index size as parameter
         30.11.2010, Damir Vadas
               fixed bug in query
                     
    --------------------------------------------------------------------------- */
    
    set linesize 140
    set pagesize 160
     
    clear breaks
    clear computes
     
    break on TABLE_NAME skip 2 ON INDEX_NAME ON INDEX_TYPE ON MB
    compute sum of NR_EXEC on TABLE_NAME SKIP 2
    compute sum of MB on TABLE_NAME SKIP 2
     
     
    SET TIMI OFF
    set linesize 140
    set pagesize 10000
    set verify off
    col OWNER noprint
    col TABLE_NAME for a30 heading 'Table name'
    col INDEX_NAME for a30 heading 'Index name'
    col INDEX_TYPE for a15 heading 'Index type'
    col INDEX_OPERATION for a21 Heading 'Index operation'
    col NR_EXEC for 9G999G990 heading 'Executions'
    col MB for 999G990D90 Heading 'Index|Size MB' justify right
     
        WITH Q AS (
            SELECT
                S.OWNER         A_OWNER,
                TABLE_NAME        A_TABLE_NAME,
                INDEX_NAME        A_INDEX_NAME,
                INDEX_TYPE        A_INDEX_TYPE,
                SUM(S.bytes) / 1048576  A_MB
             FROM DBA_SEGMENTS S,
                DBA_INDEXES I
             WHERE S.OWNER = '1'
              AND I.OWNER = '1'
              AND INDEX_NAME = SEGMENT_NAME
             GROUP BY S.OWNER, TABLE_NAME, INDEX_NAME, INDEX_TYPE
            HAVING SUM(S.BYTES) > 1048576 * 2
        )
        SELECT /*+ NO_QUERY_TRANSFORMATION(S) */
            A_OWNER                  OWNER,
            A_TABLE_NAME                TABLE_NAME,
            A_INDEX_NAME                INDEX_NAME,
            A_INDEX_TYPE                INDEX_TYPE,
            A_MB                    MB,
            DECODE (OPTIONS, null, '    -',OPTIONS) INDEX_OPERATION,
            COUNT(OPERATION)              NR_EXEC
         FROM Q,
            DBA_HIST_SQL_PLAN d
         WHERE
            D.OBJECT_OWNER(+)= q.A_OWNER AND
            D.OBJECT_NAME(+) = q.A_INDEX_NAME
        GROUP BY
            A_OWNER,
            A_TABLE_NAME,
            A_INDEX_NAME,
            A_INDEX_TYPE,
            A_MB,
            DECODE (OPTIONS, null, '    -',OPTIONS)
        ORDER BY
            A_OWNER,
            A_TABLE_NAME,
            A_INDEX_NAME,
            A_INDEX_TYPE,
            A_MB DESC,
            NR_EXEC DESC
    ;
    
    PROMPT "Showed only indexes in 1 schema whose size > 2 MB in period:"
     
    SET HEAD OFF;
    select to_char (min(BEGIN_INTERVAL_TIME), 'DD.MM.YYYY')
        || '-' ||
        to_char (max(END_INTERVAL_TIME), 'DD.MM.YYYY')
    from dba_hist_snapshot;
     
    SET HEAD ON
    SET TIMI ON
    
    

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

    您可能感兴趣的文章:
    • oracle监控某表变动触发器例子(监控增,删,改)
    • Oracle 创建监控账户 提高工作效率
    • Oracle 10g各个帐号的访问权限、登录路径、监控状态命令查询等等
    • Oracle 8x监控sysdba角色用户登陆情况
    • 在Linux系统上同时监控多个Oracle数据库表空间的方法
    上一篇:Oracle索引质量介绍和分析脚本分享
    下一篇:CentOS6.2上安装Oracle10g报ins_emdb.mk错误处理方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Oracle 监控索引使用率脚本分享 Oracle,监控,索引,使用率,