awr报告无法生成原因分析_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1737 | 回复: 0   主题: awr报告无法生成原因分析        下一篇 
snisn
注册用户
等级:新兵
经验:51
发帖:84
精华:0
注册:2011-10-23
状态:离线
发送短消息息给snisn 加好友    发送短消息息给snisn 发消息
发表于: IP:您无权察看 2015-6-16 11:43:46 | [全部帖] [楼主帖] 楼主

1.问题描述:
  最近想要通过awr观察下某个oracle实例的性能情况,碰到了在sqlplus执行awrrpt.sql到选择snapshot区间的时候无任何区间供选导致无法进一步生成awr的情况,而且手动使用execute DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();一直执行无果。

2.问题分析:

可能的情况1:sysaux空间不足,因为awr报告的原始数据都是存放咋sysaux表空间的,若空间不足可能导致awr无数据。通过查询表空间的使用情况发现sysaux表空间充足,故排除该原因。

可能的情况2:awr数据字典无数据

 SELECT * from wrh$_active_session_history; --快照采集信息情况,从v$active_session_history获取  
select * from dba_hist_active_sess_history --是wrh$_active_session_history和其他几个视图的联合展现。这两个数据字典的数据时awr报告的主要数据来源,是通过定期获取其它性能视图的数据积累而成的。 通过查询发现这两个数据字典无数据,因此原因找到。


分析:
1. awr数据字典无数据的可能原因是相关的awr参数没有设置恰当,一般的statistics_level应为typical或者all,而且 timed_statistic因为true,通过查看这些参数没有发现异常。
2.参数设置没有问题,还有可能是采集时间和保留时间设置错误,因此通过查看 select * from DBA_HIST_WR_CONTROL来获取采样时间和保留时间,发现也没有问题。
3. 通过对应包进一步查看和确定保留时间一致

 select dbms_stats.get_stats_history_availability from dual;
select dbms_stats.get_stats_history_retention from dual;


4. 网上有说法说可能重新设置下snap_ingterval和retention就可以了,因此使用execute  DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( interval => 30,retention => 06*24*10);仍未有果。
5.google了好久终于找到一个类似的,原因是awr相关的性能视图被某些后台进程锁住了。
通过如下语句查看:

 select sid,serial#,event,username,PROGRAM,BLOCKING_INSTANCE,blocking_session,state
from gv$session
where (event not like '%rdbms%'  and event not like '%gcs remote%' and event not like 'smon timer%'
and event not like 'SQL*Net%' and event not like 'Streams AQ%'  and  event not like '%jobq slave wait%'
and event not like '%ASM background timer%' and event not like 'DIAG idle wait%')
and program like '%m00%' and status='ACTIVE'  order by seconds_in_wait desc


发现有名为ORACLE.EXE (m000)的会话被其他会话锁住了。通过上一个查询得出的blocking_session,获取持锁会话为名为ORACLE.EXE (MMNL)的后台进程:

 select * from v$session where sid=2186


通过查询v$locked_objects 和dba_objects发现有若干以wrh$开头的表被锁住了。

 select a.*,b.object_name from v$locked_object a,dba_objects b where a.object_id=b.object_id


3.问题解决: 
由于被锁和持锁进程都为后台进程,通过alter system kill session 命令无法结束,只能在os级停止对应的进程。
对于windows系统来说采用的是线程结构,根本无法结束对应的持锁进程,只能通过重启解决。
对于linux系统,可以先通过v$bgprocess和v$process获取其对应的spid,然后通过命令kill掉。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论