转载:http://blog.csdn.net/joinplay/article/details/23358133

oracle statspack 工具从oracle 8.1.6开始被引用,从oracle 10G开始,oracle推出新的工具AWR(Automatic Workload Repository)。

statspack是免费的,AWR工具很多特性是需要付费的。

在数据库中statspack初始并未安装,要使用,需要通过一系列脚本来安装,statspack的脚本文件位于$ORACLE_HOME/rdbms/admin目录下,对于oracle 8.1.6来说,脚本是一组以stat开头的文件;对于oracle 8.1.7以及以后的版本,是sp开头。

在statspack未发布之前,常用于诊断数据库的工具是两个脚本UTLBSTAT.SQL和UTLESTAT.SQL。BSTAT/ESTAT是一个非常简单的性能诊断工具,BSTAT获取开始时很多v$视图快照,ESTAT通过先前的快照和当前视图生成一个报表,该报表相当于statspack中的两个采样点。

♠安装statspack

1、设置系统参数

SQL>alter system set job_queue_processes=1000 scope=both;

SQL> show parameter job_queue_processes



NAME     TYPE
VALUE

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

job_queue_processes     integer1000

job_queue_processes改参数需要大于0,该参数可以在参数文件中修改(重启后依然有效),也可以在系统级动态修改(重启失效)

检查timed_statistics是否为true,oracle 9i开始,该值默认为true

SQL> show parameter timed_statistics;

NAME     TYPEVALUE

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

timed_statistics     booleanTRUE

如果timed_statistics为false,可以通过以下方式更改

SQL>alter system set timed_statistics=true scope=both;

2、安装statspack

安装statspack需要使用sys以sysdba的身份安装,在oracle 9i之前,需要用internal用户安装(9i后已取消internal用户)

因为statspack需要一定的存储空间,所以最好建立独立的表空间,创建的表空间不能太小,至少100M,否则创建 对象会失败,根据实际情况,可以适当设置表空间大小。

SQL>conn / as sysdba

SQL> create tablespace statperf

  2  datafile '/home/oracle/app/statperf.dbf' size 200M

  3  extent management local;

Tablespace created.

查看脚本创建文件

$cd $ORACLE_HOME/rdbms/admin

$ ls  sp*

spauto.sql    spctab.sql  spdtab.sql    sprepins.sql  sptrunc.sql  spup816.sql

spawrrac.sql  spcusr.sql  spdusr.sql    spreport.sql  spuexp.par   spup817.sql

spcpkg.sql    spdoc.txt   sppurge.sql   sprepsql.sql  spup102.sql  spup90.sql

spcreate.sql  spdrop.sql  sprepcon.sql  sprsqins.sql  spup10.sql   spup92.sql

SQL> @$ORACLE_HOME/rdbms/admin/spcreate



Choose the PERFSTAT user's password

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

Not specifying a password will result in the installation FAILING



Enter value for perfstat_password:                          输入密码,安装过程,自动创建用户perfstat

Choose the Default tablespace for the PERFSTAT user

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

Below is the list of online tablespaces in this database which can

store user data.  Specifying the SYSTEM tablespace for the user's

default tablespace will result in the installation FAILING, as

using SYSTEM for performance data is not supported.



Choose the PERFSTAT users's default tablespace.  This is the tablespace

in which the STATSPACK tables and indexes will be created.



TABLESPACE_NAME       CONTENTS  STATSPACK DEFAULT TABLESPACE

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

FBRA       PERMANENT

RMAN       PERMANENT

STATPERF       PERMANENT

SYSAUX       PERMANENT *

TEST       PERMANENT

USERS       PERMANENT



Pressing <return> will result in STATSPACK's recommended default

tablespace (identified by *) being used.



Enter value for default_tablespace: statperf                          --------------------输入statspack使用的表空间

Choose the PERFSTAT user's Temporary tablespace.



TABLESPACE_NAME       CONTENTS  DB DEFAULT TEMP TABLESPACE

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

TEMP       TEMPORARY *



Pressing <return> will result in the database's default Temporary

tablespace (identified by *) being used.



Enter value for temporary_tablespace: temp             -------------------------------输入法默认临时表空间



Using tablespace temp as PERFSTAT temporary tablespace.

... Creating PERFSTAT user

... Installing required packages

... Creating views

... Granting privileges



NOTE:

SPCUSR complete. Please check spcusr.lis for any errors.

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

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

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.

创建成功,没有错误,如果有错误,我们可以查看.lis文件,运行spdrop.sql脚本删除这些对象,然后重新运行spcreate.sql来创建。

我们大概看下spcreate.sql脚本的内容,主要调用了另外3个脚本

$ cat spcreate.sql

--  Create PERFSTAT user and required privileges

@@spcusr                        创建用户,并授权



--

--  Build the tables and synonyms

connect perfstat/&&perfstat_password

@@spctab                         创建表、同义词等对象

--  Create the statistics Package

@@spcpkg                        创建系统包

3、测试statspack

运行statspack.snap 可以产生系统快照,运行两次,然后执行spreport.sql就可以产生一个基于两个时间点的报告。如果正常,说明安装成功。

SQL> execute statspack.snap



PL/SQL procedure successfully completed.



SQL> execute statspack.snap



PL/SQL procedure successfully completed.

SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql              调用spreport.sql生成分析报告

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

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

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

Listing all Completed Snapshots



      Snap

Instance     DB Name    Snap Id   Snap Started    Level Comment

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

test001      TEST001  1 10 Apr 2014 16:33 5

 2 10 Apr 2014 16:34 5

Specify the Begin and End Snapshot Ids

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

Enter value for begin_snap: 1       输入开始快照ID,上面已经列出存在快照

Begin Snapshot Id specified: 1    



Enter value for end_snap: 2          输入结束快照ID

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.





Enter value for report_name:            指定报告名称,如果直接回车,将使用默认名称

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

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

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

End of Report ( sp_1_2.lst )

可以看出报告已经生成,报告生成目录在当前目录

[oracle@backup1 ~]$ pwd

/home/oracle      

[oracle@backup1 ~]$ sqlplus / as sysdba

这时报告生成的文件就保存在/home/oracle 这个位置

$ ls /home/oracle/

app                    oradiag_oracle  pfile.ora~  spauto.lis  spctab.lis

delete_archive_log.sh  pfile.ora       sp_1_2.lst  spcpkg.lis  spcusr.lis

♠规划自动任务

查看下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;

/

这个job任务定义了收集收据的时间间隔,一天有24小时,即1440分钟,那么

1/24 HH,即每小时一次

1/48 M,即每半小时一次

1/144 MI,即每10分钟一次

1/288 MI,即每5分钟一次

可以查看spauto.lis来获取输出信息,spauto.list保存在当前目录

SQL> @$ORACLE_HOME/rdbms/admin/spauto          
执行spauto.sql,建立每1小时执行一次数据收集计划



PL/SQL procedure successfully completed.

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

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

Next scheduled run

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

The next scheduled run for this job is:



       JOB NEXT_DATE NEXT_SEC

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

43 10-APR-14 17:00:00

建立定时任务成功

♠移除定时任务

查询user_jobs视图,查看当前的定时任务

SQL> select job,log_user,priv_user,last_date,next_date,interval from user_jobs;



       JOB LOG_USER  PRIV_USERLAST_DATE NEXT_DATE INTERVAL

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

43 PERFSTAT
 PERFSTAT 10-APR-14 10-APR-14 trunc(SYSDATE+1/24,'HH')

使用dbms_job.remove移除定时任务

SQL> execute dbms_job.remove('43');



PL/SQL procedure successfully completed.

如果采样完成,应该及时移除job任务,不然statspack长时间运行,数据量将非常大,因此会引起宕机。

♠删除历史数据

★删除stats$snapshot数据表中的相应数据,其他表中的数据也会相应地级联删除;

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



MAX(SNAP_ID)

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

  3

SQL> delete from stats$snapshot where snap_id <= 3;



3 rows deleted.

在删除过程中,所有相关的表都被锁定,我们通过以下SQL查询得到

SQL> select a.object_id,a.oracle_username,b.object_name

  2  from v$locked_object a,dba_objects b

  3  where a.object_id=b.object_id;

★sppurge.sql脚本可以用于删除一定范围的采样数据,但是会产生大量归档日志

SQL> @$ORACLE_HOME/rdbms/admin/sppurge



Database Instance currently connected to

========================================

Instance

   DB Id    DB Name    Inst Num Name

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

 4133908770 TEST001      1 test001

Snapshots for this database instance

====================================

      Base-  Snap

 Snap Id   Snapshot Started    line? Level Host   Comment

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

       1  10 Apr 2014 16:33:44 5 backup1

       2  10 Apr 2014 16:34:00 5 backup1

       3  10 Apr 2014 17:00:04 5 backup1

       4  10 Apr 2014 17:24:58 5 backup1

       5  10 Apr 2014 17:25:00 5 backup1

       6  10 Apr 2014 17:25:01 5 backup1

       7  10 Apr 2014 17:25:02 5 backup1

       8  10 Apr 2014 17:25:03 5 backup1

       9  10 Apr 2014 17:25:04 5 backup1

      10  10 Apr 2014 17:25:06 5 backup1



Warning

~~~~~~~

sppurge.sql deletes all snapshots ranging between the lower and

upper bound Snapshot Id's specified, for the database instance

you are connected to.  Snapshots identified as Baseline snapshots

which lie within the snapshot range will not be purged.



It is NOT possible to rollback changes once the purge begins.



You may wish to export this data before continuing.



Specify the Lo Snap Id and Hi Snap Id range to purge

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

Enter value for losnapid: 1                                     输入开始快照ID

Using 1 for lower bound.

Enter value for hisnapid: 5                                    输入结束快照ID

Using 5 for upper bound.

Deleting snapshots 1 - 5.

Number of Snapshots purged: 5 

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

Purge of specified Snapshot range complete.

SQL> commit;



Commit complete.

★我们还可以用sptrunc.sql脚本,截断所有表

♠导出statspack表数据,使用spuexp.par,主要内容如下

file=spuexp.dmp log=spuexp.log compress=y grants=y indexes=y rows=y constraints=y owner=PERFSTAT consistent=y

举例说明:

$ exp perfstat/Pass1234 parfile=$ORACLE_HOME/rdbms/admin/spuexp.par

$ ls /home/oracle/spuex*            可以看到导出的文件及日志文件

/home/oracle/spuexp.dmp  /home/oracle/spuexp.log

♠调整statspack收集门限

statspack有两种类型的收集选项:级别(level)和门限(threshold),其中级别用于控制收集数据的类型,门限用于设置收集的数据的阀值。

statspack有5类快照级别,默认Level5.

①Level 0:包含一般性能统计数据,如等待事件、系统事件、系统统计、回滚段统计、行缓存、SGA、会话、锁、缓冲池统计等。

②Level 5:较Level 0增加了SQL语句收集,SQL语句收集信息保存在stats$sql_summary中。

③Level 6: 从oracle 9i开始引入,除包含Level5的全部信息,增加了SQL执行计划部分信息。

④Level 7:从oracle 9i开始引入,除包含低级别的所有信息之外,还增加段级统计信息(segment level statistics)收集。

⑤Level 10:增加Parent/Children Latch信息统计。这一级别包含低级别收集的所有信息,并且还会将附加的parent/children latch信息记入stats$latch_children字典表中。这个一级别将耗费大量CPU时间

修改级别

SQL> execute statspack.snap(i_snap_level=>0,i_modify_parameter=>'true');



PL/SQL procedure successfully completed.

而快照门限只应用于stats$sql_summary表中获取的SQL语句。因为每一个快照都会收集很多数据,每一行都代表获取快照时数据库中的一个SQL语句,所以stats$sql_summary表会很快成为statspack中最大的表,门限信息存储在stats$statspack_parameter表中,各种门限说明如下:

executions_th:这是SQL语句执行的数量,默认值是100。

disk_reads_tn:这是SQL语句执行的磁盘读入数量,默认值是1000。

parse_calls_th:这是SQL语句执行的解析调用的数量,默认值是1000。

buffer_gets_th:这是SQL语句执行的缓冲区获取的数量,默认值是10000。

任何一个门限值,超过以上参数就会产生一条记录。通过调用statspack.modify_statspack_parameter函数就可以改变门限的默认值。

SQL> execute statspack.modify_statspack_parameter(i_buffer_gets_th=>100000,i_disk_reads_th=>10000);

PL/SQL procedure successfully completed.

Oracle statspack 安装及使用的更多相关文章

  1. Oracle 10g安装教程

    首先下载安装文件,打开后文件结构如图所示: 安装之前请关闭Windows防火墙并断开网络. xp系统下直接双击运行(本经验以XP系统安装为例进行讲述). 如果是在win7上安装,如图:在setup文件 ...

  2. 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

    Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  3. Oracle软件安装目录满的清理方法

    这是Oracle数据库日常运维中很常见的一个场景,安装目录满有时不光会导致无法记录最新数据库的日志信息,导致遇到问题无法查到最新的日志信息,还会引发一些奇怪的问题. 所以日常巡检要保证Oracle的安 ...

  4. CentOS7安装Oracle 11gR2 安装

    概述 Oracle 在Linux和window上的安装不太一样,公司又是Linux系统上的Oracle,实在没辙,研究下Linux下Oracle的使用,oracle默认不支持CentOS系统安装,所以 ...

  5. Oracle RAC安装部署文档

    1.    部署环境步骤 1.1 软件环境 操作系统:CentOS release 6.5(推荐使用5.*的系统)192.168.1.151    racnode1 192.168.1.152    ...

  6. winserver2008 Oracle 11g 安装

    .在Windows Server2008R2上安装Oracle Database 11g Release 2,下载64位的安装程序,地址: 文件1:http://download.oracle.com ...

  7. oracle免安装客户端设置

    对oracle不是很熟悉,就是使用层面的,开发时往往需要连接oracle,又不想单独安装,一般都用个免安装的客户端罢了,再次记录一下自用 1.下载oracle免安装的客户端 下载地址:http://w ...

  8. oracle数据库安装

    1.oracle10g下载完成后,选择“setup.exe”启动安装. 2.oracle主目录位置就是oracle准备安装的位置,称为"Oracle_Home".Oracle安装的 ...

  9. BizTalk 2013R2 WCF-LOB Oracle Adapter安装配置/问题&解决方法

    BizTalk 2013R2 WCF-LOB Oracle Adapter安装配置/问题&解决方法 安装Oracle Adapter 安装Oracle客户端 BizTalk 2013R2 安装 ...

随机推荐

  1. 【笔记】mongodb启动不了:child process failed, exited with error number 100

    今天在启动mongodb的时候,发现起不来,报错:child process failed, exited with error number 100然后先去/var/log/mongo/mongod ...

  2. LA 3708 Graveyard(推理 参考系 中位数)

    Graveyard Programming contests became so popular in the year 2397 that the governor of New Earck -- ...

  3. 安装会声会影x8后打不开的解决方法

    操作系统:Windows 7 症状:双击程序图标后一直停留在购买介绍页,主程序界面一直无法打开 解决方法:删除系统补丁KB3126587和KB3126593

  4. IOS 学习笔记 2015-03-24 OC-API-网络访问-案例一

    // // WPSuggest.h // OC-API-网络访问 // // Created by wangtouwang on 15/3/24. // Copyright (c) 2015年 wan ...

  5. mkpasswd

    -l #      (length of password, default = 7)                   指定密码的长度,默认是7位数 -d #      (min # of dig ...

  6. 为 DataGridView 控件添加行号

    虽然好像不经常用到,不过还是记下来防止以后用到 /// <summary> /// 为 DataGridView 控件添加行号 /// </summary> /// <p ...

  7. JFreeChart入学教程

    JFreeChart入学教程 2011-08-08 14:55:19|  分类: 技术篇 |举报 |字号 订阅   JFreeChart 是一组功能强大.灵活易用的Java绘图API,使用它可以生成多 ...

  8. 加密算法 - RSA算法二

    RSA算法原理(二)  声明: 本文转自阮一峰 (http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html) 有了这些知识, ...

  9. iOS - 打电话, 发短信

    电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...

  10. 个人笔记--Servlet之过滤器实现权限拦截

    一.编写一个Java类实现javax.servlet.Filter接口 package cn.edu.sxu.filter; import java.io.IOException; import ja ...