暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 查询dba_hist_active_sess_history查询花费太长时间

askTom 2018-10-03
374

问题描述

嗨,

我正在使用以下查询从dba_hist_active_sess_history中获取详细信息,该详细信息与过去90天内在一天中的特定小时发生的特定等待事件相匹配:

从dba_hist_active_sess_history中选择USER_ID,程序,机器,其中event = 'db文件分散读取 '并提取 (从强制转换中提取小时 (作为时间戳的样本时间))= 15和样本时间> SYSDATE - 90;

这个查询需要超过20分钟才能执行,这是巨大的。你能帮忙把它降到最低吗?

查询dba_hist_active_sess_history的原因 => 我们正在对等待事件的频率及其与出现最多的一天中的时间的关联进行一些数据分析,并试图找到我们成功的模式。现在,我们正在尝试使用上述查询获取有关该小时的等待事件的特定详细信息。

专家解答

基础表主要由DBID和SNAP_ID驱动,因此您可以通过较小的初始查询来利用它,例如

SQL> select dbid, min(snap_id)
  2  from  dba_hist_snapshot
  3  where begin_interval_time > sysdate-90
  4  group by dbid;

      DBID MIN(SNAP_ID)
---------- ------------
 872342268         9082

--
-- use that in the true query
--
SQL> set autotrace traceonly explain
SQL> select a.USER_ID, a.PROGRAM, a.MACHINE
  2  from dba_hist_active_sess_history  a
  3  where a.event='db file scattered read'
  4  and extract(hour from cast(a.sample_time as timestamp))= 15
  5  and a.sample_time > SYSDATE - 90
  6  and a.snap_id >=9082
  7  and a.dbid  = 872342268;

Execution Plan
----------------------------------------------------------
Plan hash value: 318490875

-------------------------------------------------------------------------------------------------------
| Id  | Operation                                    | Name                           | Rows  | Bytes |
-------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                             |                                |     1 |   102 |
|*  1 |  FILTER                                      |                                |       |       |
|   2 |   NESTED LOOPS OUTER                         |                                |     1 |   102 |
|   3 |    PARTITION RANGE ITERATOR                  |                                |     1 |    62 |
|*  4 |     TABLE ACCESS BY LOCAL INDEX ROWID BATCHED| WRH$_ACTIVE_SESSION_HISTORY    |     1 |    62 |
|*  5 |      INDEX RANGE SCAN                        | WRH$_ACTIVE_SESSION_HISTORY_PK |     1 |       |
|   6 |    TABLE ACCESS BY INDEX ROWID BATCHED       | WRH$_EVENT_NAME                |     1 |    40 |
|*  7 |     INDEX RANGE SCAN                         | WRH$_EVENT_NAME_PK             |     1 |       |
-------------------------------------------------------------------------------------------------------


* 可能 * 更好-这取决于您拥有多少数据,正在检索多少数据等
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论