How to install statspack

安装前的几个说明和注意事项:

1, alter system set job_queue_processes = 6;(如果不采用自动采集数据则可不设)
job_queue_processes,为了能够建立自动任务,执行数据收集,该参数需要大于0。
 
2, alter system set timed_statistics = true;(如果不采用自动采集数据则可不设)
timed_statistics,收集操作系统的计时信息,这些信息可被用来显示时间等统计信息,优化数据库和SQL语句。要防止因从操作系统请求时间而引起的开销,将该
值设置为False。

3, 安装Statspack需要用internal身份登陆,或者拥有SYSDBA(connect / as sysdba)权限的用户登陆。需要在本地安装或者通过telnet登陆到服务器。

4, 建一个单独的表空间用于statspack 或建在SYSAUX表空间上(>100MB)

5, statspack系统安装相关的脚步
statspack的安装程序在@?/rdbms/admin/下:
spcreate.sql 安装
spdrop.sql  卸载
spauto.sql: 生成自动采集数据任务
spreport.sql  生成分析报告
spuexp.sql  参数文件
sppurge.sql 清除不再需要的数据
sptrunc.sql  清除所有的数据
sprepsql.sql 用于根据给定的SQL HASH值生成SQL报告

6, 安装statspack

SQL> connect / as sysdba
SQL> create tablespace perfstat datafile '/u01/app/oracle/oradata/test/perfstat01.dbf' size 200M;

SQL> define default_tablespace='perfstat'
SQL> define temporary_tablespace='TEMP'
SQL> define perfstat_password='oracle'
SQL> @?/rdbms/admin/spcreate

Creating Package STATSPACK...

Package created.

No errors.
Creating Package Body STATSPACK...

Package body created.

No errors.

NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.

看到上面的信息,表示你成功安装了statspack.


7, 测试安装好的STATSPACK,生成statspack快照
SQL> connect perfstat/oracle
Connected.
SQL> execute statspack.snap; (执行快照点,如同对数据库当前时刻拍照)
SQL> select max(snap_id) from stats$snapshot;

MAX(SNAP_ID)
------------


SQL> execute statspack.snap;

PL/SQL procedure successfully completed.

SQL> select max(snap_id) from stats$snapshot;

MAX(SNAP_ID)
------------
           1
手动执行了快照后,stats$snapshot就有了一个snap_id,本例为1.

8, 上面是手动的执行statspack从而产生快照.下面是自动化的系统定时的statspack快照的生成
SQL> connect perfstat/oracle
SQL> @?/rdbms/admin/spauto

spauto.sql中主要调用dbms_job.submit,默认每小时收集1次(1/24)
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;
/
可以通过修改这个值设置采集时间,在生产环境中定时监控perfstat 表空间使用情况。采样的间隔,建议是一个小时,特殊环境可以设置更短
1/24 HH 每小时一次
1/48 MI 每半小时一次
1/144 MI 每十分钟一次
1/288 MI 每五分钟一次


9, 修改statspack在收集快照的时候的level
SQL> execute statspack.modify_statspack_parameter (i_snap_level=>10);
PL/SQL procedure successfully completed.

再手动执行一次快照,这个时候再看snap_id就是2了。
SQL> connect perfstat/oracle
SQL> execute statspack.snap
PL/SQL procedure successfully completed.

SQL> select max(snap_id) from stats$snapshot;

MAX(SNAP_ID)
------------
           2


10, 生成statspack报表:
SQL> connect perfstat/oracle
SQL> @?/rdbms/admin/spreport

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
 2100083002 TEST                1 test

 

Instances in this Statspack schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id    Inst Num DB Name      Instance     Host
----------- -------- ------------ ------------ ------------
 2100083002        1 TEST         test         even.oracle.
                                               com

Using 2100083002 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.

 

Listing all Completed Snapshots

                                                       Snap
Instance     DB Name        Snap Id   Snap Started    Level Comment
------------ ------------ --------- ----------------- ----- --------------------
test         TEST                 1 18 Dec 2012 19:25     5
                                  2 18 Dec 2012 19:41    10

 

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 1
Begin Snapshot Id specified: 1

Enter value for 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.

...
...
...
End of Report ( /home/oracle/20121227_sp.txt )
我的报表的路径(/home/oracle/20121227_sp.txt),是自己写的路径,如果不写就在当前的路径下.
到此为止一个完整的statspack生产了,下一步你就可以分析该报告了。当然这个报告里的信息量和知识量
相当的多。


10, 移除自动执行的定时的STATSPACK收集,即通过执行SQL> @?/rdbms/admin/spauto而产生的JOB信息
SQL> connect perfstat/oracle
Connected.
SQL> select job, log_user, priv_user, last_date, next_date, interval from user_jobs;  --先查看当前自动收集的jobs

       JOB LOG_USER                       PRIV_USER
---------- ------------------------------ ------------------------------
LAST_DATE NEXT_DATE
--------- ---------
INTERVAL
--------------------------------------------------------------------------------
        61 PERFSTAT                       PERFSTAT
18-DEC-12 18-DEC-12
trunc(SYSDATE+1/24,'HH')

        62 PERFSTAT                       PERFSTAT
18-DEC-12 18-DEC-12
trunc(SYSDATE+1/24,'HH')

       JOB LOG_USER                       PRIV_USER
---------- ------------------------------ ------------------------------
LAST_DATE NEXT_DATE
--------- ---------
INTERVAL
--------------------------------------------------------------------------------

        63 PERFSTAT                       PERFSTAT
18-DEC-12 18-DEC-12
trunc(SYSDATE+1/24,'HH')

SQL> execute dbms_job.remove('61');  --移除任务61


11, 删除历史手动采样数据,即通过执行SQL> execute statspack.snap 获得的。
删除stats$snapshot 数据表中的相应数据.其它表中的数据会相应的级连删除.
SQL> select max(snap_id) from stats$snapshot; ---查看最大的SNAP_ID
SQL> delete from stats$snapshot where snap_id <= xxx;

如果采样的数据量很大,直接Delete 是非常缓慢的,可以考虑采用执行sptrunc.sql来截断相关联的表。
删除统计资料(statspack相关的所有系统表)
SQL> @?/rdbms/admin/sptrunc.sql;


12, 删除statspack表
SQL>connect sys/oracle as sysdba
SQL>@?/rdbms/admin/spdrop.sql

 

13, 三种快照级别
收集级别:
3种快照级别默认为5

level 0 : 一般性能统计包含等待事件,系统事件,回滚段统计,行缓存,sga......
level 5 :增加了sql语句,包括sql语句收集,收集结果记录在stats$sql_summary中
level 10: 增加子锁统计 STATS$LATCH_CHILDREN

SQL> execute statspack.snap(i_snap_level=>0,i_modify_parameter=>'true');
PL/SQL procedure successfully completed.
通过这样的设置,以后的收集解别将是0级别,如果你想本次改变收集级别,可以忽略i_modify_parameter参数,因为每一个快照都会收集很多数据,每一行都代表获取快照时数据库中的一个SQL语句,所以stats$sql_summary很快就会成为Statspack中最大的表。

 


 

你可能感兴趣的:(statspack)