日期:2014-05-16  浏览次数:20429 次

Statspack的使用

?Statspack是Oracle自带的强大的性能分析工具。他可以对当前数据库的运行状况作出全面的分析(包括实例信息、PGA顾问信息、命中率、top sql、top 5 wait event等等),是个好东西吧!下面切入正题:

?

1.以sysdba身份登陆,查看数据文件路径

???

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 4月 14 10:51:41 2010

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


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

sys@AAA>show user;
USER 为 "SYS"
sys@AAA>select file_name from dba_data_files;

FILE_NAME
--------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\USERS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\BBB.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\PERFSTAT.DBF

已选择6行。

?

2.创建statspack存储数据的表空间,(注:statspack往往会产生大量的分析数据,所以表空间还是大点为好)。

??

create tablespace perfstat datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\PERFSTAT.DBF' size 2G;

?

3.运行statspack安装脚本。默认位置在$oracle_home\rdbms\admin\spcreate.sql

??

???

sys@AAA> @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\spcreate.sql

...................

输入 perfstat_password 的值:  perfstat

...

输入 default_tablespace 的值:  perfstat
..........
..........
输入 temporary_tablespace 的值: temp
..........
..........


?

安装完之后 会自动切换用户到perfstat下:

??

PERFSTAT@AAA> show user;

USER is "PERFSTAT"

?

?安装完毕!

?

4.接下来采样分析,设定一个job,每小时执行一次采样。

?? 首先查看当前DB中有没有正在运行的JOB:

??

perfstat@AAA>select job,schema_user,next_date,interval,what from user_jobs;

未选定行

?

创建statspack采样的job,没每个小时采样一次。

??

perfstat@AAA>variable job number;
perfstat@AAA>begin
  2  dbms_job.submit(:job,'statspack.snap;',trunc(sysdate+1/24,'hh24'),'trunc(sysdate+1/24,''hh24'')');
  3  commit;
  4  end;
  5  /

PL/SQL 过程已成功完成。

?

查看当前正在运行的job有哪些?

??

perfstat@AAA>select job as j,schema_user,next_date,interval,what from user_jobs;
        J SCHEMA_USER                    NEXT_DATE      INTERVAL   WHAT
---------- ------------------------------ -------------- ---------- ----------
         1 PERFSTAT                       14-4月 -10     trunc(sysd statspack.
                                                         ate+1/24,' snap;
                                                         hh24')

?

?

5.由于statspack的采集和分析会做很多DB的分析,产生大量的分析数据,所以频繁的采样肯定会消耗系统性能,特别是在生产库中,所以当你建立了上面每小时执行一次的那个job,请务必在不需要的时候停止它。不然的话,这个失误可能会是致命的( statspack job每小时都会跑,永不停的跑下去,呵呵。),尤其在生产库中。

?

明天凌晨,系统比较清闲,采样已经没多大意义(采样分析的最终目的是分析高峰时段的系统瓶颈),所以停止这个job.

???

perfstat@AAA>variable job number;
perfstat@AAA>begin
  2  dbms_job.submit(:job,'dbms_job.broken(1,true);',trunc(sysdate+1),'null');
  3  commit;
  4  end;
  5  /

PL/SQL 过程已成功完成。

?

?

6.几个小时候后,看看生成的哪些快照。

perfstat@AAA>select snap_id,snap_time,startup_time from stats$snapshot;

   SNAP_ID SNAP_TIME      STARTUP_TIME
---------- -------------- --------------
         1 14-4月 -10     14-4月 -10
         2 14-4月 -10     14-4月 -10

?

7.设定任意两个快照,产生这段时间内的性能分析报告(此时需要跑spreport脚本,路径和刚才那个脚本一致)。

perfstat@AAA>@D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\spreport.sql

Current Instance
~~~~~~~~~~~~~~~~
   DB Id    DB Name     Inst Num Instance
----------- ------------ -------- ------------
 1858440386 AAA                 1 aaa



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