Oracle 提供的 statspack 是一个很强大的工具,通过 Statspack ,可以收集系统信息,诊断数据库故障,也方便" name="description" />
系统环境:redhat 2.1
数据库oracle for linux 9.2.0.1
安装及测试参考盖国强写的《statspack使用指南》
在数据库管理中,MILY: 'Courier New'">Oracle提供的statspack是一个很强大的工具,通过Statspack,可以收集系统信息,诊断数据库故障,也方便第三方技术支持进行远程阅读和建议。
Oracle Statspack 从Oracle8.1.6开始被引入Oracle,并马上成为DBA和Oracle专家用来诊断数据库性能的强有力的工具。通过Statspack我们可以很容易的确定Oracle数据库的瓶颈所在,记录数据库性能状态。因此了解和使用Statspack对于DBA来说至关重要。
在数据库中Statspack的脚本位于$Oracle_HOME/RDBMS/ADMIN目录下,对于Oracle8.1.6,是一组以stat开头的文件;对于Oracle8.1.7,是一组以sp开头的文件。
在Oracle8.1.6中,Statspack第一次发布,但是你也可以在以下链接找到可用于Oracle80~Oracle8.1.5的版本。
http://www.Oracle.com/oramag/Oracle/00-Mar/index.html?o20tun.html
http://www.Oracle.com/oramag/Oracle/00-Mar/index.html?statspack-other.html
在816以前的版本使用Statspack,你需要使用statscbps.sql脚本建立一个v$buffer_pool_statistics视图,该脚本包含在以上链接下载的tar文件中。
访问该链接,你可能需要一个OTN帐号,申请该帐号是免费的。
在Statspack发布之前,我们通常能够使用诊断数据库的工具是两个脚本UTLBSTAT.SQL和UTLESTAT.SQL,BSTAT/ESTAT是一个非常简单的性能诊断工具。UTLBSTAT获得开始时很多V$视图的快照,UTLESTAT通过先前的快照和当前视图生成一个报表。实际上通过这个报表我们很难读出或者解释系统性能方面的问题。Statspack改变了这一切,通过连续的数据收集,Statspack能给我们提供至关重要的趋势分析。这是一个巨大的进步。
下面我们来讲一讲Statspack的安装,配置,使用,解读。
一、系统参数
安装之前要确认两个parameter的取值。
1、job_queue_processes: 为了能够建立自动任务,执行数据收集,该参数需要大于0。你可以在初试化参数文件中修改该参数(使该参数在重起后以然有效)。 该参数可以在系统级动态修改(重起后失效)。
SQL> alter system set job_queue_processes = 6;
System altered
在Oracle9i 当中,可以指定范围,如 both,这样该修改在当前及之后保持有效(仅当你使用spfile
时,如果在9i 中仍然使用pfile,那么更改方法同8i 相同):
SQL> alter system set job_queue_processes = 6 scope=both;
系统已更改。
2、timed_statistics
收集操作系统的计时信息,这些信息可被用来显示时间等统计信息、优化数据库和 SQL 语句。要防止因从操作系统请求时间而引起的开销,请将该值设置为False。
使用statspack 收集统计信息时建议将该值设置为 TRUE,否则收集的统计信息大约只能起到10%的作用,将timed_statistics 设置为True 所带来的性能影响与好处相比是微不足道的。
该参数使收集的时间信息存储在在V$SESSTATS 和V$SYSSTATS 等动态性能视图中。
Timed_statistics 参数可以在实例级进行更改
SQL> alter system set timed_statistics = true;
System altered
SQL>
如果你担心一致启用timed_statistics 对于性能的影响,你可以在使用statspack 之前在system 更改,采样过后把该参数动态修改成false。
二. 安装Statspack安装
Statspack 需要用internal 身份登陆,或者拥有SYSDBA(connect / as sysdba)权限的用户登陆。需要在本地安装或者通过te.net 登陆到服务器。
在Oracle8.1.6 版本中运行statscre.sql;在Oracle8.1.7 版本中运行spcreate.sql。
首先登陆到数据库,最好转到$ORACLE_HOME/RDBMS/ADMIN 目录,这样我们执行脚本就可以方便些。
注:在Oracle9i 中,不存在internal 用户,可以使用sys 用户以sysdba 身份连接:
$sqlplus /nolog
SQL>select file_name from dba_data_files;
创建存储数据的表空间,如果采样间隔较短,周期较长,打算长期使用,那么你可能需要一个大一点的表空间,如果每个半个小时采样一次,连续采样一周,数据量是很大的。本例创建一个500M 的测试表空间。注意:这里创建的表空间不能太小,如果太小创建对象会失败,至少需要建立100M 表空间,如果打算长期使用,可以建立稍大的表空间,本例创建500M LMT 表空间。
SQL> create tablespace perfstat
2 datafile 'd:\oracle\oradata\eygle\perfstat.dbf'
3 size 500M
4 extent management local;
接下来我们就可以开始安装Statspack 了。这期间会提示你输入缺省表空间和临时表空间的位置,输入我们为perfstat 用户创建的表空间和你的临时表空间。
SQL>@spcreate
注意:在statspack 创建过程中,当提示输入口令时,你可以输入一个明文口令,但是如果输入口令不符合规范(如123 或以数字开头的口令),创建会失败。输入口令时可以暂时输入:perfstat ,稍后可以更改。
$ ls *.lis
spauto.lis spcpkg.lis spctab.lis spcusr.lis spdtab.lis spdusr.lis
$ grep ORA- *.lis
$ grep err *.lis
spcpkg.lis:SPCPKG complete. Please check spcpkg.lis for any errors.
spctab.lis:SPCTAB complete. Please check spctab.lis for any errors.
spcusr.lis:SPCUSR complete. Please check spcusr.lis for any errors.
spdtab.lis:SPDTAB complete. Please check spdtab.lis for any errors.
spdusr.lis:SPDUSR complete. Please check spdusr.lis for any errors.
在这一步,如果出现错误,那么你可以运行spdrop.sql 脚本来删除这些对象。然后重新运行spcreate.sql 来创建这些对象。运行 SQL*Plus, 以具有SYSDBA 权限的用户登陆:
SQL> @spdrop.sql
三. 测试安装好的Statspack
运行statspack.snap 可以产生系统快照,运行两次,然后执行spreport.sql 就可以生成一个基于两个时间点
的报告。
如果一切正常,说明安装成功。
SQL>execute statspack.snap
PL/SQL procedure suclearcase/" target="_blank" >ccessfully completed.
SQL>execute statspack.snap
PL/SQL procedure successfully completed.
这里是因为只做过两次statspack.snap,end_snap=100的取值太大,看这个:
SQL> select snap_id from stats$snapshot;
SNAP_ID
----------
1
2
3
4
5
SQL>@spreport.sql
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入 begin_snap 的值: 1
Begin Snapshot Id specified: 1
输入 end_snap 的值: 5 (多少个快照) 当时我就发生这个错误,输入100,后出错,查快照没有这么多造成的
End Snapshot Id specified: 100
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 的值: D:/oracle/statspack/rpt0913.txt (输入报表名字)
..................
..................
ERROR: End Snapshot Id specified does not exist for this database/instance
WARNING: timed_statitics setting changed between begin/end snaps: TIMINGS ARE IN
VALID
..................
..................
$more rpt0913.txt