哈Ha! 我向您介绍了文章
“如何在Oracle标准版中使用statspack代替awr”的翻译 。
在Oracle Standard Edition中如何使用STATSPACK代替AWR。
报告问题
我当时在一个陌生的数据库中收集性能数据。
通过运行命令运行AWR报告后
@?/Rdbms/admin/awrrpt.sql
出现错误:
WARNING (-20023) ORA-20023: Missing start and end values for time model stat: parse time elapsed WARNING (-20023) ORA-20023: Missing start and end values for time model stat: DB CPU WARNING (-20016) ORA-20016: Missing value for SGASTAT: free memory ...
是否有可能禁用诊断程序包?
让我们看看CONTROL_MANAGEMENT_PACK_ACCESS参数。
SQL> show parameter control_management_pack_access NAME TYPE ------------------------------------ ---------------------- VALUE ------------------------------ control_management_pack_access string NONE
我对NONE的价值有些谨慎。 由于Oracle Enterprise Edition包含诊断包许可证,而Standart Edition不包含诊断包许可证,因此我无权使用它。 让我们看看版本信息。
.SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Release 11.1.0.6.0 - 64bit Production PL/SQL Release 11.1.0.6.0 - Production CORE 11.1.0.6.0 Production TNS for 64-bit Windows: Version 11.1.0.6.0 - Production NLSRTL Version 11.1.0.6.0 - Production
如我们所见,“ Enterprise Edition”没有出现在控制台中。 这绝对是标准版。 好吧,至少我知道我无权使用它。
当我再次查看<ORACLE_HOME> / rdbms / admin目录时,我发现STATSPACK仍然存在,它是旧数据库的原始性能数据收集工具,在功能上与AWR非常相似。 最重要的是,我们可以无限制地使用STATSPACK替代Standart Edition中的AWR。
安装STATSPACK
必须至少采取两个步骤来创建带有计划任务的STATSPACK。
1)运行spcreate.sql脚本
我建议您将<ORACLE_HOME> / rdbms / admin目录作为当前工作目录,因为在运行时所有日志都将保留在该目录中。
运行脚本:
SQL> @spcreate.sql;
让我们看看该脚本中的内容:
@@spcusr connect perfstat/&&perfstat_password @@spctab @@spcpkg
它需要3个基本SQL脚本才能运行。
spcusr.sql
- 它将创建一个名为PERFSTAT的用户,默认表空间为SYSAUX,临时表空间为TEMP。
- 可以配置两个表空间,但是在运行此脚本之前,必须确保数据库中存在表空间。
- 如果要稍后执行一些例程,则需要记住密码。
在spctab.sql表中,将创建71个STATSPACK表。
STATS$DATABASE_INSTANCE STATS$LEVEL_DESCRIPTION STATS$SNAPSHOT STATS$DB_CACHE_ADVICE STATS$FILESTATXS STATS$TEMPSTATXS STATS$LATCH STATS$LATCH_CHILDREN STATS$LATCH_PARENT STATS$LATCH_MISSES_SUMMARY STATS$LIBRARYCACHE STATS$BUFFER_POOL_STATISTICS STATS$ROLLSTAT STATS$ROWCACHE_SUMMARY STATS$SGA STATS$SGASTAT STATS$SYSSTAT STATS$SESSTAT STATS$SYSTEM_EVENT STATS$SESSION_EVENT STATS$WAITSTAT STATS$ENQUEUE_STATISTICS STATS$SQL_SUMMARY STATS$SQLTEXT STATS$SQL_STATISTICS STATS$RESOURCE_LIMIT STATS$DLM_MISC STATS$CR_BLOCK_SERVER STATS$CURRENT_BLOCK_SERVER STATS$INSTANCE_CACHE_TRANSFER STATS$UNDOSTAT STATS$SQL_PLAN_USAGE STATS$SQL_PLAN STATS$SEG_STAT STATS$SEG_STAT_OBJ STATS$PGASTAT STATS$PARAMETER STATS$INSTANCE_RECOVERY STATS$STATSPACK_PARAMETER STATS$SHARED_POOL_ADVICE STATS$SQL_WORKAREA_HISTOGRAM STATS$PGA_TARGET_ADVICE STATS$JAVA_POOL_ADVICE STATS$THREAD STATS$FILE_HISTOGRAM STATS$EVENT_HISTOGRAM STATS$TIME_MODEL_STATNAME STATS$SYS_TIME_MODEL STATS$SESS_TIME_MODEL STATS$STREAMS_CAPTURE STATS$STREAMS_APPLY_SUM STATS$PROPAGATION_SENDER STATS$PROPAGATION_RECEIVER STATS$BUFFERED_QUEUES STATS$BUFFERED_SUBSCRIBERS STATS$RULE_SET STATS$OSSTATNAME STATS$OSSTAT STATS$PROCESS_ROLLUP STATS$PROCESS_MEMORY_ROLLUP STATS$SGA_TARGET_ADVICE STATS$STREAMS_POOL_ADVICE STATS$MUTEX_SLEEP STATS$DYNAMIC_REMASTER_STATS STATS$IOSTAT_FUNCTION_NAME STATS$IOSTAT_FUNCTION STATS$MEMORY_TARGET_ADVICE STATS$MEMORY_DYNAMIC_COMPS STATS$MEMORY_RESIZE_OPS STATS$INTERCONNECT_PINGS STATS$IDLE_EVENT
spcpkg.sql
它将为PERFSTAT创建必要的STATSPACK存储过程。
2.运行spauto.sql脚本
该脚本将以指定的时间间隔(1小时)发送任务。
SQL> @spauto.sql;
他在其中介绍了这项工作:
SQL> begin 2 select instance_number into :instno from v$instance; 3 dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno); 4 commit; 5 end; 6 /
然后显示下一个运行时。
SQL> select job, next_date, next_sec 2 from user_jobs 3 where job = :jobno;
更多注意事项
为了获得更深入的统计信息,您需要将快照级别更改为7,而不是默认级别5。
SQL> exec statspack.snap(i_snap_level => 7, i_modify_parameter => 'true');
此命令会将快照级别更改为7并同时拍照。