Oracle性能分析工具Statpack安装使用详解
   
文件版本:
V1.0
文件编号:
发布日期:
2015-03-05
    制:
程万超
    核:
 
    准:
修订记录:
修订版本号
修订人
修订日期
修订描述
V1.0
程万超
2014-12-17
新建
简介
Oracle Statspack 是用来诊断数据库性能的强有力的工具,通过Statspack 我们很容易的确定Oracle的所有瓶颈,记录数据库的性能状态。
安装步骤
一、Statpack原理:
1.运行oracle自带脚本,生成一系列的统计表。
2.生成快照,采样。
3.根据快照生成报告。
二、安装准备
1.检查部分参数值
--job_queue_process:取值范围为0到1000,总共可创建多少个job进程,为了能够建立自动任务,执行数据收集,此参数大于零
alter system set job_queue_processess=6;
---timed_statistics,设置为true,使收集的时间信息存储在V$sessstats和V$sysstats等动态性能视图中,但会消耗资源,可以在使用Satspack之前设为true,采样过后,把该参数动态修改为false.
alter system set timed_statistics=true;
2.  脚本
truncate的数据如何恢复
使用此功能,需要运行oracle自带脚本,在数据库中生成一系列的表和视图,用于收集各种信息。脚本位于%oracle_home%\rdbms\admin(224数据库的该目录为/oracle/app/product/10.2.0/Db_1/rdbms/admin)目录下,oracle816下是一组以stat开头的文件,以后的版本是一组以sp开头的文件。
三、安装
    1.shell中切换到oracle用户:su - oracle
2.以sysdba身份登录sqlplus。
9i及以后版本,可以用sys用户以sysdba身份登录:sqlplus / as sysdba
(最好转到脚本所有目录%oracle_home%\rdbms\admin,便于执行脚本)
3.创建表空间,用于保存采样数据
create  tablespace  perfstat  datafile  '/oradata/xdgl/perfstat.dbf(表空间存储路径)'  size 100m;
Statspack的报表数据还是相当占空间的,特别是在多次连续采样的情况下,所以不能太小,最小100M,否则创建对象会失败。
查询表空间:select file_name from dba_data_files;
4.运行脚本,安装statspack
在sqlplus中执行命令:
@%oracle_home%\rdbms\admin\spcreate.sql
--脚本会创建用户perfstat,需要指定此用户密码。
输入 perfstat_password 的值:  perfstat
--需要输入用户perfstat使用的表空间:指定新建的表空间即可。
输入 default_tablespace 的值:   perfstat
--需要指定用户perfstat使用的临时表空间。
输入 temporary_tablespace 的值:  tmp10
--安装成功,可以看到如下信息:
Creating
程序包已创建。
没有错误。
Creating Package
程序包体已创建。
没有错误。
NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.
--查看错误信息
NT下:
host find "ORA-" *.LIS
host find "err-" *.LIS
Unix下:
grep ORA- *.lis
grep err *.lis
如果出现错误,可以运行脚本删除相关内容:@%oracle_home%\rdbms\admin\spdrop.sql
(注意:也要在sysdba下运行脚本删除相关对象)
然后再重新运行脚本安装。
这个安装过程创建了一系列的表,用于存入采样数据。
查看新建表:
select dt.table_name from dba_tables dt where dt.owner='PERFSTAT'
conn perfstat/perfstat
select table_name from user_tables;
安装完成后,系统会自动切换到perfstat用户下。
四、测试statpack
运行statspack.snap可以产生系统快照,运行两次,产生两次快照。
SQL> execute statspack.snap;
PL/SQL 过程已成功完成。
SQL> execute statspack.snap;
PL/SQL 过程已成功完成。
然后执行脚本@%oracle_home%\rdbms\admin\spreport.sql就可以生成基于两个时间点的报告。
--需要输入起始快照ID和结束快照ID,以及报告文件名。
(快照ID必须存在)
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入 begin_snap 的值:  1
Begin Snapshot Id specified: 1
输入 end_snap 的值:  13
End   Snapshot Id specified: 13
输入 report_name 的值:  e:\
--查看产生的快照
select t.snap_id,to_char(t.snap_time,'yyyy-mm-dd hh:mi:ss') as S_Time,t.snapshot_exec_time_s from STATS$SNAPSHOT t;
五、规划自动任务
安装之后,我们就可以设置定时任务,定时采样,收集数据。
使用脚本spauto.sql来定义自动任务。
spauto.sql在关键内容:
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;
执行spquto,就建立了一个每小时执行一次的数据收集计划。
这个Job任务定义了收集数据(执行statspack.snap)的时间间隔为1小时:
一天24小时,1440分钟-->
1/24,'HH' 每小时一次
1/48,'MI' 每半小时一次
1/144,'MI' 每10分钟一次
1/288,'MI' 每5分钟一次
关于采样间隔,通常建议1小时,如有特殊需要,可以设置更短,如半小时。但不推荐更短。因为statpack的执行本身需要消息资源,太短的采样对系统的性能会产生较大的影响(甚至会使statspack的执行出现在采样数据中)
六.生成报告
同测试一样
用perfstat用户连接
执行脚本%oracle_home%\rdbms\admin\spreport.sql,输入起始快照ID和结束快照ID,以及报告文件名,生成statspack报告。
注:一次statspack报告不能跨越一次停机,但是之前或之后的连续区间,收集的信息依然有效,你可以选择之前或之后的采样生成report.
如果中间停过机,会收到以下错误信息:
第 1 行出现错误:
ORA-20200: The instance was shutdown between snapshots 1 and 31
ORA-06512: 在 line 48
七、后续处理
1,移除定时任务
当你完成一个采样报告,你应该及时移除这个job任务。遗漏一个无人照顾的job是非常危险的……
--查看任务并移除任务
select job, next_date, next_sec, what from user_jobs;
execute ve('ID')
2,删除历史数据
1),删除采样数据
只要删除stat$snapshot数据表中的相应数据,其他表中的数据会相应的级连删除。
select max(snap_id) from stats$snapshot;
delete from stats$snapshot where snap_id<=166;
删除过程中,你可以看到所有相关的表都被锁定了。
select a.object_id, a.oracle_username, b.object_name
from v$locked_object a,dba_objects b
where a.object_id=b.object_id
2),truncate统计信息表:使用脚本sptrunc.sql删除所有的采样数据但保留statspack的库结构。
如果有大量数据,直接delete采样数据是非常缓慢的。使用脚本sptrunc.sql可以快速的删除所有统计信息。
查看脚本,可以看出是用truncate table截掉所有相关的表中的内容。
truncate table STATS$FILESTATXS;
truncate table STATS$TEMPSTATXS;
...
delete from STATS$DATABASE_INSTANCE;
3),删除statspack所有数据和各种对象:使用脚本spdrop.sql。全部删除,不留痕迹!但有表空间在~~
八、调整statspack的收集门限
statspack有两种类型的收集选项
level--级别:控制收集数据的类型
threshold--门限:设置收集的数据阀值
都保存在表stats$statspack_parameter中

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。