ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle Statspack Report

Oracle Statspack Report

原创 Linux操作系统 作者:tolywang 时间:2007-10-16 00:00:00 0 删除 编辑

1. 1. 设置参数

job_queue_processes 为了能够建立自动任务,执行数据收集,该参数需要大于0你可以在初试化参数文件中修改该参数(使该参数在重起后以然有效)


timed_statistics 收集操作系统的计时信息,这些信息可被用来显示时间等统计信息、优化数据库和 SQL 语句。要防止因从操作系统请求时间而引起的开销,请将该值设置为False

使用statspack收集统计信息时建议将该值设置为 TRUE,否则收集的统计信息大约只能起到10%的作用,将timed_statistics设置为True所带来的性能影响与好处相比是微不足道的。该参数使收集的时间信息存储在在V$SESSTATSV$SYSSTATS等动态性能视图中. timed_statistics 可以alter system, alter session 动态修改。 如果担心timed_statistics 对性能的影响 (影响很小),可以收集信息完毕之后直接更改回来。

2. 2. 安装Statspack 需要internal SYSDBA权限的用户登入。

Oracle8.1.6版本中运行statscre.sql;Oracle8.1.7版本中运行spcreate.sql 目录是: $ORACLE_HOME/rdbms/admin/ . 最好能到本目录下登入sqlplus 然后执行两个脚本。

3. 3. 创建存储数据的表空间,如果采样间隔较短,周期较长,打算长期使用,那么你可能需要一个大一点的表空间,如果每个半个小时采样一次,连续采样一周,数据量是很大的。本例创建一个500M的测试表空间。

SQL> create tablespace perfstat datafile 'd:oracleoradataeygleperfstat.dbf' size 500M extent management local;

4. 运行spcreate.sql

SQL> @spcreate

Specify PERFSTAT user's defaulttablespace

输入 default_tablespace 的值:perfstat

Using perfstat for the default tablespace

用户已更改。

用户已更改。

Specify PERFSTAT user's temporary tablespace

输入 temporary_tablespace 的值:temp

注意:statspack创建过程中,当提示输入口令时,你可以输入一个明文口令,但是如果输入口令不符合规范(123或以数字开头的口令),创建会失败。

... Creating PERFSTAT user ...

Choose the PERFSTAT user's password.

Not specifying a password will result in the installation FAILING

Specify PERFSTAT password

输入 perfstat_password 的值: 123

123

PL/SQL 过程已成功完成。

create user perfstat identified by 123

*

ERROR 位于第 1 :

ORA-00988: 缺少或无效口令

如果安装成功,你可以看到如下的输出信息:

….

Creating Package STATSPACK...

程序包已创建。

没有错误。

Creating Package Body STATSPACK...

程序包主体已创建。

没有错误。

NOTE:

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

你可以查看.lis文件查看安装时的错误信息。

在这一步,如果出现错误,那么你可以运行spdrop.sql脚本来删除这些对象。然后重新运行spcreate.sql来创建这些对象。运行 SQL*Plus, 以具有SYSDBA 权限的用户登陆:

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

SQL>execute statspack.snap

PL/SQL procedure successfully completed.

SQL>execute statspack.snap

PL/SQL procedure successfully completed.

SQL>@spreport.sql

注意: 可能得到如下错误,bug .

SQL> exec statspack.snap;

BEGIN statspack.snap; END;

*

ERROR at line 1:

ORA-01401: inserted value too large for column

ORA-06512: at "PERFSTAT.STATSPACK", line 978

ORA-06512: at "PERFSTAT.STATSPACK", line 1612

ORA-06512: at "PERFSTAT.STATSPACK", line 71

ORA-06512: at line 1

这是Oracle的一个BugBug1940915

Bug8.1.7.3后修正。

这个问题只会出现在多位的字符集,需要修改spcpkg.sql脚本,$ORACLE_HOME/rdbms/admin/spcpkg.sql"substr" 修改为 "substrb",然后重新运行该脚本。

6. 安装完成之后我们开始设置定时任务,收集数据。可以使用spatuo.sql来定义自动任务。

spauto.sql的关键内容

dbms_job.submit(:jobno, 'statspack.snap;',

trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);

1/24

HH每小时一次

1/48

MI每半小时一次

1/144

MI每十分钟一次

1/288

MI每五分钟一次

例如:

dbms_job.submit(:jobno, 'statspack.snap;',

trunc(sysdate+1/48,'MI'), 'trunc(SYSDATE+1/48,''MI'')', TRUE, :instno);

30分钟执行一次的数据收集计划。你可以查看spauto.lis来获得输出信息

关于采样间隔,我们通常建议以1小时为时间间隔,对于有特殊需要的环境,可以设置更短的,如半小时作为采样间隔,但是不推荐更短。因为statspack的执行本身需要消耗资源,对于繁忙的生产系统,太短的采样对系统的性能会产生较大的影响(甚至会使statspack的执行出现在采样数据中)。

7. 调用spreport.sql可以生成分析报告:

SQL> @spreport

注意: 一个statspack的报告不能跨越一次停机,否则会出现错误。 但是之前或之后的连续区间,收集的信息依然有效。你可以选择之前或之后的采样生成report

8当你完成了一个采样报告,你应该及时移除这个job任务,在生产环境中,遗漏一个无人照顾的job是非常危险的,如果statspack运行一个星期,采样的数据量是非常惊人的。有的生产企业因疏忽而当机!

移除一个定时任务,可以如下操作:

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

JOB LOG_USERLAST_DATENEXT_DATEINTERVAL

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

22 PERFSTAT 2002-12-5:14:33:26 2002-12-5 14:43:00 trunc(SYSDATE+1/144,'MI')

SQL> execute dbms_job.remove('22')

删除stats$snapshot数据表中的相应数据,其他表中的数据会相应的级连删除:

Oracle还提供了系统脚本用于Truncate这些统计信息表,这个脚本名字是: sptrunc.sql (8i9i都相同) 如果采样了大量的数据,直接Delete是非常缓慢的,可以考虑使用上述SQL截断所有表。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-84955/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle , MySQL, SAP IQ, SAP HANA, PostgreSQL, Tableau 技术讨论,希望在这里一起分享知识,讨论技术,畅谈人生 。

注册时间:2007-12-10

  • 博文量
    5595
  • 访问量
    13383107