加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 数据库 > Oracle > 正文

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

发布时间:2021-01-24 14:04:36 所属栏目:Oracle 来源:互联网
导读:这篇文章主要介绍了Oracle 监控索引使用率脚本分享,本文给出的脚本将得到索引的使用率,可以很好的度量索引的使用情况以及根据这个值来判断当前的这些索引是否可以被移除或改进,需要的朋友可以参考下

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

1、索引使用频率报告

select * from v$version where rownum<2;

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、获得索引使用频率脚本

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,OPTIONS)
ORDER BY
    A_OWNER,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

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读