无法自动生成AWR报告

一、故障说明

       生产库RAC其中一节点突然无法自动生产快照,生成时间较长。如下图所示:

二、分析问题

       1. 检查SYSAUX表空间是否不足(一般不会存在这种低级错误,不过还是要检查下)

查看SYSAUX还有13G左右的空间。

        2. 检查MMON/MMNL进程是否异常

MMON进程作用是:

The memory monitor (MMON) process was introduced in 10g and is associated with the Automatic Workload Repository new features used for automatic problem detection and self-tuning. MMON writes out the required statistics for AWR on a scheduled basis.

MMNL进程作用是:

The Memory Monitor Light (MMNL) process is a new process in 10g which works with the Automatic Workload Repository new features (AWR) to write out full statistics buffers to disk as needed.

ps -ef |egrep "mmon|mmnl"

我查看我数据库进程是存在的,没什么异常

        3. FIXED TABLE统计信息不准确

我首先去查看该节点的alert日志文件,看看有没有什么报错,发现出现好几处这样的信息

随后我就去看MMON的trace有没有什么日志,

结合查看MMON slave进程m000的trace文件,出现以下报错:

从上图可以看出执行insert into WRH$SERVICE_STAT出现了ora-12751的错误

exec dbms_workload_repository.create_snapshot;

我手动生成快照,一直也无法生成,查看活动会话,awr快照会话在执行以下SQL,也就是trace文件的报错

可以使用oradebug或者10046 收集下是哪里出现问题

会话1: 
SQL>exec dbms_workload_repository.create_snapshot; 

会话2:Open another session as sysdba: 
SQL>conn / as sysdba; 
SQL>oradebug setmypid 
SQL>oradebug unlimit; 
SQL>oradebug hanganalyze 3 
Wait for some seconds 
SQL>oradebug hanganalyze 3 
Wait for some seconds 
SQL>oradebug hanganalyze 3 
SQL>oradebug tracefile_name 

The generated files will be under udump. 
$cd udump 
$ls –ltr 

上述插入语句在“FIXED TABLE FIXED INDEX$KEWSSVCV”步骤中花费了超过300秒的CPU时间:

为何在收集信息会这么慢呢,我就去查了下v$active_services,v$service_stats,发现v$service_stats视图中unknown记录数很多。

这些数据是怎么来的呢,想到这个节点每天都需要进行expdp备份,alert日志中就会出现修改service name的片段。

expdp每次开始备份,都会新增一个service name,备份结束后会去掉该service name,所以导致v$service_stats出现了很多unknown记录,

查看上述SQL执行计划,统计信息不准确

因此AWR快照生成过程中在执行上述SQL时,由于fixed table统计信息不准确或者尚无统计信息,oracle选择了效率较低的执行计划,SQL的执行消耗大量时间,导致oracle维护任务cpu time policy violation,AWR快照生成中断。

这是只对三个表进行重新收集统计信息

sqlplus / as sysdba
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SYS', 'X$KSWSASTAB', no_invalidate=>false);
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SYS', 'X$KEWSSMAP', no_invalidate=>false);
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS('SYS', 'X$KEWSSVCV', no_invalidate=>false);

这是对SYS用户所以对象进行收集(尽量在空闲的时候操作)

SQL> EXEC DBMS_STATS.GATHER_FIXED_OBJECTS_STATS; 
SQL> EXEC DBMS_STATS.GATHER_SCHEMA_STATS ('SYS'); 

最后收集fixed table的统计信息后,AWR快照可以正常生成。

 

参考mos的文档:

AWR Snapshots Are Not Generated due to ORA-12751 (文档 ID 2243670.1)

AWR Auto Flush Action Timeout at Insert Into WRH$_SERVICE_STAT (文档 ID 2294282.1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值