手工生成ASH报告记录

转自 http://blog.itpub.net/17203031/viewspace-702387

我们之前探讨过AWR报告的手工方法(http://space.itpub.net/17203031/viewspace-700471),借助AWR报告的定时snapshot功能,我们可以有选择性的选取时间段系统数据进行分析,最后获取综合诊断情况。除了AWR报告,Oracle10g版本中还推出了ASH和ADDM两个工具,用于进行系统细粒度分析和自动化专家优化方案。其中,ASH(Active Session History)是一种比AWR更加细粒度分析系统会话、发现前端应用梗塞之处的工具。

 

对于Oracle数据库而言,大部分的请求都是以会话session的方式出现。一般情况下,单一会话对系统性能的影响是很小的,特别是OLTP系统。如果由于会话的原因引起系统性能,其中重要表现大都是前端应用无响应、无有效连接,同时系统表现出会话执行SQL或者等待事件的信息。同时,特定的Server Process存在高消耗的情况。

 

在会话引起性能问题或者高消耗发生的时候,我们可以通过v$session、v$session_wait等视图定位到是哪个会话的那个SQL语句引发的问题,及时进行处理。但是实际中引起一直阻塞的会话是比较少见的,一旦会话结束或者解除终止,信息就会从v$session和v$session_wait中被剔除掉。这个时候如果需要进行性能观察就需要使用ASH(Active Session History)报表了。

 

ASH是Oracle 10g中推出的一系列性能监控报表的一个。ASH原理同AWR有相似之处,都是采用性能镜像收集的原理。只是ASH收集的频率更高,大约每秒进行一次收集,这样可以尽可能保存住高消耗会话的信息。其次就是收集范围上ASH不会如同AWR那样的广范围收集,主要集中在会话、关键SQL和Top活动方面。与AWR默认大约保存一个月有所不同的是,ASH保存的时段比较短,为几天到几周的范围。不过对于临时性性能分析或者关键业务时段分析而言已经够用了。

 

 

Oracle10g后,可以使用OEM的可视化工具生成ASH或者查看关键Top信息。但是当系统没有OEM可以使用或者根本没有安装OEM的时候,手工生成ASH报告就是不错的方式。本篇介绍如何手工生成ASH报告,权当记录。

 

 

1、  准备环境,调用执行脚本

 

AWR手工生成的文章中,笔者选择了在Oracle服务器Linux端生成报告文件,之后再使用FTP工具进行下载到本地。本次使用客户端的脚本进行生成,为了保证一致性,尽可能使用与服务器相同的客户端脚本。

 

在命令行工具中定位到适当的目录下,之后启动Sqlplus工具。

 

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 7月 16 21:23:06 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

SQL> conn sys/oracle@orcl as sysdba;

已连接。

SQL>

 

SQL> select dbid, name,log_mode from v$database;

 

      DBID NAME      LOG_MODE

---------- --------- ------------

1192098220 ORCL      NOARCHIVELOG

 

 

之后调用生成脚本ashrpt.sql。如果是使用Sqlplus工具,可以直接使用?来代指Oracle本地的$ORACLE_HOME目录。

 

 

SQL> @?/rdbms/admin/ashrpt.sql

 

 

如果是使用PL/SQL Developer等工具,就需要直接指定目录位置,?代指符的作用就不存在了。

 

调用脚本之后,就需要输入连带的参数信息。

 

2、  输入相关参数

 

ü        输入报告类型

 

AWR一样,ASH提供txt和html两种格式的报表选择。

 

 

SQL> @?/rdbms/admin/ashrpt.sql

 

Current Instance

~~~~~~~~~~~~~~~~

 

   DB Id    DB Name      Inst Num Instance

----------- ------------ -------- ------------

 1192098220 ORCL                1 orcl

 

Specify the Report Type

~~~~~~~~~~~~~~~~~~~~~~~

Enter 'html' for an HTML report, or 'text' for plain text

Defaults to 'html'

输入 report_type 的值:

 

 

脚本第一步要求输入生成报告的类型,默认为html。如果希望生成txt格式,就输入text

 

ü        输入分析时段信息

 

ASH是一个时段分析报告,需要用户输入进行分析的时间范围开始点。

 

 

Type Specified:  html

 

Instances in this Workload Repository schema

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host

------------ -------- ------------ ------------ ------------

* 1192098220        1 ORCL         orcl         WWW-0E6111DF

                                                F74

 

Defaults to current database

Using database id: 1192098220

Defaults to current instance

Using instance number: 1

 

ASH Samples in this Workload Repository schema

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Oldest ASH sample available:  13-7月 -11 19:32:48  [   4435 mins in the past]

Latest ASH sample available:  16-7月 -11 21:25:54  [      2 mins in the past]

 

Specify the timeframe. to generate the ASH report

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Enter begin time for report:

 

--    Valid input formats:

--      To specify absolute begin time:

--        [MM/DD[/YY]] HH24:MI[:SS]

--        Examples: 02/23/03 14:30:15

--                  02/23 14:30:15

--                  14:30:15

--                  14:30

--      To specify relative begin time: (start with '-' sign)

--        -[HH24:]MI

--        Examples: -1:15  (SYSDATE - 1 Hr 15 Mins)

--                  -25    (SYSDATE - 25 Mins)

 

Defaults to -15 mins

输入 begin_time 的值:

 

 

由于ASH分析的粒度到秒一级别,所以输入的时间段度是以秒的细粒度。Begin_time输入的时间粒度有两种方式,根据脚本中提示的内容。一种是绝对开始时间(absolute begin time),包括年月日时分秒,适当省略一部分信息意味着使用当前对应的信息。另一种是相对开始时间(relative begin time),使用“-”号开头,表示当前时间之前多久。

 

 

输入 begin_time 的值:  21:15:00

Report begin time specified: 21:15:00

 

 

此处我们希望分析21:15:00开始的五分钟信息情况。

 

输入了开始时间,可以定义分析持续时间duration值。

 

//输入以分钟计数的持续时间

Enter duration in minutes starting from begin time:

Defaults to SYSDATE - begin_time

Press Enter to analyze till current time

输入 duration 的值:

 

输入 duration 的值:  5

Report duration specified:   5

 

 

ü        其他相关指定参数

 

ASH报告中分析包括的内容很多,有时候我们可能希望分析的更加有针对性。比如特定的SQL语句分析,特定的会话信息分析等。

 

 

Using 16-7月 -11 21:15:00 as report begin time

Using 16-7月 -11 21:20:00 as report end time

 

Specify Slot Width (using ashrpti.sql) for 'Activity Over Time' section

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-- Explanation:

--   In the 'Activity Over Time' section of the ASH report,

--   the analysis period is divided into smaller slots

--   and top wait events are reported in each of those slots.

 

-- Default:

--   The analysis period will be automatically split upto 10 slots

--   complying to a minimum slot width of

--     1 minute,  if the source is V$ACTIVE_SESSION_HISTORY or

--     5 minutes, if the source is DBA_HIST_ACTIVE_SESS_HISTORY.

 

Specify Slot Width in seconds to use in the 'Activity Over Time' section:

Defaults to a value as explained above:

Slot Width specified:

 

Specify Report Targets (using ashrpti.sql) to generate the ASH report

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-- Explanation:

--   ASH Report can accept "Report Targets",

--   like a particular SQL statement, or a particular SESSION,

--   to generate the report on. If one or more report targets are

--   specified, then the data used to generate the report will only be

--   the ASH samples that pertain to ALL the specified report targets.

 

-- Default:

--   If none of the report targets are specified,

--   then the target defaults to all activity in the database instance.

 

Specify SESSION_ID (eg: from V$SESSION.SID) report target:

Defaults to NULL:

SESSION report target specified:

 

Specify SQL_ID (eg: from V$SQL.SQL_ID) report target:

Defaults to NULL: (% and _ wildcards allowed)

SQL report target specified:

 

Specify WATI_CLASS name (eg: from V$EVENT_NAME.WAIT_CLASS) report target:

[Enter 'CPU' to investigate CPU usage]

Defaults to NULL: (% and _ wildcards allowed)

WAIT_CLASS report target specified:

 

Specify SERVICE_HASH (eg: from V$ACTIVE_SERVICES.NAME_HASH) report target:

Defaults to NULL:

SERVICE report target specified:

 

Specify MODULE name (eg: from V$SESSION.MODULE) report target:

Defaults to NULL: (% and _ wildcards allowed)

MODULE report target specified:

 

Specify ACTION name (eg: from V$SESSION.ACTION) report target:

Defaults to NULL: (% and _ wildcards allowed)

ACTION report target specified:

 

Specify CLIENT_ID (eg: from V$SESSION.CLIENT_IDENTIFIER) report target:

Defaults to NULL: (% and _ wildcards allowed)

CLIENT_ID report target specified:

 

 

通过指定一系列的参数变量可以来指定希望分析的会话信息。

 

如果没有指定,ASH会生成所有模块的分析信息。

 

ü        文件名指定

 

最后是指定生成的文件名称信息。

 

 

Specify the Report Name

~~~~~~~~~~~~~~~~~~~~~~~

The default report file name is ashrpt_1_0716_2120.html.  To use this name,

press <return> to continue, otherwise enter an alternative.

输入 report_name 的值:

 

 

一般使用默认值就可以了。最后会将文件生成提示结束。

 

</TABLE><P>

<BR><A class='awr' HREF='#top'>Back to Top</A><P>

<P>

End of Report

</BODY></HTML>

Report written to ashrpt_1_0716_2120.html

SQL>

 

 

3、查看报告

 

在调用目录上,就可以找到我们生成的ASH文件。

 

 

ASH Report For ORCL/orcl

DB Name         DB Id    Instance     Inst Num Release     RAC Host

------------ ----------- ------------ -------- ----------- --- ------------

ORCL          1192098220 orcl                1 10.2.0.1.0  NO  WWW-0E6111DF

 

CPUs           SGA Size       Buffer Cache        Shared Pool    ASH Buffer Size

---- ------------------ ------------------ ------------------ ------------------

   2        584M (100%)       408M (69.9%)       149M (25.6%)        4.0M (0.7%)

 

          Analysis Begin Time:  16-7月 -11 21:15:00

            Analysis End Time:  16-7月 -11 21:20:00

                 Elapsed Time:         5.0 (mins)

                 Sample Count:           5

 

 

4、结论

 

ASH、AWR和ADDM是Oracle推进的性能优化自动化的重要步骤阶段。借助这些工具,DBA可以更好的了解分析系统性能,发现瓶颈所在,更好的维护系统正常运转。

 
 
posted @ 2013-12-27 00:31  princessd8251  阅读(321)  评论(0编辑  收藏  举报