日期:2014-05-16 浏览次数:20422 次
?Statspack是Oracle自带的强大的性能分析工具。他可以对当前数据库的运行状况作出全面的分析(包括实例信息、PGA顾问信息、命中率、top sql、top 5 wait event等等),是个好东西吧!下面切入正题:
?
1.以sysdba身份登陆,查看数据文件路径
???
C:\Documents and Settings\Administrator>sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 4月 14 10:51:41 2010 Copyright (c) 1982, 2005, Oracle. All rights reserved. 连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options sys@AAA>show user; USER 为 "SYS" sys@AAA>select file_name from dba_data_files; FILE_NAME -------------------------------------------------- D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\USERS01.DBF D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\SYSAUX01.DBF D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\UNDOTBS01.DBF D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\SYSTEM01.DBF D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\BBB.DBF D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\PERFSTAT.DBF 已选择6行。
?
2.创建statspack存储数据的表空间,(注:statspack往往会产生大量的分析数据,所以表空间还是大点为好)。
??
create tablespace perfstat datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\AAA\PERFSTAT.DBF' size 2G;
?
3.运行statspack安装脚本。默认位置在$oracle_home\rdbms\admin\spcreate.sql
??
???
sys@AAA> @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\spcreate.sql ................... 输入 perfstat_password 的值: perfstat ... 输入 default_tablespace 的值: perfstat .......... .......... 输入 temporary_tablespace 的值: temp .......... ..........
?
安装完之后 会自动切换用户到perfstat下:
??
PERFSTAT@AAA> show user; USER is "PERFSTAT"
?
?安装完毕!
?
4.接下来采样分析,设定一个job,每小时执行一次采样。
?? 首先查看当前DB中有没有正在运行的JOB:
??
perfstat@AAA>select job,schema_user,next_date,interval,what from user_jobs; 未选定行
?
创建statspack采样的job,没每个小时采样一次。
??
perfstat@AAA>variable job number; perfstat@AAA>begin 2 dbms_job.submit(:job,'statspack.snap;',trunc(sysdate+1/24,'hh24'),'trunc(sysdate+1/24,''hh24'')'); 3 commit; 4 end; 5 / PL/SQL 过程已成功完成。
?
查看当前正在运行的job有哪些?
??
perfstat@AAA>select job as j,schema_user,next_date,interval,what from user_jobs; J SCHEMA_USER NEXT_DATE INTERVAL WHAT ---------- ------------------------------ -------------- ---------- ---------- 1 PERFSTAT 14-4月 -10 trunc(sysd statspack. ate+1/24,' snap; hh24')
?
?
5.由于statspack的采集和分析会做很多DB的分析,产生大量的分析数据,所以频繁的采样肯定会消耗系统性能,特别是在生产库中,所以当你建立了上面每小时执行一次的那个job,请务必在不需要的时候停止它。不然的话,这个失误可能会是致命的( statspack job每小时都会跑,永不停的跑下去,呵呵。),尤其在生产库中。
?
明天凌晨,系统比较清闲,采样已经没多大意义(采样分析的最终目的是分析高峰时段的系统瓶颈),所以停止这个job.
???
perfstat@AAA>variable job number; perfstat@AAA>begin 2 dbms_job.submit(:job,'dbms_job.broken(1,true);',trunc(sysdate+1),'null'); 3 commit; 4 end; 5 / PL/SQL 过程已成功完成。
?
?
6.几个小时候后,看看生成的哪些快照。
perfstat@AAA>select snap_id,snap_time,startup_time from stats$snapshot; SNAP_ID SNAP_TIME STARTUP_TIME ---------- -------------- -------------- 1 14-4月 -10 14-4月 -10 2 14-4月 -10 14-4月 -10
?
7.设定任意两个快照,产生这段时间内的性能分析报告(此时需要跑spreport脚本,路径和刚才那个脚本一致)。
perfstat@AAA>@D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\spreport.sql Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance ----------- ------------ -------- ------------ 1858440386 AAA 1 aaa Instances in this Statspack schema ~~~~~~~~