电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

ZT-Statspack安装配置使用说明二


发布日期:2020/3/25
 

spcusrlis:SPCUSR complete Please check spcusrlis for any errors

spdtablis:SPDTAB complete Please check spdtablis for any errors

spdusrlis:SPDUSR complete Please check spdusrlis for any errors

在这一步如果出现错误那么你可以运行spdropsql脚本来删除这些对象然后重新运行spcreatesql来创建这些对象运行 SQL*Plus 以具有SYSDBA 权限的用户登陆

SQL> @spdropsql

同义词已丢弃off;

视图已丢掉

同义词已丢弃

视图已丢掉

同义词已丢弃

用户已丢弃

NOTE:

SPDUSR complete Please check spdusrlis for any errors

SQL>

测试安装好的Statspack

运行statspacksnap可以产生系统快照运行两次然后执行spreportsql就可以生成一个基于两个时间点的报告

如果一切正常说明安装成功

SQL>execute statspacksnap

PL/SQL procedure successfully completed

SQL>execute statspacksnap

PL/SQL procedure successfully completed

SQL>@spreportsql

可是有可能你会得到以下错误

SQL> exec statspacksnap;

BEGIN statspacksnap; END;

*

ERROR at line :

ORA: inserted value too large for column

ORA: at PERFSTATSTATSPACK line

ORA: at PERFSTATSTATSPACK line

ORA: at PERFSTATSTATSPACK line

ORA: at line

这是Oracle的一个BugBug号

该Bug自后修正

这个问题只会出现在多位的字符集需要修改spcpkgsql脚本$ORACLE_HOME/rdbms/admin/spcpkgsqlsubstr 修改为 substrb然后重新运行该脚本

该脚本错误部分

select l_snap_id

p_dbid

p_instance_number

substr(sql_text)

...........

substr 会将多位的字符 当作一个bytesubstrb 则会当作多个byte在收集数据时 statpack 会将 top 的 sql 前 个字节 存入数据表中若在SQL的前 个字有中文就会出现此错误

规划自动任务

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

先来看看spautosql的关键内容

dbms_jobsubmit(:jobno statspacksnap; trunc(sysdate+/HH) trunc(SYSDATE+/HH) TRUE :instno);

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

一天有个小时分钟那么

/ HH 每小时一次

/ MI 每半小时一次

/ MI 每十分钟一次

/ MI 每五分钟一次

我们可以修改spautosql来更改执行间隔

dbms_jobsubmit(:jobno statspacksnap; trunc(sysdate+/MI) trunc(SYSDATE+/HH) TRUE :instno);

然后我们执行spauto这样我们就建立了一个每分钟执行一次的数据收集计划你可以查看spautolis来获得输出信息

SQL>

SQL>

SQL> Schedule a snapshot to be run on this instance every hour on the hour

SQL>

SQL> variable jobno number;

SQL> variable instno number;

SQL> begin

select instance_number into :instno from v$instance;

dbms_jobsubmit(:jobno statspacksnap; trunc(sysdate+/MI) trunc(SYSDATE+/MI) TRUE :instno);

commit;

end;

/

PL/SQL 过程已成功完成

SQL>

Job number for automated statistics collection for this instance

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Note that this job number is needed when modifying or removing

the job:

JOBNO

Job queue process

~~~~~~~~~~~~~~~~~

Below is the current setting of the job_queue_processes initora

parameter the value for this parameter must be greater

than to use automatic statistics gathering:

SQL> show parameter job_queue_processes

NAME TYPE VALUE

job_queue_processes integer

Next scheduled run

~~~~~~~~~~~~~~~~~~

The next scheduled run for this job is:

SQL> select job next_date next_sec

from user_jobs

where job = :jobno;

JOB NEXT_DATE NEXT_SEC

::

SQL>

生成分析报告

调用spreportsql可以生成分析报告

SQL> @spreport

DB Id DB Name Inst Num Instance

EYGLE eygle

Completed Snapshots

Snap Snap

Instance DB Name Id Snap Started Level Comment

eygle EYGLE :

:

:

:

………………

:

:

:

:

:

:

:

:

:

:

:

:

eygle EYGLE :

:

Specify the Begin and End Snapshot Ids

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

输入 begin_snap 的值:

Begin Snapshot Id specified:

输入 end_snap 的值:

End Snapshot Id specified:

Specify the Report Name

~~~~~~~~~~~~~~~~~~~~~~~

The default report file name is sp__ To use this name

press <return> to continue otherwise enter an alternative

输入 report_name 的值: reptxt

Using the report name reptxt

这样就生成了一个报告可是如果中间停过机那么你可能收到以下错误信息

ERROR: Snapshots chosen span an instance shutdown: RESULTS ARE INVALID

STATSPACK report for

DB Name DB Id Instance Inst Num Release OPS Host

EYGLE eygle NO AMSERVER

:ela := ;

*

ERROR 位于第 行:

ORA: 第 列:

PLS: 出现符号 ;在需要下列之一时

(+modnotnull<an identifier>

<a doublequoted delimitedidentifier><a bind variable>avg

countcurrentexistsmaxminpriorsqlstddevsumvarianceexecute

foralltimetimestampintervaldate

<a string literal with character set specification>

<a number><a singlequoted SQL string>

符号 null 被替换为 ; 后继续

ORA: 第 列:

PLS: 出现符号 ;在需要下列之一时

(+modnotnull<an identifier>

<a doublequoted delimitedidentifier><a bind variable>avg

countcurrentexistsmaxminpriorsqlstddevsumvarianceexecute

foralltimetimestampintervaldate

<a stri

移除定时任务

移除一个定时任务可以如下操作:

SQL> select joblog_userpriv_userlast_datenext_dateinterval from user_jobs;

JOB LOG_USER LAST_DATE NEXT_DATE INTERVAL

PERFSTAT ::: :: trunc(SYSDATE+/MI)

SQL> execute dbms_jobremove()

PL/SQL procedure successfully completed

删除历史数据

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

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

MAX(SNAP_ID)

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

rows deleted

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

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

SQL> select aobject_idaoracle_username bobject_name

from v$locked_object adba_objects b

where aobject_id = bobject_id

/

OBJECT_ID ORACLE_USERNAME OBJECT_NAME

PERFSTAT SNAP$

PERFSTAT STATS$LIBRARYCACHE

PERFSTAT STATS$ROLLSTAT

PERFSTAT STATS$SGA

PERFSTAT STATS$PARAMETER

PERFSTAT STATS$SQL_STATISTICS

PERFSTAT STATS$SQL_SUMMARY

PERFSTAT STATS$ENQUEUESTAT

PERFSTAT STATS$WAITSTAT

PERFSTAT STATS$BG_EVENT_SUMMARY

PERFSTAT STATS$SYSTEM_EVENT

PERFSTAT STATS$SYSSTAT

PERFSTAT STATS$SGASTAT

PERFSTAT STATS$ROWCACHE_SUMMARY

PERFSTAT STATS$BUFFER_POOL_STATISTICS

PERFSTAT STATS$LATCH_MISSES_SUMMARY

PERFSTAT STATS$SNAPSHOT

PERFSTAT STATS$FILESTATXS

PERFSTAT STATS$LATCH

PERFSTAT JOB$

rows selected

调整STATSPACK的收集门限

Statspack有两种类型的收集选项

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

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

.级别(level)

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

alevel : 一般性能统计包括等待事件系统事件系统统计回滚段统计行缓存SGA会话缓沖池统计等等

blevel : 增加SQL语句除了包括level的所有内容还包括SQL语句的收集收集结果记录在stats$sql_summary中

clevel : 增加子锁存统计包括level的所有内容并且还会将附加的子锁存存入stats$lathc_children中在使用这个级别时需要慎重建议在Oracle support的指导下进行

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

SQL>execute statspacksnap(i_snap_level=>i_modify_parameter=>true);

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

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

SQL>execute statspacksnap(i_snap_level=>);

.快照门限

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

因为每一个快照都会收集很多数据每一行都代表获取快照时数据库中的一个SQL语句所以stats$sql_summary很快就会成为Statspack中最大的表

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

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

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

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

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

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

通过调用statspackmodify_statspack_parameter函数我们可以改变门限的默认值

例如

SQL>execute statspackmodify_statspack_parameter(i_buffer_gets_th=>i_disk_reads_th=>;

一一上的安装配置

a 数据库状况

SQL> select * from v$version;

BANNER

Oraclei Enterprise Edition Release bit Producti

PL/SQL Release Production

CORE Version Production

TNS for HPUX: Version Production

NLSRTL Version Production

b 运行statscbpssql

SQL> @statscbpssql

View created

Synonym created

Grant succeeded

SQL>

其他步骤都是相同的

上一篇:认识与分析登录档

下一篇:解决HIS集群系统的性能问题一例