上篇中我们已经介绍了Statspack工具最基本的使用:安装卸载、Snapshot收集和基本报告生成。Oracle Statspack的灵活性是很强的,针对不同的分析需要和系统环境,我们可以在默认配置基础上进行定制,更好的完成分析需求。
3、各种Statspack配置参数
我们在AWR中,是不需要关注Snapshot收集过程的。默认情况下,Oracle后台进程MMON每个一个小时收集动态视图数据进行保存。在AWR中的调整主要集中在Snapshot收集频率设置上。
而Statspack的设置内容要丰富的多。Statspack的Snapshot设置分为两个大类:收集水平(Level)和性能阈值(threshold)。Snapshot的设置是作为每次收集的参数进行配置,并且可以在stats$snapshot基础表中查看到。
SQL> desc statspack.SNAP
Parameter Type Mode Default?
------------------ -------- ---- --------
I_SNAP_LEVEL NUMBER IN Y
I_SESSION_ID NUMBER IN Y
I_UCOMMENT VARCHAR2 IN Y
I_NUM_SQL NUMBER IN Y
I_EXECUTIONS_TH NUMBER IN Y
I_PARSE_CALLS_TH NUMBER IN Y
I_DISK_READS_TH NUMBER IN Y
I_BUFFER_GETS_TH NUMBER IN Y
I_SHARABLE_MEM_TH NUMBER IN Y
I_VERSION_COUNT_TH NUMBER IN Y
I_SEG_PHY_READS_TH NUMBER IN Y
I_SEG_LOG_READS_TH NUMBER IN Y
I_SEG_BUFF_BUSY_TH NUMBER IN Y
I_SEG_ROWLOCK_W_TH NUMBER IN Y
I_SEG_ITL_WAITS_TH NUMBER IN Y
I_SEG_CR_BKS_SD_TH NUMBER IN Y
I_SEG_CU_BKS_SD_TH NUMBER IN Y
I_ALL_INIT VARCHAR2 IN Y
I_PIN_STATSPACK VARCHAR2 IN Y
I_MODIFY_PARAMETER VARCHAR2 IN Y
(RESULT) NUMBER
SQL> desc stats$snapshot;
Name Type Nullable Default Comments
---------------- ------------- -------- ------- --------
SNAP_ID NUMBER(6)
DBID NUMBER
INSTANCE_NUMBER NUMBER
SNAP_TIME DATE
STARTUP_TIME DATE
SESSION_ID NUMBER
SERIAL# NUMBER Y
SNAP_LEVEL NUMBER Y
UCOMMENT VARCHAR2(160) Y
EXECUTIONS_TH NUMBER Y
PARSE_CALLS_TH NUMBER Y
DISK_READS_TH NUMBER Y
BUFFER_GETS_TH NUMBER Y
SHARABLE_MEM_TH NUMBER Y
VERSION_COUNT_TH NUMBER Y
SEG_PHY_READS_TH NUMBER
SEG_LOG_READS_TH NUMBER
SEG_BUFF_BUSY_TH NUMBER
SEG_ROWLOCK_W_TH NUMBER
SEG_ITL_WAITS_TH NUMBER
SEG_CR_BKS_SD_TH NUMBER
SEG_CU_BKS_SD_TH NUMBER
ALL_INIT VARCHAR2(5) Y
默认snapshot收集动作是可以不设置任何参数的,那个是因为Oracle对Statspack每个版本都有一个经验值设置。注意:一般情况下,采用默认值可以应对大多数情况,不需要进行修改。
ü Snap_level收集水平
应该说,snapshot收集过程的两个类型参数,分别反映了我们对性能数据收集的深度和广度两个维度范围。Snap_level表示的收集的广度,不同的level取值表示不同等级的收集广度。
在之前的stats$snapshot基表中,我们是可以看到每个snapshot对应的level值的。针对Oracle 9i版本,默认取值为5。
SQL> select snap_id, dbid, to_char(snap_time, 'yyyy-mm-dd hh24:mi:ss') snap_time, snap_level from stats$snapshot;
SNAP_ID DBID SNAP_TIME SNAP_LEVEL
------- ---------- ------------------- ----------
1 2629872507 2014-02-07 10:51:30 5
不同level的取值,对应不同的性能数据收集范围。
如果取值0,表示常规性能数据收集,如wait statistics、system events、system statistics、rollback segment data、row cache、SGA、background events、session events, lock statistics、buffer pool statistics、parent latch statistics。
如果取值5,表示除了level=0对应的数据收集外,还要针对shared pool中的SQL游标信息进行收集。注意:针对不同的SQL我们可以设置阈值参数,来设置收集的深度。比如SQL执行次数、解析次数等。
如果取值6,表示除了level=5收集数据外,还要包括shared pool中SQL执行计划和资源消耗。
如果取值7,表示添加了Segment Level的统计信息,如数据块变更、物理逻辑读的次数。
如果取值10,表示在level=7的基础上,添加了child latch信息。
综合来看,level越高,收集信息广度越大。那么是不是越多越好,答案是否定的。信息收集的范围越多,意味着在进行snapshot收集的过程中需要消耗的资源就越多,时间也就越长。同时,保存在基表中的数据也就越多,对空间也有一定压力。
ü SQL thresholds
SQL threshold参数配置在snapshot方法中有很多。无论是SQL还是segment结构,在性能视图中我们关注的都是资源消耗的“大户”。如何定义大户,是针对不同系统的实际情况而确定的。
各种thresholds指标,要取决于各自的需要。
ü 其他参数
除了两大类参数外,statspack还包括一些控制参数,来控制收集行为。i_modify_parameter是一个true/false类型参数,它的作用在于:当我们使用一个与默认值有区别的参数值时,如果需要将其保存在系统中作为新的默认值,就将这个参数设置为true。
i_session_id是更有针对性的参数,可以针对一个特定的session编号收集性能数据。如果一个执行作业时间很长,我们又可以确定出该作业session的编号,就可以使用i_session_id参数针对特定这个会话连接进行数据收集。这样的报告形成更加有针对性,也可以将性能数据分割开来。
SQL> exec statspack.SNAP(i_snap_level => 10);
PL/SQL procedure successfully completed
SQL> select snap_id, dbid, to_char(snap_time, 'yyyy-mm-dd hh24:mi:ss') snap_time, snap_level from stats$snapshot;
SNAP_ID DBID SNAP_TIME SNAP_LEVEL
------- ---------- ------------------- ----------
1 2629872507 2014-02-07 10:51:30 5
2 2629872507 2014-02-07 11:05:00 5
3 2629872507 2014-02-07 12:32:51 10
在9i中已经可以使用存储过程的=》指示符。
4、Statspack中SQL report生成
在AWR报告中,我们可以依据报告中sql_id/hash_code,调用专门脚本来生成特定SQL的执行计划报告。在statspack中,我们也可以实现这样的功能。
注意:生成执行计划报告,要求level取值较高的snapshot收集范围。
SQL> select snap_id, to_char(snap_time,'yyyy-mm-dd hh24:mi:ss') start_time, snap_level from stats$snapshot;
SNAP_ID START_TIME SNAP_LEVEL
------- ------------------- ----------
1 2014-02-07 10:51:30 5
2 2014-02-07 11:05:00 5
3 2014-02-07 12:32:51 10
11 2014-02-07 14:52:44 10
12 2014-02-07 14:54:58 10
先生成11和12两个snapshot的报告,找到sql语句ID信息。
Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
11 11 1.0 0.1 0.00 0.00 114078687
select con#,obj#,rcon#,enabled,nvl(defer,0) from cdef$ where rob
j#=:1
在statspack报告中,我们没有sql_id使用,而是hash code。将特定语句hash code记录下来,将来输入到语句报告中。
调用程序脚本:
SQL> @?/rdbms/admin/sprepsql.sql
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
2629872507 ORA9I 1 ora9i
Completed Snapshots
Snap Snap
Instance DB Name Id Snap Started Level Comment
------------ ------------ ----- ----------------- ----- ----------
ora9i ORA9I 1 07 2月 2014 10:5 5
1
2 07 2月 2014 11:0 5
5
3 07 2月 2014 12:3 10
2
11 07 2月 2014 14:5 10
2
12 07 2月 2014 14:5 10
4
根据交互提示输入snapshot range和hash code。
Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
输入 begin_snap 的值:
Specify the Hash Value
~~~~~~~~~~~~~~~~~~~~~~
输入 hash_value 的值: 114078687
Hash Value specified is: 114078687
生成文本报告中,就可以方便查看到SQL语句相关消耗和执行计划。
Start Id Start Time End Id End Time Duration(mins)
--------- ------------------- --------- ------------------- --------------
11 07-2月 -14 14:52:44 12 07-2月 -14 14:54:58 2.23
SQL Statistics
~~~~~~~~~~~~~~
-> CPU and Elapsed Time are in seconds (s) for Statement Total and in
milliseconds (ms) for Per Execute
% Snap
Statement Total Per Execute Total
--------------- --------------- ------
Buffer Gets: 11 1.0
.14
Disk Reads: 0 0.0
.00
Rows processed: 0 0.0
CPU Time(s/ms): 0 .0
Elapsed Time(s/ms): 0 .0
Sorts: 0 .0
Parse Calls: 7 .6
Invalidations: 0
Version count: 1
Sharable Mem(K): 9
Executions: 11
--------------------------------------------------------------------------------
| Operation | PHV/Object Name | Rows | Bytes| Cost |
--------------------------------------------------------------------------------
|SELECT STATEMENT |----- 3275652605 ----| | | |
|TABLE ACCESS BY INDEX ROWID |CDEF$ | | | |
| INDEX RANGE SCAN |I_CDEF3 | | | |
--------------------------------------------------------------------------------
5、结论
综合性的性能诊断工具,是我们日常工作进行分析诊断的重要助力。从Statspack到今天的AWR,自动化、智能化性能诊断已经成为的工具发展方向。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17203031/viewspace-1079142/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17203031/viewspace-1079142/