1.创建PERFSTAT用户
sqlplus “/ as sysdba”
SQL> @?/rdbms/admin/spcreate
运行该脚本时系统会提示输入PERFSTAT用户的缺省表空间、临时表空间和Statspack对象创建在的表空间。脚本运行完毕就生成了一个PERFSTAT用户,授权并且创建了一些Statspack对象包括表和包。
perfstat用户缺省口令是perfstat从安全性的角度管理员应该修改它的密码。
2.采集系统运行信息,生成快照
SQL> connect perfstat/perfstat
SQL> execute statspack.snap;
对于OPS/RAC环境,你需要在你想诊断的实例上收集数据。
执行该脚本后会把数据库现在的性能参数值收集存入STATSPACK表中,该快照是一个基本快照,作为与以后快照的比较使用。
注意:为了更好地诊断数据库性能,timed_statistics参数要设为TRUE,可以在参数文件中指定或用ALTER SYSTEM SET timed_statistics=TRUE命令动态修改。(9i默认为TRUE)
看快照信息的查询命令
alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss';
select * from stats$snapshot;
select snap_id,snap_time,dbid,instance_number from stats$snapshot;
3.自动收集统计数据
有两种使用方式,操作系统方式或数据库方式。
通过操作系统方式定时使用at(NT)或cron(Unix),通过数据库定时使用dbms_job包。
使用dbms_job包之前先要在参数文件中设定job_queue_processes值大于0,在perfstat用户下运行@?/rdbms/admin/spauto.sql
注意:如果是OPS/RAC环境需要在两个节点上设置job_queue_processes和运行spauto.sql脚本。
手工执行一次job的命令如下:
execute dbms_job.run(1);
删除一个job的命令如下:
execute dbms_job.remove(1);
查询系统中使用的job的情况
select job,log_user,interval,instance,last_date,last_sec from dba_jobs;
4.改变收集统计数据的间隔时间(即执行快照时间)
execute dbms_job.interval(1,'SYSDATE+(1/12)');
execute dbms_job.interval(41,'SYSDATE+(1/24)');
execute dbms_job.interval(21,'SYSDATE+(1/24)');
注意“1”是job号,这是一个不同系统会不同的数字。在运行statsauto.sql时会显示我们设定的job号。可以运行以下SQL语句进行查询:
select job, next_date, next_sec from user_jobs where job = :jobno;
JOB NEXT_DATE NEXT_SEC
---------- --------- ----------------
1 10-AUG-05 17:00:00
1/12代表1/12天即2小时。
5.生成一个性能统计报告
SQL> connect perfstat/perfstat
SQL> @?/rdbms/admin/spreport
运行该脚本时系统提示输入起始快照ID号、结束快照ID号以及REPORT文件名称。
注意:起始快照ID号、结束快照ID号之间数据库不能关闭和重启。否则系统会报错。
6. 维护操作
a.卸载statspack
SQL>connect / as sysdba
SQL>$ORACLE_HOME/rdbms/admin/spdrop.sql
用sql*plus 执行脚本,用svrmgrl(8.1.7)会导致失败
如果安装失败,一定要
用反安装程序删除
b.删除不再需要的数据(ID1-ID2)
SQL>@?/rdbms/admin/sppurge
c.删除所有的数据
SQL>@?/rdbms/admin/sptrunc