oracle statspack 安装及使用<->

oracle statspack 工具从oracle 8.1.6开始被引用,从oracle 10G开始,oracle推出新的工具AWR(Automatic Workload Repository)。

statspack是免费的,AWR工具很多特性是需要付费的。

在数据库中statspack初始并未安装,要使用,需要通过一系列脚本来安装,statspack的脚本文件位于$ORACLE_HOME/rdbms/admin目录下,对于oracle 8.1.6来说,脚本是一组以stat开头的文件;对于oracle 8.1.7以及以后的版本,是sp开头。

在statspack未发布之前,常用于诊断数据库的工具是两个脚本UTLBSTAT.SQL和UTLESTAT.SQL。BSTAT/ESTAT是一个非常简单的性能诊断工具,BSTAT获取开始时很多v$视图快照,ESTAT通过先前的快照和当前视图生成一个报表,该报表相当于statspack中的两个采样点。

安装statspack

1、设置系统参数

SQL>alter system set job_queue_processes=1000 scope=both;

SQL> show parameter job_queue_processes

NAME     TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes     integer1000

job_queue_processes改参数需要大于0,该参数可以在参数文件中修改(重启后依然有效),也可以在系统级动态修改(重启失效)

检查timed_statistics是否为true,oracle 9i开始,该值默认为true

SQL> show parameter timed_statistics;

NAME     TYPEVALUE
------------------------------------ ----------- ------------------------------
timed_statistics     booleanTRUE

如果timed_statistics为false,可以通过以下方式更改

SQL>alter system set timed_statistics=true scope=both;

2、安装statspack

安装statspack需要使用sys以sysdba的身份安装,在oracle 9i之前,需要用internal用户安装(9i后已取消internal用户)

因为statspack需要一定的存储空间,所以最好建立独立的表空间,创建的表空间不能太小,至少100M,否则创建 对象会失败,根据实际情况,可以适当设置表空间大小。

SQL>conn / as sysdba

SQL> create tablespace statperf
  2  datafile '/home/oracle/app/statperf.dbf' size 200M
  3  extent management local;


Tablespace created.

查看脚本创建文件

$cd $ORACLE_HOME/rdbms/admin

$ ls  sp*
spauto.sql    spctab.sql  spdtab.sql    sprepins.sql  sptrunc.sql  spup816.sql
spawrrac.sql  spcusr.sql  spdusr.sql    spreport.sql  spuexp.par   spup817.sql
spcpkg.sql    spdoc.txt   sppurge.sql   sprepsql.sql  spup102.sql  spup90.sql
spcreate.sql  spdrop.sql  sprepcon.sql  sprsqins.sql  spup10.sql   spup92.sql


SQL> @$ORACLE_HOME/rdbms/admin/spcreate

Choose the PERFSTAT user's password
-----------------------------------
Not specifying a password will result in the installation FAILING

Enter value for perfstat_password:                          输入密码,安装过程,自动创建用户perfstat

Choose the Default tablespace for the PERFSTAT user
---------------------------------------------------
Below is the list of online tablespaces in this database which can
store user data.  Specifying the SYSTEM tablespace for the user's
default tablespace will result in the installation FAILING, as
using SYSTEM for performance data is not supported.

Choose the PERFSTAT users's default tablespace.  This is the tablespace
in which the STATSPACK tables and indexes will be created.

TABLESPACE_NAME       CONTENTS  STATSPACK DEFAULT TABLESPACE
------------------------------ --------- ----------------------------
FBRA       PERMANENT
RMAN       PERMANENT
STATPERF       PERMANENT
SYSAUX       PERMANENT *
TEST       PERMANENT
USERS       PERMANENT

Pressing <return> will result in STATSPACK's recommended default
tablespace (identified by *) being used.

Enter value for default_tablespace: statperf                          --------------------输入statspack使用的表空间

Choose the PERFSTAT user's Temporary tablespace.

TABLESPACE_NAME       CONTENTS  DB DEFAULT TEMP TABLESPACE
------------------------------ --------- --------------------------
TEMP       TEMPORARY *

Pressing <return> will result in the database's default Temporary
tablespace (identified by *) being used.

Enter value for temporary_tablespace: temp             -------------------------------输入法默认临时表空间

Using tablespace temp as PERFSTAT temporary tablespace.
... Creating PERFSTAT user
... Installing required packages
... Creating views
... Granting privileges

NOTE:
SPCUSR complete. Please check spcusr.lis for any errors.

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

 - - - - - - -- - - - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - -- - - - - - - - - - - -- -  - -- - - - - - - - -
Creating Package STATSPACK...

Package created.

No errors.
Creating Package Body STATSPACK...

Package body created.

No errors.

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

创建成功,没有错误,如果有错误,我们可以查看.lis文件,运行spdrop.sql脚本删除这些对象,然后重新运行spcreate.sql来创建。


我们大概看下spcreate.sql脚本的内容,主要调用了另外3个脚本

$ cat spcreate.sql


--  Create PERFSTAT user and required privileges
@@spcusr                        创建用户,并授权

--
--  Build the tables and synonyms
connect perfstat/&&perfstat_password
@@spctab                         创建表、同义词等对象
--  Create the statistics Package
@@spcpkg                        创建系统包


3、测试statspack

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

SQL> execute statspack.snap

PL/SQL procedure successfully completed.

SQL> execute statspack.snap

PL/SQL procedure successfully completed.


SQL> @$ORACLE_HOME/rdbms/admin/spreport.sql              调用spreport.sql生成分析报告
  -- - - - - - - -- - - - - -- - - - -- - - - -- - - - -- - - - - -- - - - -- - - - - - - -- - - - - -

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

  -- - - - - - - -- - - - - -- - - - -- - - - -- - - - -- - - - - -- - - - -- - - - - - - -- - - - - -
Listing all Completed Snapshots

      Snap
Instance     DB Name    Snap Id   Snap Started    Level Comment
------------ ------------ --------- ----------------- ----- --------------------
test001      TEST001  1 10 Apr 2014 16:33 5
 2 10 Apr 2014 16:34 5

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 1       输入开始快照ID,上面已经列出存在快照
Begin Snapshot Id specified: 1    

Enter value for end_snap: 2          输入结束快照ID
End   Snapshot Id specified: 2
 -- - - - - - - -- - - - - -- - - - -- - - - -- - - - -- - - - - -- - - - -- - - - - - - -- - - - - -

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

 -- - - - - - - -- - - - - -- - - - -- - - - -- - - - -- - - - - -- - - - -- - - - - - - -- - - - - -
Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is sp_1_2.  To use this name,
press <return> to continue, otherwise enter an alternative.


Enter value for report_name:            指定报告名称,如果直接回车,将使用默认名称

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

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

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

End of Report ( sp_1_2.lst )

可以看出报告已经生成,报告生成目录在当前目录

[oracle@backup1 ~]$ pwd
/home/oracle      
[oracle@backup1 ~]$ sqlplus / as sysdba

这时报告生成的文件就保存在/home/oracle 这个位置

$ ls /home/oracle/
app                    oradiag_oracle  pfile.ora~  spauto.lis  spctab.lis
delete_archive_log.sh  pfile.ora       sp_1_2.lst  spcpkg.lis  spcusr.lis


规划自动任务

查看下spauto.sql的关键内容

variable jobno number;
variable instno number;
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;
/

这个job任务定义了收集收据的时间间隔,一天有24小时,即1440分钟,那么

1/24 HH,即每小时一次

1/48 M,即每半小时一次

1/144 MI,即每10分钟一次

1/288 MI,即每5分钟一次

可以查看spauto.lis来获取输出信息,spauto.list保存在当前目录


SQL> @$ORACLE_HOME/rdbms/admin/spauto           执行spauto.sql,建立每1小时执行一次数据收集计划

PL/SQL procedure successfully completed.
 - - - - - - - -- - - - - - - - - -- - - - - - -  -- - ---- - - - - -- - - - - - -- - - - - - -- - - - - - -- - - - --

 - - - - - -- - - - - - - -- - - - - - - -- - - - - -- - - - - - -- - - - - -- - - - - -- - - - - - - -- - - - - - -- - 
Next scheduled run
~~~~~~~~~~~~~~~~~~
The next scheduled run for this job is:

       JOB NEXT_DATE NEXT_SEC
---------- --------- --------------------------------
43 10-APR-14 17:00:00

建立定时任务成功


移除定时任务

查询user_jobs视图,查看当前的定时任务

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

       JOB LOG_USER  PRIV_USERLAST_DATE NEXT_DATE INTERVAL
---------- ------------------------------ ------------------------------ --------- --------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
43 PERFSTAT  PERFSTAT 10-APR-14 10-APR-14 trunc(SYSDATE+1/24,'HH')

使用dbms_job.remove移除定时任务

SQL> execute dbms_job.remove('43');

PL/SQL procedure successfully completed.

如果采样完成,应该及时移除job任务,不然statspack长时间运行,数据量将非常大,因此会引起宕机。


删除历史数据

删除stats$snapshot数据表中的相应数据,其他表中的数据也会相应地级联删除;

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

MAX(SNAP_ID)
------------
  3

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

3 rows deleted.

在删除过程中,所有相关的表都被锁定,我们通过以下SQL查询得到

SQL> select a.object_id,a.oracle_username,b.object_name
  2  from v$locked_object a,dba_objects b
  3  where a.object_id=b.object_id;

sppurge.sql脚本可以用于删除一定范围的采样数据,但是会产生大量归档日志

SQL> @$ORACLE_HOME/rdbms/admin/sppurge

Database Instance currently connected to
========================================
Instance
   DB Id    DB Name    Inst Num Name
----------- ---------- -------- ----------
 4133908770 TEST001      1 test001
Snapshots for this database instance
====================================
      Base-  Snap
 Snap Id   Snapshot Started    line? Level Host   Comment
-------- --------------------- ----- ----- --------------- --------------------
       1  10 Apr 2014 16:33:44 5 backup1
       2  10 Apr 2014 16:34:00 5 backup1
       3  10 Apr 2014 17:00:04 5 backup1
       4  10 Apr 2014 17:24:58 5 backup1
       5  10 Apr 2014 17:25:00 5 backup1
       6  10 Apr 2014 17:25:01 5 backup1
       7  10 Apr 2014 17:25:02 5 backup1
       8  10 Apr 2014 17:25:03 5 backup1
       9  10 Apr 2014 17:25:04 5 backup1
      10  10 Apr 2014 17:25:06 5 backup1

Warning
~~~~~~~
sppurge.sql deletes all snapshots ranging between the lower and
upper bound Snapshot Id's specified, for the database instance
you are connected to.  Snapshots identified as Baseline snapshots
which lie within the snapshot range will not be purged.

It is NOT possible to rollback changes once the purge begins.

You may wish to export this data before continuing.

Specify the Lo Snap Id and Hi Snap Id range to purge
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for losnapid: 1                                     输入开始快照ID
Using 1 for lower bound.

Enter value for hisnapid: 5                                    输入结束快照ID
Using 5 for upper bound.
Deleting snapshots 1 - 5.
Number of Snapshots purged: 5 
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Purge of specified Snapshot range complete.

SQL> commit;

Commit complete.

我们还可以用sptrunc.sql脚本,截断所有表


导出statspack表数据,使用spuexp.par,主要内容如下

file=spuexp.dmp log=spuexp.log compress=y grants=y indexes=y rows=y constraints=y owner=PERFSTAT consistent=y

举例说明:

$ exp perfstat/Pass1234 parfile=$ORACLE_HOME/rdbms/admin/spuexp.par

$ ls /home/oracle/spuex*            可以看到导出的文件及日志文件
/home/oracle/spuexp.dmp  /home/oracle/spuexp.log


调整statspack收集门限

statspack有两种类型的收集选项:级别(level)和门限(threshold),其中级别用于控制收集数据的类型,门限用于设置收集的数据的阀值。

statspack有5类快照级别,默认Level5.

Level 0:包含一般性能统计数据,如等待事件、系统事件、系统统计、回滚段统计、行缓存、SGA、会话、锁、缓冲池统计等。

Level 5:较Level 0增加了SQL语句收集,SQL语句收集信息保存在stats$sql_summary中。

Level 6: 从oracle 9i开始引入,除包含Level5的全部信息,增加了SQL执行计划部分信息。

Level 7:从oracle 9i开始引入,除包含低级别的所有信息之外,还增加段级统计信息(segment level statistics)收集。

Level 10:增加Parent/Children Latch信息统计。这一级别包含低级别收集的所有信息,并且还会将附加的parent/children latch信息记入stats$latch_children字典表中。这个一级别将耗费大量CPU时间

修改级别

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

PL/SQL procedure successfully completed.

而快照门限只应用于stats$sql_summary表中获取的SQL语句。因为每一个快照都会收集很多数据,每一行都代表获取快照时数据库中的一个SQL语句,所以stats$sql_summary表会很快成为statspack中最大的表,门限信息存储在stats$statspack_parameter表中,各种门限说明如下:

executions_th:这是SQL语句执行的数量,默认值是100。

disk_reads_tn:这是SQL语句执行的磁盘读入数量,默认值是1000。

parse_calls_th:这是SQL语句执行的解析调用的数量,默认值是1000。

buffer_gets_th:这是SQL语句执行的缓冲区获取的数量,默认值是10000。

任何一个门限值,超过以上参数就会产生一条记录。通过调用statspack.modify_statspack_parameter函数就可以改变门限的默认值。

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


PL/SQL procedure successfully completed.





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值