[转]oracle性能调优之--Oracle 10g AWR 配置
一、ASH和AWR的故事
1.1 关于ASH
我们都知道,用户在ORACLE数据库中执行操作时,必然要创建相应的连接和会话,其中,所有当前的会话信息都保存在动态性能视图V$SESSION中,通过该视图,DBA可以查看用户实际执行的操作,或者当前的等待事件等。通常这部分信息是调优过程中的关键信息,不过,一旦连接断开。会话信息就会被同时从V$SESSION及其它相关视图中清除,也就是说,用户执行完操作走人,而你(DBA),如果不能在当前逮到他,过了这点,就不知道它曾经做过什么了。
10g 版本中,ORACLE又新增加了一个视图(其它是若干,不过咱们还是以session为引子说):V$ACTIVE_SESSION_HISTORY,看名字就知道,就是活动会话的历史记录,这下,即使用户操作完成后,断开了连接也不怕,因为其会话的情况已经被记录了下来,这项特性就是ASH了,全称与视图名相同,正是:ACTIVE SESSION HISTORY。
ASH 每秒钟收集一次当前处于非空闲等待事件的、活动状态的、session的信息,并保存在V$ACTIVE_SESSION_HISTORY视图中,我们(应该以及必须)知道,动态性能视图其实上是ORACLE自行构造的一堆存在于SGA内存区的虚表,就是说,ASH的数据是保存在内存里的,实际上,ORACLE分配给ASH的空间并不是无限大(更何况ORACLE自身管理的内存空间也不是无限大),查看ASH可供使用的内存空间,可以通过如下SQL:
SQL> SELECT pool, name, bytes/1024/1024 Mb FROM v$sgastat WHERE NAME LIKE 'ASH %';
直白的讲 ,V$ACTIVE_SESSION_HISTORY中能够记录多少会话信息, 一方面取决于该数据库的SGA 分配给ASH buffers的大小 ,另一方面取决于数据库的启动和关闭(重启数据库时将重构SGA内存区)。这两方面的因素制约了V$ACTIVE_SESSION_HISTORY中能够保存的会话信息的能力,做为DBA,我们肯定是希望ASH尽可能多的保留关于会话的信息,但目前来看单纯依靠
V$ACTIVE_SESSION_HISTORY肯定无法实现这点,那怎么办呢?别担心,ORACLE又提供了AWR特性,ASH收集到的会话信息,是做为AWR中快照信息的一部分,被保存到了硬盘上。
1.2 关于AWR
AWR 是 Oracle 10g 版本 推出的新特性, 全称叫Automatic Workload Repository-自动负载信息库。 谈到这一特性呢,不得不先提Statspack,Statspack称的上是ORACLE世界里的老人了,不过毕竟年岁大了,腿脚虽然还算灵便,但效率不那么高了,用时髦话讲就是不能适应时代发展步伐,不能紧跟时代潮流,不能保持做为一名优秀党员的先进性,始终坚持带三个表的为DBA服务。但是,说到底Statspack还是为了党国事业奋斗了一辈子,在党内还是有势力有威信有地位有影响的四有老人,还有余热可以发挥, 虽然其在统计实时性方面,表现已不足以满足DBA多变的需求,依然 不能一下就将其拿下, 因此 ORACLE 采取渐进方式先 推出了AWR,说是辅助Statspack工作,其实明眼人一看就明了,这是新指定的接班人哪。
AWR 与前辈Statspack在职业定位方面是相同的,都是负责收集、处理并维护性能统计信息,用于检查和分析性能问题(甚至生成的报告格式都非常接近),AWR生成的统计数据即可以通过V$视图和DBA_*数据字典查看,也可以通过脚本来生成相应报表。谈到相比Statspack,AWR究竟在哪些方面有所提升呢,捡主要的讲就两条:自动+实时,至于功能上的些许提高,不过是因为AWR年轻腿脚利索罢了。
二、生成分析报表
AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分,这点与Statspack生成的报告非常类似。不过AWR在生成报告时,可以选择生成TXT或HTML两种格式的报告,相对来说,HTML更利于阅读,而TXT的适用性更广(即使在不能使用浏览器的机器上也能看)。
操作过Statspack的朋友都还记的,生成报告使用$ORACLE_HOME/rdbms/admin/spreport.sql脚本,到了AWR这片,操作步骤基本上相同,不过生成报告的脚本多了很多选择,包括:
- awrrpt.sql :生成指定快照区间的统计报表;
- awrrpti.sql :生成指定数据库实例,并且指定快照区间的统计报表;
- awrsqlrpt.sql :生成指定快照区间,指定SQL语句(实际指定的是该语句的SQLID)的统计报表;
- awrsqrpi.sql :生成指定数据库实例,指定快照区间的指定SQL语句的统计报表;
- awrddrpt.sql :指定两个不同的时间周期,生成这两个周期的统计对比报表;
- awrddrpi.sql :指定数据库实例,并指定两个的不同时间周期,生成这两个周期的统计对比报表;
下面的章节中,我们就来一一例举。
提示:与使用Statspack一样,要想让AWR收集到准确的统计信息,从而生成可靠的性能分析报告,必须将初始化参数STATISTICS_LEVEL的值设置为TYPICAL或ALL。
2.1 生成标准统计报表
过程并不复杂,下列操作中加粗的部分,是需要指定值的位置(注意,执行报表生成的用户必须拥有DBA角色):
JSSWEB> @$ORACLE_HOME/rdbms/admin/awrrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
3812548755 TEST08 1 test08
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter ¨html¨ for an HTML report, or ¨text¨ for plain text
Defaults to ¨html¨
Enter value for report_type: html
此处需指定生成的报表格式,有txt和html两种选择,默认情况下为html格式,这里为演示起见,输入html。
Type Specified: html
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
* 3812548755 1 TEST08 test08 yans1
Using 3812548755 for database Id
Using 1 for instance number
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing without
specifying a number lists all completed snapshots.
Enter value for num_days: 2
此处需指定要读取多少天内的快照信息!
Listing the last 2 days of Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
test08 TEST08 7330 20 10 月 2009 00:00 1
7331 20 10 月 2009 01:00 1
7332 20 10 月 2009 02:00 1
7333 20 10 月 2009 03:00 1
7334 20 10 月 2009 04:00 1
7335 20 10 月 2009 05:01 1
7336 20 10 月 2009 06:00 1
7337 20 10 月 2009 07:01 1
7338 20 10 月 2009 08:00 1
7339 20 10 月 2009 09:00 1
7340 20 10 月 2009 10:00 1
7341 20 10 月 2009 11:00 1
7342 20 10 月 2009 12:00 1
7343 20 10 月 2009 13:00 1
7344 20 10 月 2009 14:00 1
7345 20 10 月 2009 15:00 1
7346 20 10 月 2009 16:00 1
7347 20 10 月 2009 17:00 1
7348 20 10 月 2009 18:00 1
7349 20 10 月 2009 19:00 1
7350 20 10 月 2009 20:00 1
7351 20 10 月 2009 21:00 1
7352 20 10 月 2009 22:00 1
7353 20 10 月 2009 23:00 1
7354 21 10 月 2009 00:00 1
7355 21 10 月 2009 01:00 1
7356 21 10 月 2009 02:00 1
7357 21 10 月 2009 03:00 1
7358 21 10 月 2009 04:00 1
7359 21 10 月 2009 05:00 1
7360 21 10 月 2009 06:00 1
7361 21 10 月 2009 07:00 1
7362 21 10 月 2009 08:00 1
7363 21 10 月 2009 09:00 1
7364 21 10 月 2009 10:00 1
7365 21 10 月 2009 11:00 1
7366 21 10 月 2009 12:00 1
7367 21 10 月 2009 13:00 1
7368 21 10 月 2009 14:00 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 7331
Begin Snapshot Id specified: 7331
Enter value for end_snap: 7355
End Snapshot Id specified: 7355
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_7331_7355.html. To use this name,
press to continue, otherwise enter an alternative.
Enter value for report_name:
此处为要生成的报告指定一个文件名,默认会根据前面输入的snap_id生成一个文件名,比如这里生成的默认文件名为awrrpt_1_7331_7355.html,当然DBA可以根据实际情况对文件名进行自定义。这里三思偷个懒,就用默认文件名好了,直接回车。
接下来就不需要DBA再输入什么了,等着ORACLE给你生成报表吧。
Using the report name awrrpt_1_7331_7355.html
..................
.......................
End of Report
Report written to awrrpt_1_7331_7355.html
打开最终生成的统计报表,界面如下:
提示:
问:前面提示输入snaps时哪来的这么多snapshots啊?
答:这都是ORACLE偷偷摸摸一点一点(每小时一次)收集的啊!
问:它究竟收集了多久的啊?
答:从当前的记录看,至少有7天了!
问:究竟啥是snapshot啊?
答:接着往下看!
2.2 生成指定数据库实例的统计报表
这项统计报表一般是针对多实例数据库,前面使用的脚本是生成数据库级别的统计报表,对于多实例的数据库,有时候DBA可能希望看到某个实例的表现,那么本脚本就能派上用场了。其实操作与上非常类似(都比较简单,需要DBA敲的字符加一块也没几个),注意执行的脚本不同的哟。
SQL> @$ORACLE_HOME/rdbms/admin/awrrpti.sql
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter ¨html¨ for an HTML report, or ¨text¨ for plain text
Defaults to ¨html¨
Enter value for report_type:
此处需指定生成的报表格式,有txt和html两种选择,默认情况下为html格式。
Type Specified: html
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
948405229 2 JSSDB jssdbn2 jssdbn2
* 948405229 1 JSSDB jssdbn1 jssdbn1
Enter value for dbid: 948405229
Using 948405229 for database Id
Enter value for inst_num: 1
Using 1 for instance number
相比标准统计报表的生成,这里多了两个需指定的值,就是选择要生成报表的DBID以及实例的ID。
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing without
specifying a number lists all completed snapshots.
Enter value for num_days: 2
指定要读取多少天内的快照信息。
Listing the last 2 days of Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
jssdbn1 JSSDB 235 22 Oct 2009 00:00 1
236 22 Oct 2009 01:00 1
237 22 Oct 2009 02:00 1
238 22 Oct 2009 03:00 1
239 22 Oct 2009 04:00 1
240 22 Oct 2009 05:00 1
241 22 Oct 2009 06:00 1
242 22 Oct 2009 07:00 1
243 22 Oct 2009 08:00 1
244 22 Oct 2009 09:00 1
245 22 Oct 2009 10:00 1
246 22 Oct 2009 11:00 1
247 22 Oct 2009 12:00 1
248 22 Oct 2009 13:00 1
249 22 Oct 2009 14:00 1
250 22 Oct 2009 15:00 1
251 22 Oct 2009 16:00 1
252 22 Oct 2009 17:00 1
253 22 Oct 2009 18:00 1
254 22 Oct 2009 19:00 1
255 22 Oct 2009 20:00 1
256 22 Oct 2009 21:00 1
257 22 Oct 2009 22:00 1
258 22 Oct 2009 23:00 1
259 23 Oct 2009 00:00 1
260 23 Oct 2009 01:00 1
261 23 Oct 2009 02:00 1
262 23 Oct 2009 03:00 1
263 23 Oct 2009 04:00 1
264 23 Oct 2009 05:00 1
265 23 Oct 2009 06:00 1
266 23 Oct 2009 07:00 1
267 23 Oct 2009 08:00 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap:
.....................
......................
剩下的步骤就与标准统计报表的步骤完全相同,这里就不重复演示了。
2.3 生成指定SQL语句的统计报表
这项统计专门用来分析某条指定的SQL语句,通过awrsqrpt.sql脚本,awr能够生成指定sql(曾经执行过的SQL)的执行计划,消耗的资源等等信息,有助于DBA进行SQL调优。
具体操作如下,首先还是执行生成脚本:
SQL> @$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
3812548755 TEST08 1 test08
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter ¨html¨ for an HTML report, or ¨text¨ for plain text
Defaults to ¨html¨
Enter value for report_type: html
选择生成的报表格式,没啥说的,就默认的html格式吧。
Type Specified: html
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
* 3812548755 1 TEST08 test08 yans1
Using 3812548755 for database Id
Using 1 for instance number
Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing without
specifying a number lists all completed snapshots.
Enter value for num_days: 2
指定报表快照的生成区间!
Listing the last 2 days of Completed Snapshots
Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
test08 TEST08 7450 25 10 月 2009 00:00 1
7451 25 10 月 2009 01:00 1
7452 25 10 月 2009 02:00 1
7453 25 10 月 2009 03:00 1
7454 25 10 月 2009 04:00 1
7455 25 10 月 2009 05:00 1
7456 25 10 月 2009 06:00 1
7457 25 10 月 2009 07:00 1
7458 25 10 月 2009 08:00 1
7459 25 10 月 2009 09:00 1
7460 25 10 月 2009 10:00 1
7461 25 10 月 2009 11:00 1
7462 25 10 月 2009 12:00 1
7463 25 10 月 2009 13:00 1
7464 25 10 月 2009 14:00 1
7465 25 10 月 2009 15:00 1
7466 25 10 月 2009 16:00 1
7467 25 10 月 2009 17:00 1
7468 25 10 月 2009 18:00 1
7469 25 10 月 2009 19:00 1
7470 25 10 月 2009 20:00 1
7471 25 10 月 2009 21:00 1
7472 25 10 月 2009 22:00 1
7473 25 10 月 2009 23:00 1
7474 26 10 月 2009 00:00 1
7475 26 10 月 2009 01:00 1
7476 26 10 月 2009 02:00 1
7477 26 10 月 2009 03:00 1
7478 26 10 月 2009 04:00 1
7479 26 10 月 2009 05:00 1
7480 26 10 月 2009 06:00 1
7481 26 10 月 2009 07:00 1
7482 26 10 月 2009 08:00 1
7483 26 10 月 2009 09:00 1
7484 26 10 月 2009 10:00 1
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 7451
Begin Snapshot Id specified: 7451
Enter value for end_snap: 7475
End Snapshot Id specified: 7475
指定开始和结束的快照ID:
Specify the SQL Id
~~~~~~~~~~~~~~~~~~
Enter value for sql_id: a51q9un8j1kv6
注意喽,这里要指定分析的SQL_ID,你可能想问,要分析的SQL ID从何而来呢?一般来说,提出这种问题说明你还未操作过awr或看到一条SQL。为什么这么说呢,因为一般来讲,获取问题SQL的途径要么是通过V$SQL(及其它相关视图),要么是通过AWR/STATSPACK等工具,而这些方式找到SQL语句时,只要你再稍微拿眼神的旁光这么一扫,就会发现在语句的旁边有一条SQL ID静静的矗立着:)
SQL ID specified: a51q9un8j1kv6
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrsqlrpt_1_7451_7475.html. To use this name,
press to continue, otherwise enter an alternative.
Enter value for report_name: awr_sqlrpt_1_7451_7475.html
Using the report name awr_sqlrpt_1_7451_7475.html
[转]oracle性能调优之--Oracle 10g AWR 配置的更多相关文章
- Oracle性能调优之物化视图用法简介
目录 一.物化视图简介 二.实践:创建物化视图 一.物化视图简介 物化视图分类 物化视图分类,物化视图语法和as后面的sql分为: (1) 基于主键的物化视图(主键物化视图) (2)基于Rowid的物 ...
- Oracle性能调优之虚拟索引用法简介
本博客记录一下Oracle虚拟索引的用法,虚拟索引是定义在数据字典中的伪索引,可以说是伪列,没有修改的索引字段的.虚拟索引的目的模拟索引,不会增加存储空间的使用,有了虚拟索引,开发者使用执行计划的时候 ...
- maclean-【性能调优】Oracle AWR报告指标全解析 学习笔记
原文链接:http://www.askmaclean.com/archives/performance-tuning-oracle-awr.html AWR小技巧 手动执行一个快照: Exec dbm ...
- Oracle性能调优(AWR)
一.AWR报告 AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分,这点与Statspack生成的报告非常类似.不过AWR在生成报告时,可以选择生成 ...
- Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划
V$SQL_PLAN视图提供了一种方法,可用于检查仍位于库高速缓存的游标的执行计划.此视图中的信息与 PLAN_TABLE 视图中的信息非常类似.但是,EXPLAIN PLAN 显示的是执行相应语句时 ...
- Oracle 性能调优 SQL_TRACE
思维导图 Oracle优化10-SQL_TRACE解读 Oracle优化11-10046事件 概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起 ...
- Oracle 性能调优 10053事件
思维导图 10053事件概述 我们在查看一条SQL语句的执行计划时,只看到了CBO最终告诉我们的执行计划结果,但是我们并不知道CBO为何要这样做. 特别是当执行计划明显失真时,我们特别想搞清楚为什么C ...
- Oracle 性能调优案例(代码级别)
业务案例一: 业务:千万记录表中查询出50条符合条件的记录. 现象:oracle部署时跨机器,业务取得数据耗时10ms.造成业务性能不达标. 为了突出主题,对于异常分支,均已省略. 对于通常写法, o ...
- Oracle 性能调优
在 oracle 中效率排行, 表连接>exist>not exist>in>no in 并且使用in 查询 会有查询条件数量不能超过1000 的限制: 简单提高效率可以使用 ...
随机推荐
- 用Java开发一个本地服务管理软件
一.最终界面先贴上最终效果图,图1为初始化界面,图二为点击启动/停止之后的中间过渡状态,图三为启动成功后弹出的提示框 把动态gif图片嵌入到jpg背景图中?用Adobe ImageReady即可办到 ...
- ajax返回json处理
在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. (一)以jquery异步获取的数据类型--json ...
- demo_01 css3中的radius
css属性:border-radius :border:边框:radius:弧度:所以这个属性的意思很明了. 下面实现一个小demo: <!doctype html> <html&g ...
- Sql语句批量更新数据(多表关联)
最近在项目中遇到一个问题,原来设计的功能是不需要一个特定的字段值depid的,但是新的功能需要根据depid来展现,于是出现了这样一个问题,新增加的数据都有正确的depid,而原来的大量的数据就没有d ...
- 之前可运行mongodb,后来却不行了显示Unclean shutdown detected mongodb
解决办法有三个: 第一个:如果你之前可以运行,说明你已经有数据存放目录了,你可以把数据存放目录之前的数据清空再启动,在配置一下 第二个:使用mongod --repair --dbpath D:\Mo ...
- PHP初学留神(五)·小结
来学习快两个月了,这周末即将回家开始写论文.那么走之前,好好总结一下这两个月的所学所得吧.这段时间,在实验室里做的Web开发主要涉及到了web开发的一些框架内容以及php基础知识.思维导图记录如下. ...
- Python 3.5 for windows 10 通过pip安装mysqlclient模块 error:C1083
$pip install mysqlclient 运行结果如下: 可能是由于不兼容导致的(中间试过各种方法,比如本地安装mysql等等),最后找来mysqlclient-1.3.7-cp35-cp35 ...
- 基于BOOST 实现并发服务器框架
一:设计思路 本服务器框架使用 UDP 传输协议,程序柱线程等待客户端数据,并将数组存取队列缓冲区.另外可开启多个工作线程,工作线程可以依据具体项目实现不同的功能 ,例如可以将队列缓冲区中的数据逐个取 ...
- Boost IPC Persistence Of Interprocess Mechanisms 例子
下面这一段摘抄自 Boost 1_55_0 的文档,显然标注了 每一个的生命期. One of the biggest issues with interprocess communication m ...
- The output char buffer is too small to contain the decoded characters, encoding 'Unicode (UTF-8)' fallback 'System.Text.DecoderReplacementFallback'.
Exception when executing ) br is a binary reader. The data to peak is D000 (D0=208) The cause is, fo ...