Statspack安装:
这里我事先说明下在oracle_home目录下的cd rdbms/admin有个txt文档是详述如何使用statspack的。
 
Create tablespace stat datafile ‘/u01/oracle/oradata/devin/stat01.dbf’ size 100m autoextend on next 50m;
 
@?/rdbms/admin/spcreate.sql  --创建一个用户perfsata,并在此用户下创建一序列的表用来存储追踪信息。此脚本执行完会自动切换到新用户下。而同时在sqlplus运行的当前目录下会生成spcpkg.lis文件。
 
Execute statspack.snap; ---使用手动快照抓取,而读取报告则是两次快照之间的信息,而如果两次快照采集之间有shutdown immediate行为,则信息会丢失。
 
@?/rdbms/admin/spreport.sql ----多实例的情况下要使用sprepins.sql脚本
 
Listing all Completed Snapshots
 
                                                       Snap
Instance      DB Name        Snap Id   Snap Started    Level Comment
------------ ------------ --------- ----------------- ----- --------------------
devin         DEVIN                1 13 Mar 2012 20:32     5
                                  2 13 Mar 2012 20:32     5
                                  3 13 Mar 2012 20:32     5
 
Enter value for begin_snap: 1 ---起始snap id是无限制的
Begin Snapshot Id specified: 1
 
Enter value for end_snap: 3    ---终止snap id 同样是无限制的
End    Snapshot Id specified: 3
 
 
Enter value for report_name: stat01 ---而report文件名则是任意取的
 
这里同样会在sqlplus当前路径下生成一个stat01的文件。
 
如果你采集过后想清空追踪信息,你可以drop user perfstat cascade;
Drop tablespace stat including contents and datafiles;
 
当然我们也可以清除perfstat用户的相关信息,而保留此用户与相关的表空间,数据文件,那么便要执行另外一个脚本:
 
@?/rdbms/admin/spdrop.sql
采集基线参数是从stats$statspack_parameter视图里面获取,而采集快照我们可以通过stats$snapshot视图来查询
 
自动采集创建脚本为spauto.sql:
 
variable jobno number;
variable instno number;
begin
 select instance_number into :instno from v$instance;
 dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);
 commit;
end;
/
 
 
而我们可以通过user_jobs来查询数据库运行自动采集工作的信息,而如果只采集sql report的话,我们可以执行sprepsql.sql脚本(多实例执行sprsqins.sql脚本),执行这两个脚本需要相应的sql的哈希值。
 
 
 
show parameter statistics;
 
NAME                                  TYPE        VALUE
------------------------------------ ----------- ------------------------------
statistics_level                     string      TYPICAL
timed_os_statistics                   integer     0
timed_statistics                      boolean     TRUE
 
各参数可以查询联机文档
 
对于statspack的参数信息我们可以通过stats$statspack_parameter视图来查询
 
select snap_level,session_id from stats$statspack_parameter;
 
SNAP_LEVEL
    5          
 
对于各等级统计快照的采集指令有两种:
 
1 采集快照同时添加level等级参数
 
Execute statspack.snap(i_snap_level=>7);
这个参数设置只是临时生效,如果想在stats$statspack_parameter进行修改,指令则为:Execute statspack.snap(i_snap_level=>7,i_modify_parameter=>'true');
 
2 采用statspack.modify_statspack_parameter包对level参数进行修改
 
Execute statspack.modify_statspack_parameter(i_snap_level=>6);
 
 
定义snapshot保存baseline:
Execute statspack.make_baseline(i_begin_snap=>1,i_end_snap=>16);
 
删除未标baseline的snapshot:
Execute statspack.purge(i_begin_snap=>1,i_end_snap=>20)
---以定义解释,这里只删除了17,18,19,20的snapshot
 
删除baseline:
Execute statspack.clear_baseline(i_begin_snap=>1,i_end_snap=>16,i_snap_range=>false);
 
删除perfstat用户下所有的表数据则是运行脚本sptrunc.sql,而如果是不想再作statspack.snap那么便可以执行脚本spdrop.sql连带用户一起删除,但是这个脚本执行需要dba的权限。