不开index monitor的情况下判断索引是否被使用过

        如果要知道某个索引是否会被使用过,传统的方法是开启index monitor。但此方法有两点不足之处:(1)会带来小量的性能负载(2)只能在开启监控后,要观察一段时间才能知道是否被使用过,需要观察多久才能得到数据无法确定,然而往往要确认索引是否被使用过时,希望立即能拿到数据

        今天突然想到一种办法,SQL执行计划中的访问对象“NAME”列不是也有访问的对象信息么,其中也包含访问的索引名称呢。查SQL执行计划信息不就可以知道索引是否有被用到了么。

        SQL语句在执行时如果进行过硬解析就会产生执行计划,即便是软解析,那么在内存中也会存在执行计划,即便执行计划已经从shared_pool中刷出去了,只要在产生快照时有存在shared_pool中,那么还可以从AWR数据中查得到历史的执行计划。

        有了这个思路就好办了,下面两种方法可以查看到指定的索引以前是否被使用过:

 

第一、从v$sql_plan视图中查看还存在shared_pool中的访问了指定索引的执行计划记录

    SQL>select sql_id,plan_hash_value,timestamp,object_namefrom v$sql_plan whereobject_name='INDEX_LITEST2_OBJECTID'

sql_id

plan_hash_value

options

timestamp

object_name

3j6xbabaz36v9

2954962778

RANGE SCAN

2013/9/12 23:38

INDEX_LITEST2_OBJECTID

dpaj071ypmj9j

3938988231

RANGE SCAN

2013/9/12 23:38

INDEX_LITEST2_OBJECTID

      以上查询结果,说明“INDEX_LITEST2_OBJECTID”这个索引在2013/9/12 23:38解析的plan_hash_value为2954962778、3938988231的SQL语句中用到了该索引。

 

第二、查看历史以来使用了指定索引的执行计划记录

        如果从shared_pool中查不到指定索引的记录,还可以从AWR历史数据中查找,如下:

        SQL> select sql_id,plan_hash_value,operation,options,timestamp,object_namefrom dba_hist_sql_plan whereobject_name='IDX_INVOICE_001'orderby5desc

sql_id

plan_hash_value

options

timestamp

object_name

f5bnpqug8a13f

1001597107

RANGE SCAN

2013/9/2 19:00

IDX_INVOICE_001

db0zvtnr5qugm

1001597107

RANGE SCAN

2013/9/2 18:58

IDX_INVOICE_001

fy7r1q6bdpk0f

1001597107

RANGE SCAN

2013/9/2 18:56

IDX_INVOICE_001

0n5b0jfdaukvq

1001597107

RANGE SCAN

2013/9/2 18:54

IDX_INVOICE_001

6zpj6sdmmhh14

1001597107

RANGE SCAN

2013/9/2 18:48

IDX_INVOICE_001

gwcpdx6yafsm2

1001597107

RANGE SCAN

2013/9/2 18:42

IDX_INVOICE_001

54nfxwgjw95g4

1001597107

RANGE SCAN

2013/9/2 18:40

IDX_INVOICE_001

40797ymubw53n

1001597107

RANGE SCAN

2013/9/2 18:35

IDX_INVOICE_001

7t7267bz2qvjy

1001597107

RANGE SCAN

2013/9/2 18:26

IDX_INVOICE_001

    该方法可以查看到的历史时长,需要根据您的AWR历史数据保留时长而定。

 

       本文由“踩点”所作,转发请说明出处。谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT圈黎俊杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值