awr收集缓慢挂起的几种常见情况分析

author author     2022-10-26     536

关键词:

AWRAutomatic Workload Repository)作为对数据库性能诊断的工具,采集与性能相关的统计数据,根据这些统计数据中的性能指标,以跟踪潜在的问题。若因某些情况导致相关数据无法收集,就会对数据库性能诊断大打折扣。

 

以下列举AWR收集缓慢、挂起或缺失常见的几种情况:

  • STATISTICS_LEVEL 参数不为ALLTYPICAL

  • SYSAUX表空间不足

  • 系统资源I/OCPU使用率过高

  • MMON/MMNL进程异常

  • 相关FIXED TABLE统计信息不准确

 

  1. STATISTICS_LEVEL 参数不为ALLTYPICAL

初始化参数STATISTICS_LEVELAWR的采集信息受到参数STATISTICS_LEVEL的影响。这个参数有三个值:

BASICAWR统计信息的关闭,只收集少量的数据库统计信息。

TYPICAL:默认值,只有部分的统计收集,都是需要监控oracle数据库的典型行为。

ALL:所有可能的统计都被捕捉,并且有操作系统的一些信息,这个级别的捕捉用的较少,比如要更多的sql诊断信息。

一般不会随便修改该参数,都使用默认值TYPICAL,所以这种情况下导致AWR无法收集统计数据的很少的。

 

  1. SYSAUX表空间不足

AWR采集的统计数据都以WRM$_* WRH$_*的格式命名的表存储在SYSAUX表空间上(M 代表元数据(metadata),而H 代表历史数据 (historical))。可通过@?/rdbms/admin/awrinfo.sqlx$kewrtb查询相关的表信息。虽然SYSAUX表空间不足导致AWR无法生成是个低级问题,但是有一种情况需要注意,因为BUG等导致ASH/AWR的基表数据无法清理。如:

SQL> select * from dba_hist_wr_control;      
DBID SNAP_INTERVAL        RETENTION            TOPNSQL 
---------- -------------------- -------------------- ---------
262389084 +00000 01:00:00.0    +00007 00:00:00.0    DEFAULT

正常的每小时产生一个SNAPSHOT,保留7天。但一些基表如WRH$_ACTIVE_SESSION_HISTORY因为某些原因没有根据sys.wrm$_wr_control的设定进行清理。SNAPSHOT快照的保留就会超过7天,这时会导致SYSAUX被撑爆,以及收集AWR报告很慢的情况。具体解决办法2个:

  1. alter session set “_swrf_test_action”=72;

  2. 手工删除过期无用的快照:

exec dbms_workload_repository.drop_snapshot_range(low_snap_id => xxx, high_snap_id => xxxx, dbid => 262389084);


 

MOS文档:

WRH$_ACTIVE_SESSION_HISTORY Does Not Get Purged Based Upon the Retention Policy (Doc ID 387914.1)

 

 

  1. 系统资源I/OCPU使用率过高

当系统负载很高时,许多用户进程都在争用资源,AWR报告的收集需要消耗系统主机的性能,当awr报告的收集时间超过15分钟,若这个时候数据库处于相当繁忙的状态, 数据库为了保证业务的正常运行,就自动把awr的功能关闭,减少系统的开销,这是11g功能的增强。这种情况基本如下:

 

alert.log中会出现如下告警信息:

Suspending MMON slave action xxx for 82800 seconds

 

或者mmon trc中出现如下的告警信息:

Unable to schedule a MMON slave at: Auto Flush Main 1
  Slave action has been temporarily suspended
    - Slave action had prior policy violations.
  Unknown return code: 101

 
--可根据https://community.oracle.com/thread/2153562参考:
If the system is so over-loaded that it takes over 15 minutes to gather statistics or other MMON tasks, this error is expected.It is a functionality enhancement in 11g, as it prevents MMON from locking resources those other processes might be waiting for. In 10g , mmon slaves are allowed to run indefinitely.

从日志看,存在大量的Slave action has been temporarily suspended,这是11g功能的增强,当系统处于overload状态时,MMON进程收集统计信息超过15分钟,则会终止该任务, 10g会无限延期。所以系统资源不足也会导致AWR统计信息无法正常收集。

 

为什么是15分钟?请参考MOS文档:

Troubleshooting ORA-12751 "cpu time or run time policy violation" Errors (文档 ID 761298.1)

Troubleshooting: Missing Automatic Workload Repository (AWR) Snapshots and Other Collection Issues (文档 ID 1301503.1)

 

  1. MMON/MMNL进程异常

Memory Monitor(MMON)MMON主要用于AWRADDMMMON会从SGA将统计结果写到系统表中

The Memory Monitor Light (MMNL)mmon进程主要是内存中sql信息,ash信息的收集工作,如果这些信息需要写入到磁盘(即一些数据字典表)中,那么就需要MMNL进程负责写入

 

MMONMMNLMnnn这些进程用于填充自动工作负载存储库(Automatic WorkloadRepositoryAWR),这是Oracle 10g中新增的一个特性。MMNL进程会根据调度从SGA将统计结果刷新输出至数据库表。MMON进程用于“自动检测”数据库性能问题,并实现新增的自调整特性。Mnnn进程类似于作业队列的JnnnQnnn进程;MMON进程会请求这些从属进程代表它完成工作。Mnnn进程本质上是临时性的,它们将根据需要来来去去。

 

由此可见,MMONMMNL进程异常是AWR不能自动收集的根本原因。

遇到AWR无法收集的情况可以根据文档(ID 1301503.1)进行排查,检查mmonmmnl进程是否正常。

ps -ef|egrep "mmon|mmnl"  #查看mmon和mmnl进程是否存
oracle    32674      1  0 21:22 ?        00:00:01 ora_mmon_<sid>
oracle    32676      1  0 21:22 ?        00:00:01 ora_mmnl_<sid>

这两个进程是oracle的非核心进程,可以kill掉,它们会自动启动进程,并且自动维护。若这两个进程没有问题,可以手动生成AWR看是否有效:

exec  dbms_workload_repository.create_snapshot(); 然后再进一步诊断问题。

因为这两个进程都非核心进程,所以很多文档都是说可kill,重新唤起这个进程,让AWR可继续生成。在11.2.0.4中可能会存在起不来的情况,原因根据MOS文档:AWR Snapshots Are Not Being Created Because MMON Is Not Being Respawned (文档 ID 2023652.1)可知:

技术分享图片

 

  1. FIXED TABLE统计信息不准确

 

查看mmon 进程的trace文件,出现以下报错:

** KEWROCISTMTEXEC - encountered error: (ORA-12751: cpu time or
 run time policy violation)
  *** SQLSTR: total-len=295, dump-len=240,
      STR=insert into WRH$_SERVICE_STAT   (snap_id, dbid,
      instance_number,    service_name_hash, stat_id, value) select
      :snap_id, :dbid, :instance_number,   stat.service_name_hash,
      stat.stat_id, stat.value from  v$active_services asvc, v$service_st
 DDE rules only execution for: ORA-12751

查看该SQL为何执行缓慢,发现v$service_stats视图数量很大。该视图记录的是最小的性能统计数据集,其中有个自动service_name来着v$services,它显示关于服务的信息。

expdp每次备份开始,都会新增一个service name,备份结束后会去掉该service name,该动作会记录在alert log中,这个动作就会导致v$service_stats 视图出现很多unknown的记录。

 

错误的执行计划:

技术分享图片

每次逻辑导出时,会在v$service_stats视图中增加service_name=unknow的记录,导致v$service_stats视图中累积存储了大量unknow service name的记录,AWR快照生成过程中在执行上述SQL时,由于fixed table统计信息不准确或者尚无统计信息,oracle选择了效率较低的执行计划,SQL的执行消耗大量时间,导致oracle维护任务cpu time policy violationAWR快照生成中断。

 

解决办法是:手动收集fixed table的统计信息(在12 c之前,固定的统计数据没有自动收集,它是对所有X$基表统计信息的收集,这个收集是要相对比较长时间的,同时评估好收集之后对其它SQL语句执行的影响。如V$SESSIONV$PROCESSV$LOCK等常用视图相关SQL语句的执行计划影响)


select table_name,num_rows,last_analyzed from dba_tab_statistics where last_analyzed is not null order by last_analyzed desc;
 
exec dbms_stats.gather_fixed_objects_stats(no_invalidate => false);

 


awr收集缓慢挂起的几种常见情况分析

...标,以跟踪潜在的问题。若因某些情况导致相关数据无法收集,就会对数据库性能诊断大打折扣。 以下列举AWR收集缓慢、挂起或缺失常见的几种情况:STATISTICS_LEVEL参数不为ALL或TYPICALSYSAUX表空间不足系统资源I/O、CPU使 查看详情

数据分析师常见的几种思路

 1.简单趋势  通过实时访问趋势了解产品使用情况,便于产品迅速迭代。访问用户量、访问来源、访问用户行为三大指标对于趋势分析具有重要意义。2.多维分解  数据分析师可以根据分析需要,从多维度对指标进行分... 查看详情

loadrunner常见测试结果分析

...的几种测试情况:  一、当事务响应时间的曲线开始由缓慢上升,然后处于平衡,最后慢慢下降这种情形表明:  *从事务响应时间曲线图持续上升表明系统的处理能力在下降,事务的响应时间变长;  *持续平衡表明并发... 查看详情

分析电脑死机的常见的几种原因,以及对应的解决方法

很多的电脑用户都遇到过各种各样的电脑故障,例如花屏、黑屏、又或者是电脑无法开机、死机等等都是比较常见的故障,为了修好电脑,我们今天就来了解下,当电脑经常死机,我们用什么方法解决呢?下面就跟随小编一起来... 查看详情

python爬虫定时计划任务的几种常见方法(代码片段)

...天试了下,发现不能正常使用了,任务计划总是挂起。接下来记录下Python爬虫定时任务的几种解决方法。#python#方法一、whileTrue首先最容易的是whiletrue死循环挂起,不废话,直接上代码:import osimport timeimport ... 查看详情

分析总结常见的几种移动机器人底盘类型及其运动学

添加链接描述 查看详情

性能测试的几种常见方法

 性能测试的几种常见方法(转)  负载测试:负载测试是用户观点的测试行为。简单说来就是负载测试就是让系统在一定得负载压力下进行正常的工作,观察系统的表现能否满足用户的需求。  用户的需求从何而来?需... 查看详情

(转载)plc内部电路常见的几种形式

摘要:本文主要分析了数字量输入时PLC内部电路常见的几种形式,并结合传感器常见的NPN和PNP输出,给出了和不同的PLC电路形式连接时的接线方法。Summary: ThisarticlehasmainlyanalyzedseveralinternalcircuitformsofPLCdigitalinputmodule,andunifiedco... 查看详情

sqlserver存储过程的几种常见写法分析,我们该用那种写法

 本文出处: http://www.cnblogs.com/wy123/p/5958047.html  最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种写法孰优孰劣,该选用那种写法,以及各种写法优... 查看详情

如何在事务上设置挂起的回滚?

】如何在事务上设置挂起的回滚?【英文标题】:HowtosetapendingRollbackonaTransaction?【发布时间】:2018-09-0708:37:32【问题描述】:我一直在使用MySQLTransactions来封装在我的方法中执行的几个读/写操作。privatevoidReceiveOrderConfirm(objectsende... 查看详情

数据分析—pandas删除数据的几种情况

参考技术A开始之前,pandas中DataFrame删除对象可能存在几种情况本文就针对这四种情况探讨一下如何操作。模拟了一份股票交割的记录。也可以根据行号删除记录,比如删除第三行注意,这个办法其实不是按照行号删除,而是按... 查看详情

如何根据 cpu/内存使用情况或挂起的请求返回 503 服务器繁忙?

】如何根据cpu/内存使用情况或挂起的请求返回503服务器繁忙?【英文标题】:Howtoreturn503serverbusybasedoncpu/memoryusageorpendingrequests?【发布时间】:2011-11-0713:55:34【问题描述】:我正在开发使用jetty和jersey进行REST的高性能Web应用程序... 查看详情

在 UI 线程上同步取消挂起的任务

】在UI线程上同步取消挂起的任务【英文标题】:CancellingapendingtasksynchronouslyontheUIthread【发布时间】:2014-01-1912:41:37【问题描述】:有时,一旦我使用CancellationTokenSource.Cancel请求取消挂起的任务,我需要确保任务已正确达到取消... 查看详情

如何在没有 P/Invoke 的情况下从 c# 创建挂起的进程?

】如何在没有P/Invoke的情况下从c#创建挂起的进程?【英文标题】:Howtocreatesuspendedprocessfromc#withoutP/Invoke?【发布时间】:2014-03-2122:25:38【问题描述】:WinAPICreateProcess具有CREATE_SUSPENDED标志,因此可以在JobObject完成某些操作之前将... 查看详情

如何在不挂起的情况下返回并恢复我的应用程序?

】如何在不挂起的情况下返回并恢复我的应用程序?【英文标题】:Howtonavigatebackandresumemyappwithouthangingit?【发布时间】:2016-04-0400:07:25【问题描述】:当我在下面运行我的代码时,一切正常。当我想返回上一个活动(使用模拟器... 查看详情

如何在没有 UI 挂起的情况下将 QtcpSockets 连接到大约 100 个服务器?

】如何在没有UI挂起的情况下将QtcpSockets连接到大约100个服务器?【英文标题】:HowcanIconnectQtcpSocketstoabout100serverswithoutaUIhang?【发布时间】:2021-06-0206:41:31【问题描述】:当我创建100个QTcpSockets以连接到每个服务器并调用connectToHos... 查看详情

java业务层发生异常,但是数据却没有回滚的几种常见情况(代码片段)

最近做项目写后台java代码,有人遇到了业务层的逻辑代码发生了错误,但是持久层的数据却没有回滚,这是非常不应该的,应为按照逻辑,发生异常,所有的数据就应该回滚,不然会产生非常多的脏数... 查看详情

函数指针常见的几种

查看详情