ORACLE中的AWR功能
1、ASH和AWR的故事1.1、关于ASH
用户在Oracle数据库中执行操作时必然要创建相应的连接和会话,其中,所有的当前会话信息都保存在动态性能视图v$session中,通过视图,DBA可以查看用户实际执行的操作,或者当前等待的事件。通常这部分信息是调优过程中的关键信息,不过,一旦连接断开。会话信息就会被同时从V$SESSION及其它相关视图中清除。
10g 版本中,ORACLE又新增加了一个视图V$ACTIVE_SESSION_HISTORY,代表活动会话的历史记录,即使用户操作完成后,断开了连接,其会话的情况也会被记录下来,这项特性就是ASH了。
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%';
POOL NAME MB
------------ -------------------------- ----------
shared poolASH buffers 8
shared poolUNDO INFO HASH .005706787
SQL>
直白的讲 ,V$ACTIVE_SESSION_HISTORY中能够记录多少会话信息, 一方面取决于该数据库的SGA 分配给ASH buffers的大小 ,另一方面取决于数据库的启动和关闭(重启数据库时将重构SGA内存区)。这两方面的因素制约了V$ACTIVE_SESSION_HISTORY中能够保存的会话信息的能力。ORACLE又提供AWR特性,ASH收集到的会话信息,是做为AWR中快照信息的一部分,被保存到了硬盘上。
1.2、关于AWR
AWR 是 Oracle 10g 版本 推出的新特性,全称叫Automatic Workload Repository-自动负载信息库(接替了之前的Statspack的功能,功能更加完善了)。
AWR负责收集、处理并维护性能统计信息,用于检查和分析性能问题,AWR生成的统计数据即可以通过V$视图和DBA_*数据字典查看,也可以通过脚本来生成相应报表。
2.生成分析报表
AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分,AWR在生成报告时,可以选择生成TXT或HTML两种格式的报告。可以生成的报告脚本如下:
[*] awrrpt.sql :生成指定快照区间的统计报表;
[*] awrrpti.sql :生成指定数据库实例,并且指定快照区间的统计报表;
[*] awrsqlrpt.sql :生成指定快照区间,指定SQL语句(实际指定的是该语句的SQLID)的统计报表;
[*] awrsqrpi.sql :生成指定数据库实例,指定快照区间的指定SQL语句的统计报表;
[*] awrddrpt.sql :指定两个不同的时间周期,生成这两个周期的统计对比报表;
[*] awrddrpi.sql :指定数据库实例,并指定两个的不同时间周期,生成这两个周期的统计对比报表;
注意:想要让AWR收集到准确的统计信息,从而生成可靠的性能分析报告,必须将初始化参数statistics_level的值设置为typical(默认)或all。
SQL> show parameter statistics_level;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
statistics_level string TYPICAL
SQL>
2.1生成标准统计报表
SQL> show user;
USER is "SYS"
SQL> @$ORACLE_HOME/rdbms/admin/awrrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB> ----------- ------------ -------- ------------
1368089174 ORCL 1 orcl
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格式
Type Specified:html
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB> ------------ -------- ------------ ------------ ------------
* 1368089174 1 ORCL orcl myCentOS03
Using 1368089174 for database> 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.Pressingwithout
specifying a number lists all completed snapshots.
Enter value for num_days: 2
此处需指定要读取多少天内的快照信息
Enter value for num_days: 2
Listing the last 2 days of Completed Snapshots
Snap
Instance DB Name Snap> ------------ ------------ --------- ------------------ -----
orcl ORCL 204 13 Mar 2014 00:00 1
205 13 Mar 2014 01:00 1
206 13 Mar 2014 16:38 1
207 13 Mar 2014 18:00 1
208 13 Mar 2014 19:00 1
209 13 Mar 2014 20:00 1
210 13 Mar 2014 21:00 1
211 13 Mar 2014 22:00 1
212 13 Mar 2014 23:00 1
213 14 Mar 2014 00:00 1
214 14 Mar 2014 01:00 1
215 14 Mar 2014 02:00 1
216 14 Mar 2014 03:00 1
217 14 Mar 2014 04:00 1
218 14 Mar 2014 05:00 1
219 14 Mar 2014 05:42 1
220 14 Mar 2014 07:00 1
Specify the Begin and End Snapshot> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 217
Begin Snapshot> Enter value for end_snap: 218
End Snapshot> Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_217_218.html.To use this name,
pressto continue, otherwise enter an> Enter value for report_name:
此处为要生成的报告指定一个文件名,默认会根据前面输入的snap_id生成一个文件名,比如这里生成的默认文件名为awrrpt_1_217_218.html,当然DBA可以根据实际情况对文件名进行自定义。
可能出现的问题:
declare
*
ERROR at line 1:
ORA-20200: The instance was shutdown between snapshots 206 and 215
ORA-06512: at line 42
Enter value for report_name:/u01/app/oracle/awrrpt_1_217_218.html
........
End of Report
Report written to /u01/app/oracle/awrrpt_1_217_218.html
最终生成统计报表,如下:
$ ls
admin db_1 my_arch_backuporadata
awrrpt_1_217_218.htmlflash_recovery_areamy_cold_backuporaInventory
$ pwd
/u01/app/oracle
$
通过浏览器打开,如下所示:
2.2生成指定实例的数据库报表
这项统计报表一般是针对多实例数据库,前面使用的脚本是生成数据库级别的统计报表,对于多实例的数据库,有时候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> ------------ -------- ------------ ------------ ------------
* 1368089174 1 ORCL orcl myCentOS03
Enter value for dbid: 1368089174
Using 1368089174 for database> 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.Pressingwithout
specifying a number lists all completed snapshots.
Enter value for num_days: 2
指定要读取多少天内的快照信息。
Enter value for num_days: 2
Listing the last 2 days of Completed Snapshots
Snap
Instance DB Name Snap> ------------ ------------ --------- ------------------ -----
orcl ORCL 204 13 Mar 2014 00:00 1
205 13 Mar 2014 01:00 1
206 13 Mar 2014 16:38 1
207 13 Mar 2014 18:00 1
208 13 Mar 2014 19:00 1
209 13 Mar 2014 20:00 1
210 13 Mar 2014 21:00 1
211 13 Mar 2014 22:00 1
212 13 Mar 2014 23:00 1
213 14 Mar 2014 00:00 1
214 14 Mar 2014 01:00 1
215 14 Mar 2014 02:00 1
216 14 Mar 2014 03:00 1
217 14 Mar 2014 04:00 1
218 14 Mar 2014 05:00 1
219 14 Mar 2014 05:42 1
220 14 Mar 2014 07:00 1
Specify the Begin and End Snapshot> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 214
Begin Snapshot> Enter value for end_snap: 215
End Snapshot> Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_214_215.html.To use this name,
pressto continue, otherwise enter an> Enter value for report_name: /u01/app/oracle/awrrpt_1_214_215.html
......
End of Report
Report written to /u01/app/oracle/awrrpt_1_214_215.html
剩下的步骤就与标准统计报表的步骤完全相同。
2.3生成指定SQL语句的统计报表
这项统计专门用来分析某条指定的SQL语句,通过awrsqrpt.sql脚本,awr能够生成指定sql(曾经执行过的SQL)的执行计划,消耗的资源等等信息,有助于DBA进行SQL调优。
具体操作如下,首先还是执行生成脚本:
SQL> @$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB> ----------- ------------ -------- ------------
1368089174 ORCL 1 orcl
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
Type Specified:html
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB> ------------ -------- ------------ ------------ ------------
* 1368089174 1 ORCL orcl myCentOS03
Using 1368089174 for database> 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.Pressingwithout
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> ------------ ------------ --------- ------------------ -----
orcl ORCL 204 13 Mar 2014 00:00 1
205 13 Mar 2014 01:00 1
206 13 Mar 2014 16:38 1
207 13 Mar 2014 18:00 1
208 13 Mar 2014 19:00 1
209 13 Mar 2014 20:00 1
210 13 Mar 2014 21:00 1
211 13 Mar 2014 22:00 1
212 13 Mar 2014 23:00 1
213 14 Mar 2014 00:00 1
214 14 Mar 2014 01:00 1
215 14 Mar 2014 02:00 1
216 14 Mar 2014 03:00 1
217 14 Mar 2014 04:00 1
218 14 Mar 2014 05:00 1
219 14 Mar 2014 05:42 1
220 14 Mar 2014 07:00 1
Specify the Begin and End Snapshot> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 214
Begin Snapshot> Enter value for end_snap: 215
End Snapshot>
Specify the SQL> ~~~~~~~~~~~~~~~~~~
Enter value for sql_id: 17y8m0gj8x941
指定要分析的SQL_ID
批注:
首先知道当前的会话ID,如下:
SQL> select sid from v$mystat where rownum=1;
SID
----------
148
SQL> select SQL_ID from v$session where sid=148;
SQL_ID
-------------
17y8m0gj8x941
AWR自动生成分析报表
2.4生成不同时间段时的统计对比报表
在没有awr之前,如果希望对不同时间段时,数据库的整体影响进行对比,只能依靠DBA手工查询相关视图,并通过时间条件来获取差异(还有些统计已经无法对比),而在AWR中,直接就提供了,对不同时间段时,数据库的性能统计做差异对比的功能。
执行脚本如下:
SQL> @$ORACLE_HOME/rdbms/admin/awrddrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB> ----------- ----------- ------------ -------- -------- ------------
13680891741368089174 ORCL 1 1 orcl
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
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB> ------------ -------- ------------ ------------ ------------
* 1368089174 1 ORCL orcl myCentOS03
Database> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Using 1368089174 for Database> Using 1 for Instance Number for the first pair of snapshots
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.Pressingwithout
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> ------------ ------------ --------- ------------------ -----
orcl ORCL 204 13 Mar 2014 00:00 1
205 13 Mar 2014 01:00 1
206 13 Mar 2014 16:38 1
207 13 Mar 2014 18:00 1
208 13 Mar 2014 19:00 1
209 13 Mar 2014 20:00 1
210 13 Mar 2014 21:00 1
211 13 Mar 2014 22:00 1
212 13 Mar 2014 23:00 1
213 14 Mar 2014 00:00 1
214 14 Mar 2014 01:00 1
215 14 Mar 2014 02:00 1
216 14 Mar 2014 03:00 1
217 14 Mar 2014 04:00 1
218 14 Mar 2014 05:00 1
219 14 Mar 2014 05:42 1
220 14 Mar 2014 07:00 1
Specify the First Pair of Begin and End Snapshot> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 214
First Begin Snapshot> Enter value for end_snap: 215
First End Snapshot> Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB> ------------ -------- ------------ ------------ ------------
* 1368089174 1 ORCL orcl myCentOS03
Database> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Using 1368089174 for Database> Using 1 for Instance Number for the second pair of snapshots
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.Pressingwithout
specifying a number lists all completed snapshots.
Enter value for num_days2: 2
Listing the last 2 days of Completed Snapshots
Snap
Instance DB Name Snap> ------------ ------------ --------- ------------------ -----
orcl ORCL 204 13 Mar 2014 00:00 1
205 13 Mar 2014 01:00 1
206 13 Mar 2014 16:38 1
207 13 Mar 2014 18:00 1
208 13 Mar 2014 19:00 1
209 13 Mar 2014 20:00 1
210 13 Mar 2014 21:00 1
211 13 Mar 2014 22:00 1
212 13 Mar 2014 23:00 1
213 14 Mar 2014 00:00 1
214 14 Mar 2014 01:00 1
215 14 Mar 2014 02:00 1
216 14 Mar 2014 03:00 1
217 14 Mar 2014 04:00 1
218 14 Mar 2014 05:00 1
219 14 Mar 2014 05:42 1
220 14 Mar 2014 07:00 1
Specify the Second Pair of Begin and End Snapshot> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap2: 216
Second Begin Snapshot> Enter value for end_snap2: 217
Second End Snapshot> Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrdiff_1_214_1_216.htmlTo use this name,
pressto continue, otherwise enter an> Enter value for report_name: /u01/app/oracle/awrdiff_1_214_1_216.html
......
Report written to /u01/app/oracle/awrdiff_1_214_1_216.html
报表生成以后,在显示时将以并列的形式,直观的显示出两个不同时间段里,数据库各项参数的差异,摘要如图:
2.5生成指定SQL语句的统计报表
前例的对比是在单实例环境下进行的,如果希望对多实例的数据库做对比,那就要使用$ORACLE_HOME/rdbms/admin/awrddrpi.sql脚本。
3.查看AWR视图
不管是EM也好,或是前面演示中使用的awr*.sql脚本也好,实质都是访问ORACLE中的部分相关视图来生成统计数据,当然也可以直接查询动态性能视图(或相关数据字典)的方式来获取自己想要的那部分性能数据。ORACLE将这部分性能统计数据保存在DBA_HIST开头的数据字典中,要查询当前实例所有能够访问的DBA_HIST字典,可以通过下列语句:
SQL>select * from dict where table_name like ¨DBA_HIST%¨;
TABLE_NAME COMMENTS
------------------------------ --------------------------------------------------------------------------------
DBA_HIST_DATABASE_INSTANCE Database Instance Information
DBA_HIST_SNAPSHOT Snapshot Information
DBA_HIST_SNAP_ERROR Snapshot Error Information
DBA_HIST_BASELINE Baseline Metadata Information
DBA_HIST_WR_CONTROL Workload Repository Control Information
DBA_HIST_DATAFILE Names of Datafiles
DBA_HIST_FILESTATXS Datafile Historical Statistics Information
DBA_HIST_TEMPFILE Names of Temporary Datafiles
DBA_HIST_TEMPSTATXS Temporary Datafile Historical Statistics Information
DBA_HIST_COMP_IOSTAT I/O stats aggregated on component level
DBA_HIST_SQLSTAT SQL Historical Statistics Information
DBA_HIST_SQLTEXT SQL Text
......................
页:
[1]