Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【诊断方法】AWR 快照(snapshot)无法获取

【诊断方法】AWR 快照(snapshot)无法获取

作者头像
SQLplusDB
发布于 2020-03-26 02:43:05
发布于 2020-03-26 02:43:05
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

Keyword:

AWR snapshot Generation MMON Suspension

AWR是ORACLE数据库重要的诊断工具,但是有时可能遇到AWR快照无法获取的问题,影响性能监测。本文介绍如何诊断和解决这类问题。

■收集诊断信息

1.获取AWR Snapshot的设定信息和过去取得信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

set mark html on
spool Info.html
alter session set NLS_DATE_FORMAT = 'YYYY/MM/DD HH24:MI:SS';
alter session set nls_timestamp_format='YYYY-MM-DD HH24:MI:SS.FF3'

---数据库状态
select open_mode from v$database;
---AWR相关环境设定信息
show parameter control_management_pack_access
show parameter statistics

---AWR设定信息
select * from dba_hist_wr_control;

---快照的取得信息
select * from dba_hist_snapshot order by snap_id;

---快照的最新取得时间信息
col systimestamp form a35
col most_recent_snap_time form a25
col snap_interval form a17
select systimestamp,
      most_recent_snap_time,
      snap_interval
 from wrm$_wr_control
where dbid = (select dbid from v$database);

---快照的错误信息
col instance_number form 999 head INST
col begin_interval_time form a25
col flush_elapsed form a17
col status form 999
col error_count form 999 head ERR
col snap_flag form 999 head SNAP
select * from
 (select snap_id,instance_number,STARTUP_TIME,begin_interval_time,
         flush_elapsed,status,error_count,snap_flag
    from wrm$_snapshot
   where dbid = (select dbid from v$database)
   order by snap_id desc)
 where rownum <= 10
 order by snap_id
;

---快照的错误原因
select * from wrm$_snap_error
where dbid = (select dbid from v$database)
order by snap_id;

---版本11.2.0.2以后,通过WRM$_SNAPSHOT_DETAILS视图获得各AWR对象表的处理时间

 set pagesize 999
 column name format a28
 column time format a29
 variable dbid number
 exec select dbid into :dbid from v$database;
 variable snap_id number
 exec select max(snap_id) into :snap_id from wrm$_snapshot where dbid=:dbid;
 select table_name_kewrtb name, end_time-begin_time time
 from wrm$_snapshot_details, x$kewrtb
 where snap_id = :snap_id and dbid = :dbid
      and table_id = table_id_kewrtb
      order by table_id;

---获取AQ相关信息,看是否AQ的信息太多
SELECT q_name, a, COUNT (*) HOW_MANY
FROM (SELECT q_name, TRUNC(enq_time, 'DD') AS a
FROM SYS.alert_qt
ORDER BY enq_time)
GROUP BY a, q_name
ORDER BY a;

select systimestamp, count(*), QUEUE, MSG_STATE
from aq$ALERT_QT
group by msg_state, queue;

spool off;
set mark html off;

参考: Troubleshooting: Missing Automatic Workload Repository (AWR) Snapshots and Other Collection Issues (Doc ID 1301503.1)

2.查看Alert log和相关的一些Trace信息(MMON,M00x等进程),看是否有有用的相关信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例如:
Suspending MMON slave action kewrmafsa_ for 82800 seconds

3.确认数据库的Path状况:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export ORACLE_HOME=<OracleHome>
cd $ORACLE_HOME\OPatch
./opatch lsinventory

4.确认MMON 是否挂起(Suspension)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
查看本节点的MMON状态:SQL> oradebug setmypid
SQL> oradebug unit_test kebm_dmp_slv_attrs kewrmafsa_

输出例:
SQL> oradebug setmypid
Statement processed.
SQL> oradebug unit_test kebm_dmp_slv_attrs kewrmafsa_
Status: 2
Flags: 0
Runtime limit: 1800
CPU time limit: 600
Violations: 0
Suspended until: 0 ★如果这个值大于0的话,则代表MMON发生了挂起


查看远程节点的MMON状态(RAC):SQL> oradebug setmypid
SQL> oradebug unit_test kebm_dmp_slv_attrs kewrmrfsa_

如果发生了挂起,使用如下命令进行恢复。SQL> oradebug unit_test kebm_set_slv_attrs kewrmafsa_ retain retain retain retain 0 0

5.确认通过手动收集是否能够正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例:
SQL> exec dbms_workload_repository.create_snapshot();

6.确认用于保存AWR的SYSAUX表空间是否有空闲空间和使用状况。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> connect / as sysdba
SQL> @?/rdbms/admin/awrinfo.sql

7.设置MMON 的动作Trace和snapshot flush Trace (RAC情况下每个Instance都需要设置)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
有效:
---MMON action trace
SQL> alter session set "_swrf_test_action" = 28;
--snapshot flush Trace
SQL> alter session set "_swrf_test_action" = 10;

无效:(设置后等待1小时以上,包含AWR取得时间段)
SQL> alter session set "_swrf_test_action" = 29;
SQL> alter session set "_swrf_test_action" = 11;

8.设置针对MMON 的SQL trace

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例:
有效:
begin
dbms_monitor.serv_mod_act_trace_enable(service_name=>'SYS$BACKGROUND',
module_name=>'MMON_SLAVE',
action_name=>'Auto-Flush Slave Action');

dbms_monitor.serv_mod_act_trace_enable(service_name=>'SYS$BACKGROUND',
module_name=>'MMON_SLAVE',
action_name=>'Remote-Flush Slave Action');
end;
/

无效:
begin
dbms_monitor.serv_mod_act_trace_disable(service_name=>'SYS$BACKGROUND',
module_name=>'MMON_SLAVE',
action_name=>'Auto-Flush Slave Action');

dbms_monitor.serv_mod_act_trace_disable(service_name=>'SYS$BACKGROUND',
module_name=>'MMON_SLAVE',
action_name=>'Remote-Flush Slave Action');
end;
/

9.也可以通过设置AWR test 事件来获取MMON 的SQL trace

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

有效:
(trace AWR SQL)
alter session set events 'immediate trace name awr_test level 3';

另外,也可以通过以下的设置获得其他的一些trace。
trace AWR snapshots:
alter session set events 'immediate trace name awr_test level 1';
trace AWR purging:
alter session set events 'immediate trace name awr_test level 2';

无效:(关闭所有awr test trace)
alter session set events 'immediate trace name awr_test level 4';

10.如果在AWR快照时发生挂起(Hang)的话,通过如下方法获取hanganalyze和 systemstate,确认进程状态和errorstack信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

SQL> connect /as sysdba
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug setinst all
SQL> oradebug -g all hanganalyze 4
SQL> oradebug -g all dump systemstate 266
SQL> quit

<等待...>
SQL> connect /as sysdba
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug setinst all
SQL> oradebug -g all hanganalyze 4
SQL> oradebug -g all dump systemstate 266
SQL> quit

<等待...>
SQL> connect /as sysdba
SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug setinst all
SQL> oradebug -g all hanganalyze 4
SQL> oradebug -g all dump systemstate 266
SQL> quit

或者,通过一下方法获取errostack

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

1.确认MMONPID
SELECT s.program, p.pid
FROM v$session s, v$process p
WHERE s.paddr=p.addr
AND s.program like '%(MMON)';

2.获取errorstack
oradebug setorapid <MMON_PID_from_previous_query>
oradebug unlimit
oradebug short_stack   ---> Repeat this command one or more times.
oradebug tracefile_name

■一般解决方法

通过如下方法尝试重新启动AWR 快照取得的动作

1.通过更改“restricted session”的mode重新唤醒MMON进程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例:
alter system enable restricted session;
alter system disable restricted session;

2.通过OS命令将MMON进程Kill

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
:
kill -9 <MMON Process ID>

MMON被kill或,会自动启动MMONMMON Slave进程(m00x)

3.重启数据库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
通过重启数据库会重新启动MMON,从而解决相关问题

4.删除AQ相关信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--
alter system set "_alert_message_purge"=0;

declare
po dbms_aqadm.aq$_purge_options_t;
begin
 dbms_aqadm.purge_queue_table(queue_table => 'ALERT_QT',
                              purge_condition => NULL,
                              purge_options => po);
end;
/

alter system set "_alert_message_purge"=1;

5.重建AWR功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
参考:
How to Recreate the Automatic Workload Repository (AWR)? (Doc ID 782974.1)

6.字典表统计信息不准确导致性能慢

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例:
SQL> execute dbms_stats.gather_table_stats

7.如果发现在处理某个AWR对象时耗时间而导致无法完成的话,可以使用"_awr_disabled_flush_tables" 参数跳过对该对象的处理,这样会导致AWR缺少某些数据,但是整体可以完成。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
例:
alter system set "_awr_disabled_flush_tables" = 'wrh$_sql_bind_metadata';

用碎片化的时间,一点一滴地学习一套系统化的知识。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Oracle数据库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理?
今天小麦苗给大家分享的是SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理?。
AiDBA宝典
2019/09/29
1.6K0
SQL调优和诊断工具之SQL Trace (10046 Event)介绍
为了诊断SQL性能或者其他方面的问题,有时我们需要跟踪SQL语句和的执行过程,这时我们可以启用SQL Trace (10046 Event)来收集语句的执行过程和各种相关信息。
SQLplusDB
2022/08/19
8590
SQL调优和诊断工具之Optimizer Trace(10053 Event)介绍
通过Optimizer Trace(10053 Event)可以跟踪优化器(CBO)的动作内容,了解CBO是如何选择最优执行计划的,诊断SQL解析时的相关问题。
SQLplusDB
2022/08/19
5310
Oracle 11.2.0.4 awr过期快照无法自动清理解决
col segment_name for a32; set linesize 500; set pagesize 500; with t1 as ( select round(sum(bytes)/1024/1024) MB,segment_name from dba_segments where owner='SYS' group by segment_name order by 1 desc ) select * from t1 where rownum<16;
星哥玩云
2022/08/17
1.2K0
查看SQL执行计划的方法及优劣
作者 | 胡佳伟:云和恩墨技术工程师,有多年数据库优化经验,在一线执行过多个包括通信、保险等行业的优化项目。
数据和云
2018/07/27
1.2K0
查看SQL执行计划的方法及优劣
通过shell脚本抓取awr报告中的问题sql(r6笔记第78天)
awr报告中的sql明细部分基本必看的部分,尤其是SQL Order by Elapsed time这个部分,能够很清晰的看到哪些sql语句占用了较多的DB time,所占的比例。这个可以作为调优时的一个重要参考,可以有针对性的来看哪些sql需要格外关注。 比如说我们得到了一个awr报告,Elapsed time这个部分的内容如下。可以很明显看出sql_id为dfb15m5s2uwmc的sql需要格外关注,因为它占用了近一半的DB time. Elapsed Time (s)Executionsper E
jeanron100
2018/03/16
9110
网罗收集10046的各种Case,方便trace信息的收集 | Oracle官方博客转载
原文链接:https://blogs.oracle.com/database4cn/10046casetrace
SQLplusDB
2020/08/13
5630
探究AWR 第一篇
statspack相比awr算是比较通用,而且免费,可以在标准版,企业版中使用,awr是新企业版本中才有的,算是statspack的一个升级版,而且代码不公开。但是实现的功能和数据的采集要更丰富。 awr算是dba工作的必备工具。自己总结了一下,大概由以下几个方面来说明一下。 1.snapshot的管理 2.基线的管理 3.所需空间开销和设置 4.awr数据的迁移 5.生成awr相关的报告 6.awr相关的视图和基表 1.snapshot的管理 先来看看snapshot,这是列出近几天的snapshot
jeanron100
2018/03/13
7080
【DB笔试面试435】SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理?
题目 SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理?
AiDBA宝典
2019/09/29
7630
记录一则ASM实例阻塞,rbal进程异常的案例
1.故障现象描述 2.确认故障现象 3.排查ASM层面 4.解决问题 1.故障现象描述 环境:AIX 7.1 + Standalone Oracle 11.2.0.4 现象:客户反映某11g版本的ADG备库无法正常进行任何查询,数据库alert发现ORA-00494:enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 18875390'. 2.确认故障现象 登录到db实例,尝试查询select open_mode
Alfred Zhao
2018/05/11
1.4K0
【MOS】诊断 ’library cache mutex X’ 等待 (Doc ID 2331144.1)
诊断 ’library cache: mutex X’ 等待 (Doc ID 2331144.1)
AiDBA宝典
2024/04/15
3810
【MOS】诊断 ’library cache  mutex X’ 等待 (Doc ID 2331144.1)
Oracle SQL调优系列之AWR报告简介
对于SQL调优,局部SQL,我们可以直接使用执行计划等直接调优,而对于整个系统来说?这时候就可以用Oracle系统自带的报告对系统进行整体分析了,Oracle提供好几种性能分析的报告,比如AWR、ASH、ADDM等等 这篇博客主要介绍AWR
SmileNicky
2022/05/07
1.7K0
Oracle SQL调优系列之AWR报告简介
Oracle AWR 阙值影响历史执行计划
      最近有网友提到为什么在dba_hist_sql_plan中无法查看到sql语句的历史执行计划,对于这个问题是由于缺省情况下,Oracle 设定的阙值并非捕获所有的sql语句,所以无法看到某些sql历史执行计划乃正常现象。在Oracle 9i的时候,我们可以通过设定不同的快照level获得不同程度的详细信息。也可以单独配置收集sql的阙值,如指定sql的执行次数,磁盘读的次数,解析调用的数量等。所有超出这个设置的sql语句都收集到snapshot之中。Oracle 10g,11g也有相应的设置。下面来描述这个问题。
Leshami
2018/08/14
6860
使用shell定制awr脚本(r3笔记第32天)
大家在做性能问题诊断的时候,awr是不可或缺的工具,使用?/rdbms/admin/awrrpt.sql可能大家使用的多了,可能有时候感觉输入参数还是有些太繁琐了。一边复制,一边得到一个快照列表查看,
jeanron100
2018/03/14
6080
一个执行计划异常变更的案例 - 外传之查询执行计划的几种方法
《一个执行计划异常变更的案例 - 外传之rolling invalidation》
bisal
2019/01/30
6590
Oracle基础教程之AWR固定基线
前言:可以创建AWR基线来为数据库建立已保存的工作负载视图,以便以后用来与其他AWR快照进行比较。
星哥玩云
2022/08/16
3660
使用shell自动化诊断性能问题(一)(r11笔记第41天)
一直以来要做性能分析的自动化工作,但是久久没有动笔,今天索性来更新一版。 首先我希望得到的一个基本效果就是后台去扫描数据库的DB time,如果超出了阈值,比如这里我设置的为400(即DB time为400%),则会开启自动诊断的任务。时间范围是提前一个小时和当前时间。我对已有的脚本做了一些改动,加了一些逻辑,后续还会不断完善。 DBTIME_THRESHOLD=400 DATE=`date '+%Y%m%d'` BEGIN_HOUR=`date -d"1 hour ago" +"%H"` END_HOU
jeanron100
2018/03/21
6580
数据库漫谈(七)
本文作者系Scott(中文名陈晓辉),现任大连华信资深分析师 ,ORACLE数据库专家,曾就职于甲骨文中国。个人主页:segmentfault.com/u/db_perf ,经其本人授权发布。
SQLplusDB
2021/02/23
5650
数据库漫谈(七)
####### Scripts Summary #######
Scripts Summary Version: 1.0.1 issueDate: 2017-11-11 modifiedDate: 2017-11-28
Alfred Zhao
2019/05/24
5800
【DB笔试面试819】在Oracle中,什么是AWR?
ASH(Active Session History,活动会话历史信息)、AWR(Automatic Workload Repository,自动负载信息库)、ADDM(Automatic Database Diagnostic Monitor,数据库自动诊断监视工具)是Oracle性能调整的三把利剑,需要深入地了解,但是面试一般都问得比较简单,主要问到的是AWR。
AiDBA宝典
2020/06/17
1.7K0
推荐阅读
相关推荐
​SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验