Statspack是一款功能强大的免费的oracle自带的性能分析工具。需要用具有sysdba权限的用户登陆进行安装。
注意:statpack可以很好的应用,它记录的信息,可以让我们了解最具体的占用cpu的sql语句,我们把这些sql收集起来给ap去分析
在DB上创建statspace以方便找出使系统忙碌的SQL
Oracle10g 对于系统性能的诊断主要通过AWR来收集数据,使用ADDM来作分析报告。
(10g之前是statspack,10g之后是AWR)
主要参考了Eygle的Spatspack专题 http://www.eygle.com/archives/2004/11/statspack_list.html
以下只是SP的简单操作,一些具体的分析和处理可以查看eygle的statspack专题,当然statspack有n多专业的书放在那边的,可见其复杂程度。前几天定的 《基于成本的Oracle优化法则》应该也快到了,估计里面很多性能的指标值都是从statspack里面抓出来的
需要进一步的分析statspack,当然在10g里面应该是ADDM分析报告(这个东西要简单一些了,不过万变不离其中,估计11g里面的东西会更easy,不过11g还没来得及玩)
1. 在运行SP的scripts之前,几个参数需要注意一下:
(1) job_queue_processes 不等于0:为了之后能正常的执行计划
(2) timed_statistics:设置为false:收集操作系统的计时信息,这些信息可被用来显示时间等统计信息、优化数据库和 SQL 语句。要防止因从操作系统请求时间而引起的开销,请将该值设置为False
1. 安装procedure (statspack)
1)先创建默认的tablespace perfstat(创建存储SP的表空间,大小根据实际需要);
create tablespace perfstat datafile '/oracle/oradata/thaec/perfstat.dbf' size 20m;
2)创建SP
查看创建SP需要的脚本
> ls sp* (以sp开头的是for statspack使用的)
sql>@?/rdbms/admin/spcreate --创建 SP
在创建过程中要求填入用户 perfstat的密码,和默认表空间和默认临时表空名
//执行statspack的安装包。该文件物理存放于$oracle_home\rdbms\admin\spcreate.sql
//安装过程被记录在spcpkg.lis
//如果安装过程中出现错误,可以通过执行@spdrop删除相关对象,然后检查日志,确认出错原因,再次执行@spcreate进行创建。
首先生成两次采样:
SQL>execute statspack.snap
PL/SQL procedure successfully completed.
SQL>execute statspack.snap
PL/SQL procedure successfully completed.
1、 执行@spreport生成报告(该文件物理存放路径与spcreate相同)。
从生成采样到生成报告的大致操作步骤就是这样,当然我们这样操作在实际业务过程中是不现实的,主要的问题有以下几条:
1、采样生成间隔时间太短,未必能真正体现出服务器在业务实际运行中的状态,并且时间太短的情况下,可能statspack运行本身都会对分析结果的生成造成影响,毕竟statspack也是在运行一堆sql,也会被计入统计范围内。
2、采样的频度太低,以上述为例仅执行两次,以此为基准生成的报告恐怕也真的是仅供参考。
解决上述问题,我们按照如下步骤实施:
perfstat帐号下
(1) 查看当前job:SQL> select job,schema_user,next_date,interval,what from user_jobs
(2) 看看采样生成的怎么样了:SQL> select snap_id,snap_time,startup_time from stats$snapshot;
1、创建一个job,我们设定其每个小时自动收集一次采样。
Variable job number;
begin dbms_job.submit(:job,'statspack.snap;',trunc(sysdate+1/24,'hh24'),'trunc(sysdate+1/24,''hh24'')');
commit;
end;
/
2、考虑到采样结果还是相当占空间,不能让其一直执行下去,我们再创建一个job,让它在明天凌晨自动停止采样job的执行。
Variable job number;
begin
dbms_job.submit(:job,'dbms_job.broken(44,true);',trunc(sysdate+1),'null');
commit;
end;
/
分为三种情况:
l 如果你想删除某些statspack收集的历史采样,直接通过delete,指定snap_id即可:
SQL> delete stats$snapshot where snap_id=1;
如果你想删除所有的采样数据但保留statspack的库结构,oracle也提供了脚本,执行@sptrunc即可。该脚本是通过truncate删除各表记录,效率比delete高很多。
sql>connect perfstat/perfstat
sql >@?/rdbms/admin/sptrunc
l 如果你想彻底干掉本机安装的statspack的话,那就更简单了,执行@spdrop,干净不留痕:)。
移除package:
sql>connect perfstat/perfstat
sql >@?/rdbms/admin/spdrop
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23490498/viewspace-676438/ ,如需转载,请注明出处,否则将追究法律责任。