服务器 频道

statspack应用指南

  【IT168 服务器学院】参考:《statspack使用指南-v3[1].0.pdf》。

  一. 系统参数

  1. job_queue_processes

  [alter system set job_queue_processes = 6 scope=both;]

  2. timed_statistics

  alter system set timed_statistics = true scope=memory;

  二. 安装Statspack

  安装Statspack 需要用internal 身份登陆,或者拥有SYSDBA(connect / as sysdba)权限的用户登陆。需要在本地安装或者通过telnet 登陆到服务器。

  在Oracle8.1.6 版本中运行statscre.sql;在Oracle8.1.7 以上版本中运行spcreate.sql。

  首先登陆到数据库,最好转到$ORACLE_HOME/RDBMS/ADMIN 目录,这样我们执行脚本就可以方便些。

  SQL> @spcreate

  三. 测试安装好的Statspack

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

  四. 规划自动任务

  Statspack 正确安装以后,我们就可以设置定时任务,开始收集数据了。可以使用spatuo.sql 来定义自动任务。

  先来看看spauto.sql 的关键内容:

  dbms_job.submit(:jobno, ''statspack.snap;'',trunc(sysdate+1/24,''HH''),trunc(SYSDATE+1/24,''''HH'''')'', TRUE, :instno);

  这个job 任务定义了收集数据的时间间隔:

  一天有24 个小时,1440 分钟,那么:

  1/24 HH 每小时一次

  1/48 MI 每半小时一次

  1/144 MI 每十分钟一次

  1/288 MI 每五分钟一次

  SQL> @spauto

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

  五. 生成分析报告

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

  SQL> @spreport

  一个statspack 的报告不能跨越一次停机,但是之前或之后的连续区间,收集的信息依然有效。你可以选择之前或之后的采样声称report。

  六. 移除定时任务

  execute dbms_job.remove(1)

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

  七. 删除历史数据

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

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

  MAX(SNAP_ID)

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

  166

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

  143 rows deleted

  你可以更改snap_id 的范围以保留你需要的数据。

  在以上删除过程中,你可以看到所有相关的表都被锁定。

  Oracle 还提供了系统脚本用于Truncate 这些统计信息表,这个脚本名字是: sptrunc.sql (8i、9i 都相同)该脚本主要内容如下,里面看到的就是statspack 相关的所有系统表:

  如果采样了大量的数据,直接Delete 是非常缓慢的,可以考虑使用上述SQL 截断所有表。

  调整STATSPACK 的收集门限

  Statspack 有两种类型的收集选项:

  级别(level):控制收集数据的类型

  门限(threshold):设置收集的数据的阈值。

  1.级别(level)

  Statspack 共有三种快照级别,默认值是5

  a.level 0: 一般性能统计。包括等待事件、系统事件、系统统计、回滚段统计、行缓存、SGA、会话、

  锁、缓冲池统计等等。

  b.level 5: 增加SQL 语句。除了包括level0 的所有内容,还包括SQL 语句的收集,收集结果记录在

  stats$sql_summary 中。

  c.level 10: 增加子锁存统计。包括level5 的所有内容。并且还会将附加的子锁存存入

  stats$lathc_children 中。在使用这个级别时需要慎重,建议在Oracle support 的指导下进行。

  可以通过statspack 包修改缺省的级别设置

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

  通过这样的设置,以后的收集级别都将是0 级。

  如果你只是想本次改变收集级别,可以忽略i_modify_parameter 参数。

  SQL>execute statspack.snap(i_snap_level=>10);

  2.快照门限

  快照门限只应用于stats$sql_summary 表中获取的SQL 语句。

  因为每一个快照都会收集很多数据,每一行都代表获取快照时数据库中的一个SQL 语句,所以

  stats$sql_summary 很快就会成为Statspack 中最大的表。

  门限存储在stats$statspack_parameter 表中。让我们了结一下各种门限:

  a. executions_th 这是SQL 语句执行的数量(默认值是100)

  b. disk_reads_tn 这是SQL 语句执行的磁盘读入数量(默认值是1000)

  c. parse_calls_th 这是SQL 语句执行的解析调用的数量(默认值是1000)

  d. buffer_gets_th 这是SQL 语句执行的缓冲区获取的数量(默认值是10000)

  任何一个门限值超过以上参数就会产生一条记录。

  通过调用statspack.modify_statspack_parameter 函数我们可以改变门限的默认值。

  例如:

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

 

0
相关文章