本质上说,Statspack和AWR相同,都是一种基于采样Sampling的性能监控工具。在早期的版本中,Oracle已经推出了一系列的动态视图来反映数据库和系统“实时”性能情况。而所谓的Snapshot就是在某一个时间点,Oracle程序将这些实时数据保留下来,作为一个snapshot点记录在数据库表中。Statspack和AWR报告都是基于多个Snapshot的做差来形成的。
Statspack和AWR最明显的差异在于Statspack默认是不会自动进行Snapshot动作,而AWR默认是提供每一小时进行采样的功能的。
所以说,AWR便于进行故障时段分析,而Statspack需要故障中或者故障重演。默认执行statspack镜像的方法很简单。
SQL> conn perfstat/perfstat@ora9i
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as perfstat
SQL> exec statspack.SNAP;
PL/SQL procedure successfully completed
调用statspack包的snap方法,可以直接收集snapshot。此时采用默认的收集策略。基础表stats$snapshot可以查看到保存的信息。
SQL> select snap_id, dbid, to_char(snap_time, 'yyyy-mm-dd hh24:mi:ss') snap_time, snap_level from stats$snapshot;
SNAP_ID DBID SNAP_TIME SNAP_LEVEL
------- ---------- ------------------- ----------
1 2629872507 2014-02-07 10:51:30 5
注意:我们此处采用了Oracle的默认配置。snapshot方法镜像,我们有很多的选择余地。这些内容留待我们之后讨论。此处目标是创建出一个snapshot。
如果观察perfstat用户下的数据表,我们会发现很多以stats$作为前缀的数据表。这些表中保存的数据就是以snapshot为引领的性能数据。
同AWR一样,生成statspack报告最少要有两个snapshot形成,而且snapshot中间不允许关机启动动作。
SQL> exec statspack.SNAP;
PL/SQL procedure successfully completed
SQL> select snap_id, dbid, to_char(snap_time, 'yyyy-mm-dd hh24:mi:ss') snap_time, snap_level from stats$snapshot;
SNAP_ID DBID SNAP_TIME SNAP_LEVEL
------- ---------- ------------------- ----------
1 2629872507 2014-02-07 10:51:30 5
2 2629872507 2014-02-07 11:05:00 5
在创建出两个报告的情况下,我们就可以生成报告了。注意:Statspack和AWR报告在生成过程中,有细微差别。Statspack是调用客户端脚本,而AWR核心程序在服务器端的程序包里面。所以,强烈推荐使用服务器端进行报告生成动作。
SQL> conn perfstat/perfstat@ora9i
已连接。
SQL>
SQL> @?/rdbms/admin/spreport //生成脚本
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
2629872507 ORA9I 1 ora9i
Instances in this Statspack schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
----------- -------- ------------ ------------ ------------
2629872507 1 ORA9I ora9i ACCA-8535F03
015
Using 2629872507 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 <return> without
specifying a number lists all completed snapshots.
Snap
Instance DB Name Snap Id Snap Started Level Comment
------------ ------------ --------- ----------------- ----- -------------------
ora9i ORA9I 1 07 2月 2014 10:5 5
1
2 07 2月 2014 11:0 5
5
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入 begin_snap 的值: 1
Begin Snapshot Id specified: 1
输入 end_snap 的值: 2
End Snapshot Id specified: 2
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_1_2. To use this name,
press <return> to continue, otherwise enter an alternative.
输入 report_name 的值:
Using the report name sp_1_2