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

Oracle 搜索产生巨大重做的前10个查询

askTom 2017-08-21
336

问题描述

亲爱的专家,

请帮助您了解如何查找产生巨大重做的前10个查询/会话。

我尝试使用以下查询来检查每天生成的重做,但无法找到产生重做的前10个此类会话。

选择trunc (完成 _ 时间) 运行日期
,count(*) logswitch
,round((sum(blocks * block_size)/1024/1024)) “每天重做 (TB)”
来自Gv $ 归档日志
按trunc分组 (完成时间)
按1订购;


然后通过对对象进行排序以及它们各自的SQL_ID和各自的查询,但无法弄清楚生成查询或会话的巨大重做。请帮忙 ....

选择to_char (开始 _ 间隔 _ 时间,'yyyy_mm_dd HH24:MI') 快照时间,
dhsso.对象名称,
求和 (db_block_changes_delta) 作为最大值
从dba_hist_seg_stat dhss,
dba_hist_seg_stat_obj dhsso,
dhs快照dhs
其中dhs.snap_id = dhss.snap_id
和dhs.instance_number = dhss.instance_number
和dhss.obj # = dhsso.obj #
和dhss.dataobj # = dhsso.dataobj #
和开始 _ 间隔 _ 到 _ 日期之间的时间 ('2013_05_22 17 ','yyyy_mm_dd hh24')
和日期 ('2013_05_22 21 ','yyyy_mm_dd HH24')
按to_char分组 (开始 _ 间隔 _ 时间,'yyyy_mm_dd HH24:MI'),
dhsso.object_name按maxchages asc排序;


选择to_char (开始 _ 间隔 _ 时间,'yyyy_mm_dd HH24:MI'),
dbms_lob.substr(sql_text,4000,1),
dhss.instance_number,
Dhs.sql_id,执行 _ 增量,行 _ 处理 _ 增量
从dba_hist_sqlstat dhss,
dhs快照dhs,
dba_hist_sqltext dhst
其中upper(dhst.sql_text) 像 '% MGMT_POLICY_ASSOC_CFG %'
和dhs.snap_id = dhs.snap_id
和dhs.instance_Number = dhs.instance_number
和开始 _ 间隔 _ 到 _ 日期之间的时间 ('2013_05_22 17 ','yyyy_mm_dd hh24')
和日期 ('2013_05_22 21 ','yyyy_mm_dd HH24')
和dhss.sql_id = dhst.sql_id;



问候,
昆丹

专家解答

我会开始简单-找到那些处理大量行但不是SELECT语句的SQL,例如

SQL> select executions, rows_processed, sql_text
  2  from v$sql
  3  where rows_processed > 10
  4  and upper(sql_text) not like 'SELECT%'
  5  and parsing_user_id != 0               -- to ignore SYS
  6  and command_type != 47                 -- to ignore PL/SQL
  7  order by rows_processed desc;

EXECUTIONS ROWS_PROCESSED SQL_TEXT
---------- -------------- ----------------------------------------------------------------
         1            100 insert into t select rownum ,rpad(rownum,2000,'x') from dual con
                          nect by level <= 100

        11             77 DELETE FROM ATE_QUESTIONS_TOP20
        11             77 INSERT INTO ATE_QUESTIONS_TOP20 ( QUESTION_ID, SUBJECT, THECOUNT
                           ) SELECT Y.* FROM ( SELECT Q.ID, Q.SUBJECT, X.THECOUNT FROM ATE
                          _SUBMITTED_QUESTIONS Q, ( SELECT QUESTION_ID, COUNT(*) THECOUNT
                          FROM ATE_QUESTION_VIEWS GROUP BY QUESTION_ID ) X WHERE Q.ID = X.
                          QUESTION_ID AND Q.STATUS = 5 ORDER BY X.THECOUNT DESC ) Y WHERE
                          ROWNUM <= 20
...
...



显然,使用LOB等,“行” 和 “重做” 之间没有严格的关系,但是上述查询通常是一个很好的起点,并且显然可以将其转换为针对dba_hist_sqlstat的工作,如果您想在时间范围内进行操作。

一旦您确定了一个想要进一步探索的SQL_ID (或一组),您可以转到更多细节,甚至可以跟踪整个数据库的 * just * 这些语句,例如

ALTER SYSTEM SET事件sql_trace [sql: sql_id = bqfkskp93rqzc] bind = true,wait = true;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论