[转]Oracle数据库ASH和AWR的简单介绍

在Oracle数据库中,有时我们可能会遇到这样的术语:ASH和AWR,那么它们是怎样产生的呢?它们的作用又是什么呢?本文我们就来介绍这一部分内容。

      1.10g之前

用户的连接将产生会话,当前会话记录保存在v$session中;处于等待状态的会话会被复制一份放在v$session_wait中。当该连接断开后,其原来的连接信息在v$session和v$session_wait中就会被删除。这是10g之前的状况。

      2.v$session_wait_history与ASH

若是一个普通的会话(我是指没有大量地耗费资源),则对于性能调整来说无足轻重。但若该会话在活动时大量占用了资源(比如:CPU,内存,I/O等),该会话信息的丢失,将无法评测当时的系统瓶颈究竟是什么。令DBA高兴的是,Oracle 10g中保留下了v$session_wait中的这些信息。

在Oracle 10g中新出现了一个视图:v$session_wait_history。这个视图保存了每个活动session在v$session_wait中最近10次的等待事件。但这对于一段时期内的数据库性能状况的监测是远远不够的,为了解决这个问题,在10g中还新添加了一个视图:v$active_session_history。这就是ASH(active session history)。

典型的情况下,为了诊断当前数据库的状态,需要最近的五到十分钟的详细信息。然而,由于记录session的活动信息是很费时间和空间的,ASH采用的策略是:保存处于等待状态的活动session的信息,每秒从v$session_wait中采样一次,并将采样信息保存在内存中。

       3.AWR

注意,ASH的采样数据是保存在内存中。而分配给ASH的内存空间是有限的,当所分配空间占满后,旧的记录就会被覆盖掉;而且数据库重启后,所有的这些ASH信息都会消失。这样,对于长期检测oracle的性能是不可能的。在Oracle10g中,提供了永久保留ASH信息的方法,这就是AWR(auto workload repository)。

由于全部保存ASH中的信息是非常耗费时间和空间的,AWR采用的策略是:每小时对v$active_session_history进行采样一次,并将信息保存到磁盘中,并且保留7天,7天后旧的记录才会被覆盖。这些采样信息被保存在视图wrh$_active_session_history中。而这个采样频率(1小时)和保留时间(7天)是可以根据实际情况进行调整的,这就给DBA们提供了更加有效的系统监测工具。

AWR永久地保存系统的性能诊断信息,由SYS用户拥有。一段时间后,你可能想清除掉这些信息;有时候为了性能诊断,你可能需要自己定义采样频率来获取系统快照信息。Oracle 10g在包dbms_workload_repository中提供了很多过程,通过这些过程,你可以管理快照并设定基线(baselines)。

     4.小结

这样,我们就知道了ASH和AWR产生的原因和功能。ASH保存了系统最新的处于等待的会话记录,可以用来诊断数据库的当前状态;而AWR中的信息最长可能有1小时的延迟,所以其采样信息并不能用于诊断数据库的当前状态,但可以用来作为一段时期内数据库性能调整的参考。

对于这些视图间的继承关系,eygle给出了一个关系图:

图1 各个视图的层次

其中视图dba_hist_active_sess_history是wrh$_active_session_history和其他几个视图的联合展现,通常通过这个视图进行历史数据的访问。

上面我们介绍了Oracle数据库ASH和AWR的简单介绍,接下来详细介绍一下AWR的组成以及它的工作原理

      1.ash占用的内存大小

ASH的采集信息保存在内存中,在旧的信息被采样到AWR中后,可被新采集的信息覆盖,重启oracle后该信息被清除。分配给ASH的内存大小可以查询到:

       2.AWR更正

为了便于描述和理解,在第一部分中,我们说AWR就是保存ASH中的信息。

其实,AWR记录的信息不仅是ASH,还可以收集到数据库运行的各方面统计信息和等待信息,用以诊断分析。

AWR的采样方式是,以固定的时间间隔为其所有重要的统计信息和负载信息执行一次采样,并将采样信息保存在AWR中。

可以这样说:ASH中的信息被保存到了AWR中的视图wrh$_active_session_history中。ASH是AWR的真子集。

       3.mmon进程与mmnl进程

快照由一个称为MMON 的新的后台进程(及其从进程)以及MMNL后台进程自动地每隔固定时间采样一次。我们先来看一下10g的概念指南中对这两个新增加的后台进程的介绍:

MMON进程负责执行多种和管理相关(manageability-related)的后台任务,例如:

当某个测量值(metrics)超过了预设的限定值(threshold value)后提交警告。

创建新的 MMON 隶属进程(MMON slave process)来进行快照(snapshot)。

捕获最近修改过的 SQL 对象的统计信息。

MMNL进程负责执行轻量级的且频率较高的和可管理性相关的后台任务,例如捕获会话历史信息,测量值计算等。

AWR的采样工作由MMON进程每个1小时执行一次,ASH信息同样会被采样写出到AWR负载库中。虽然ASH buffer被设计为保留1小时的信息,但很多时候这个内存是不够的,当ASH buffer写满后,另外一个后台进程MMNL将会主动将ASH信息写出。

      4.SYSAUX表空间

这些采样数据都存储在SYSAUX表空间中,并且以WRM$_* 和 WRH$_*的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),后一种类型保存实际采集的统计数据。

当SYSAUX表空间满后,AWR将自动覆盖掉旧的信息,并在警告日志中记录一条相关信息:

ORA-1688: unable to extend table SYS.WRH$_ACTIVE_SESSION_HISTORY partition   WRH$_ACTIVE_3533490838_1522 by 128 in tablespace SYSAUX

      5.采样频率和保留时间

可以通过查询视图dba_hist_wr_control或(wrm$_wr_control)来查询AWR的采样频率和保留时间。默认为每1小时采样一次,采样信息保留时间为7天。

       6.采样数据量

由于数据量巨大,把所有ASH数据写到磁盘上是不可接受的。一般是在写到磁盘的时候过滤这个数据,写出的数据占采样数据的10%,写出时通过direct-path insert完成,尽量减少日志生成,从而最小化数据库性能的影响。

       7.初始化参数statistics_level

AWR的行为受到参数STATISTICS_LEVEL的影响。这个参数有三个值:

BASIC:awr统计的计算和衍生值关闭.只收集少量的数据库统计信息。

TYPICAL:默认值.只有部分的统计收集.他们代表需要的典型监控oracle数据库的行为。

ALL:所有可能的统计都被捕捉. 并且有操作系统的一些信息.这个级别的捕捉应该在很少的情况下,比如你要更多的sql诊断信息的时候才使用。

关于Oracle数据库AWR的组成以及它的工作原理的知识就介绍到这里了,希望本次的介绍能够对您有所帮助。

本文转自:

http://database.51cto.com/art/201108/282827.htm

http://database.51cto.com/art/201108/282856.htm

时间: 2024-10-26 10:08:36

[转]Oracle数据库ASH和AWR的简单介绍的相关文章

MySQl 数据库 之 python模块 pymysql 简单介绍

终端输入指令: pip3 install pymysql 如果失败就检查 pip 指令的环境变量是否配置; 若不会,则自行百度; 等待下载完成后, 在终端直接进入 python 环境, 导入该模块, 若无报错,则证明下载成功.(如下图所示) 二. 开始使用: 1, 在py文件中导入该模块: import pymysql 2, 连接数据库服务器: conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password=''

如何用PL/SQL Developer连接Oracle数据库

之前因为项目的原因需要使用Oracle数据库,由于时间有限没办法从基础开始学习,而且oracle操作的命令界面又太不友好,于是就找到了PL/SQL Developer这个很好用的软件来间接使用数据库. 下面简单介绍一下如何用这个软件连接Oracle数据库. 第一步 安装Oracle Database和PL/SQL Developer 这一步网上有很多的教程就不详细介绍.Oracle可以直接到官网去下载,在安装中注意几个问题就行: 1.一定要记住自己全局数据库名字和口令,这个在后面连接的时候很重要

客户端连接远程服务器上的oracle数据库

其实在一个内网中,想要在客户端B远程连接服务器A上的oracle数据库是一件十分简单的事情. 1.首先在B中下载oracle数据库客户端和PLSQL软件并安装: 2.修改在oracle数据库客户端的安装目录(如D:\Instant Client\network\admin)下的tnsnames.ora文件.将下图中的1处改为服务器的IP地址:2.3处改为服务器oracle中的数据库名. 3.打开PLSQL软件,输入用户名和密码,并且选择上图中的数据库名,点击链接,就实现了远程连接服务器的功能.

Navicat Premium 连接 Oracle 数据库

Navicat Premium是一个可多重连接的数据库管理工具,它可让你以单一程序同時连接到 MySQL.SQLite.Oracle 及 PostgreSQL 数据库,让管理不同类型的数据库更加方便.最重要的是它不用装Oracle客户端.下边简单介绍一下Navicat Premium连接oracle客户端的方法. 如果你的机器已经装有 Oracle 数据库的话,那很简单,Navicat Premium可以直接连接到 Oracle . 如果没装,那 Navicat 会提示你需要安装 Oracle

Oracle数据库简介以及windows安装过程

Oracle数据库简介 也许很多人熟悉SQL server,并不是太了解Oracle数据库,这里进行一下简单的介绍 Oracle数据库的创始人是劳伦斯.埃里斯 Oracle数据库能被多个操作系统使用 eg:windows,linux,Solaris,AIX等 现在我们把Oracle和SQL server 进行一下简单的比较 1:Oracle数据库对系统的支持比SQL server多,而SQL server数据库是微软研发,只能在windows上使用. 2:架构不同,Oracle数据库中,一个实例

LAMP 搭建zabbix监控Oracle 数据库 for Linux

准备环境介绍 文档简介想要实现的功能为在zabbix服务器端再增加orabbix插件以此访问oracle数据库进行监控操作. 环境介绍CentOS 7 zabbix 2.4.2 . yum介绍因公司电脑无法访问外网则进行了本地yum源的配置. 可自行根据php-common下载相应的rpm包或者去我的网盘瞅瞅有木有大家需要的地址如下链接http://pan.baidu.com/s/1skGbrat 密码n9p3 实施过程介绍1.首先是LAMP的搭建其中Linux环境搭建此处不多介绍MySQL数据

Oracle 数据库(oracle Database)Select 多表关联查询方式

Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名2>[,…] [WHERE <筛选择条件表达式>] [GROUP BY <分组表达式> [HAVING<分组条件表达式>]] [ORDER BY <字段>[ASC | DESC]] 语句说明: []方括号为可选项 [GROUP BY <分组表达式&g

重新发现Oracle太美之awr相关脚本简单介绍

大家知道在$ORACLE_HOME/rdbms/admin下,有如下的相关脚本(我的环境为11.2.0.4.2): [[email protected] ~]$ cd $ORACLE_HOME/rdbms/admin [[email protected] admin]$ ls -ltr awr* -rw-r--r-- 1 oracle oinstall  1999 Oct 24  2003 awrrpt.sql -rw-r--r-- 1 oracle oinstall 49166 Sep  1

[转]DBCP连接池的最简单应用(用于ORACLE数据库)

http://blog.csdn.net/iihero/article/details/8254107 http://www.programgo.com/article/81693457907/ 鉴于有人问起DBCP直接用于JDBC连接的问题,我做了一个最简单的示例.所有资源来源于网上.它不需要什么Web容器,就是一简单的控制台应用. 资源:http://apache.etoak.com//commons/pool/binaries/commons-pool-1.5.6-bin.ziphttp: