当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle认证考试辅导:教你掌握statspack报表的使用方法
发布时间:2010/3/31 18:11:20 来源:城市学习网 编辑:admin

  教你掌握statspack报表的使用方法
  "statspack"的一些使用技巧:
  一 怎样修改statspack的脚本产生自定义报表?
  通常statspack报表可以满足大部分的需要,有时我们需要对产生报表的脚本进行一些微小的修改,这样产生的报表将会更有用途。
  比如说某些SQL很多,但在statspack产生的报表中,每个SQL只显示5行,结果有些比较长的SQL就只能看到一部分;又如在top events部分,标准的报表只显示top 5,其实我们可以显示更多的events,那如何修改呢?用编辑工具(在linux下用vi)打开($ORACLE_HOME/rdbms/admin/sprepins.sql)
  define top_n_events = 5;// top 5 eventsdefine top_n_sql = 65;// top sqldefine
top_n_segstat = 5; // top 5 segstatdefine num_rows_per_hash=5; // 每个SQL显示5行就看到在该脚本中已经定义了一些常数,我们只需要把它改为我们需要的值。
  define top_n_events = 10; // top 10 events define top_n_sql = 65;// top sqldefine top_n_segstat = 10;// top 10 segstatdefine num_rows_per_hash=10; // 每个SQL显示10行
  修改后,我们就可以看到效果了.
  二 如何用statspack的报表确定热表及索引?
  如果想用statspack表确定热表及索引,必须修改statspack快照的收集级别,8i中statspack共有三种快照级别,默认值是5。
  select * from STATS$level_DESCRIPTION;SNAP_LEVEL DESCRIPTION---------- -------------------------
  0 一性性能统计:包含回退段状态、字典缓存、SGA、系统事件、后台事件、会话事件、系统统计、等待统计、锁统计、闩锁统计。
  5 增加了收集SQL的信息、并包括0级收集的信息。
  10 增加了收集子闩锁的信息,并包括所有低级别的信息。
  在9i中statspack共有五种快照级别,默认值是5。
  select * from STATS$level_DESCRIPTION;SNAP_LEVEL DESCRIPTION---------- ----------------------------
  0 一性性能统计:包含回退段状态、字典缓存、SGA、系统事件、后台事件、会话事件、系统统计、等待统计、锁统计、闩锁统计
  5 增加了收集SQL的信息、并包括0级收集的信息。
  6 增强了在SQL收集信息方面的功能(列出占用资源较高的SQL),并包所有低级别的信息。
  7 增加了收集段级别的统计信息(如段的逻辑读与物理读、行锁、ITL及buffer busy waits),
  并包括所有低级别的信息。
  10 增加了收集子闩锁的信息,并包括所有低级别的信息。
  如果你收用statspack确定热表及热索引,那就需要使用7/10的级别来收集快照。
  //通过这样的设置,以后的收集级别都将是7级。
  //如果你只是想本次改变收集级别,可以忽略i_modify_parameter参数。
  SQLexecute statspack.snap(i_snap_level=7,i_modify_parameter=true); SQLexecute statspack.snap(i_snap_level=7);修改完收集级别后,那大家就可以根据自己的需要设定收集的频率,现在我们只需要注意statspack报表中的“段级别的统计信息”:
  Top 5 Logical Reads per Segment for DB: ESALInstance: esalSnaps: 2368 -2380- End Segment Logical Reads Threshold: 10000SubobjectObj. LogicalOwnerTablespace Object NameName Type Reads%Total---------- ---------- -------------------- ---------- ----- ------------ -------CYBERCAFETS_CYBERCA AGENT_CARD_TYPETABLE115,220,864 18.07CYBERCAFETS_CYBERCA GAME_CARD_TYPE TABLE 79,103,600 12.40CYBERCAFETS_CYBERCA AGENT_TASKTABLE 57,030,3048.94CYBERCAFETS_CYBERCA AGENT_PRICE_LEVEL_OWTABLE 46,393,9687.28CYBERCAFETS_CYBERCA IDX_ASL_RESLOG_IDINDEX 23,261,6003.65---------------------------------------------------------Top 5 Physical Reads per Segment for DB: ESALInstance: esalSnaps: 2368 -2380- End Segment Physical Reads Threshold:1000SubobjectObj.PhysicalOwnerTablespace Object NameName Type Reads%Total---------- ---------- -------------------- ---------- ----- ------------ -------CYBERCAFETS_CYBERCA AGENT_GAME_CARD_GM13TABLE 76,4767.36CYBERCAFETS_CYBERCA AGENT_SALE_LOG ASL_200500 TABLE 61,2705.89CYBERCAFETS_CYBERCA RESELLER_LOG RL_200412TABLE 48,9504.71CYBERCAFETS_CYBERCA AGENT_GAME_CARD_GM14TABLE 46,2594.45CYBERCAFETS_CYBERCA AGENT_CAPITAL_LOGACL_200500 TABLE 45,4764.37-------------------------------------------------------------Top 5 Buf. Busy Waits per Segment for DB: ESALInstance: esalSnaps: 2368 -2380- End Segment Buffer Busy Waits Threshold: 100SubobjectObj. Buffer BusyOwnerTablespace Object NameName Type Waits%Total---------- ---------- -------------------- ---------- ----- ------------ -------CYBERCAFETS_CYBERCA AGENT_TASKTABLE 22 36.07CYBERCAFETS_CYBERCA AGENT_CARD_TYPETABLE9 14.75CYBERCAFETS_CYBERCA IDX_RESACC_UPDTIMEINDEX58.20CYBERCAFETS_CYBERCA AGENT_SALE_LOG ASL_200501 TABLE46.56CYBERCAFETS_CYBERCA IDX_ACL_ACPITAL_LOGIINDEX46.56-------------------------------------------------------------Top 5 Row Lock Waits per Segment for DB: ESALInstance: esalSnaps: 2368 -2380- End Segment Row Lock Waits Threshold: 100SubobjectObj.Row LockOwnerTablespace Object NameName Type Waits%Total---------- ---------- -------------------- ---------- ----- ------------ -------CYBERCAFETS_CYBERCA IDX_APL_GCTID2 APL_200501 INDEX 54 24.77CYBERCAFETS_CYBERCA IDX_RB_RESELLER_IDINDEX 41 18.81CYBERCAFETS_CYBERCA IDX_RL_RESLOG_ID INDEX 38 17.43CYBERCAFETS_CYBERCA IDX_ACT_ACT_ID INDEX 177.80CYBERCAFETS_CYBERCA IDX_SERVICE_ID INDEX 146.42-------------------------------------------------------------
  在这里可以看到逻辑读/物理读/缓存忙/行锁符合条件的一些对象,通过这些对象,可以确定热的表及索引,然后分析如何对业务进行优化,降低对这些表的访问量等。如果你觉得显示top 5 segment不够的话,可以按一所述修改top_n_segstat,然后就可以显示更多的符合条件的对象,然后将这些热表放到keep池中。
  三 如何用statspack的报表确定keep池与default池的分配?
  如果你想使用default池与keep池,在9i中需要分配db_cache_size及db_keep_cache_size参数,但如何确定它们的大小呢?我们可以根据2所示的一些热表,计算热表放入keep池需要的内存,然后用将表放入相应的pool中。
  alter table &table_name storage(buffer_pool &buffer_pool);
  将确定的热表放入keep中之后,然后收集一段时间后再产生一个新的报表:
  Buffer Pool Statistics for DB: ESALInstance: esalSnaps: 2277 -2289- Standard block size PoolsD: default,K: keep,R: recycle- Default Pools for other block sizes: 2k, 4k, 8k, 16k, 32kFreeWriteBuffer Number of CacheBufferPhysical PhysicalBuffer CompleteBusyPBuffers Hit %Gets Reads Writes WaitsWaits Waits--- ---------- ----- ----------- ----------- ---------- ------- --------------D128,12899.7 482,298,597 1,557,980265,662 0088K 32,032 100.0 372,560,02313,951 42,405 0017-------------------------------------------------------------
  确定keep池与default的需要内存时,可以根据这一部分对keep池与default池的大小进行评估,如果K所标识的cache hit%比较小,说明keep池不足,如果D显示的cache hit%比较小,说明default池分配怀足,如果K是的default显示是100%,那们可以将更多的热表放入到keep池中,然后经过一段时间的调整,相信可以将default池与keep池调到一个相对比较合适的集团。
  四 如何用crontab定期产生statspack的报表?
  看了一段时间的statspack报表后,就懒于每天手工去产生一个报表,那如何产系统自动产生一个报表呢?
  经过测试,用crontab可以方便地产生报表,然后通过sendmail直接发到相关人员的邮箱中。
  [oracle@www1 sql]$ more backup/auto_send_perf.sh #!/bin/sh. ~oracle/.bash_profile/home

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved