详细解读 STATSPACK 报告 下载本文

table fetch by

rowid 2,094,274 2,484.3 27.7

这是通过索引或者where rowid=语句来取得的行数,当然这个值越大越好。

table fetch continued

row 408 0.5 0.0

这是发生行迁移的行。当行迁移的情况比较严重时,需要对这部分进行优化。 检查行迁移的方法:

1) 运行$ORACLE_HOME/rdbms/admin/utlchain.sql

2) analyze table table_name list chained rows into CHAINED_ROWS 3) select * from CHAINED_ROWS where table_name='table_name';

清除的方法:

方法1:create table table_name_tmp as select * from table_name where rowed in (select head_rowid from chained_rows);

Delete from table_name where rowed in (select head_rowid from chained_rows); Insert into table_name select * from table_name_tmp; 方法2:create table table_name_tmp select * from table_name ; truncate table table_name

insert into table_name select * from table_name_tmp

方法3:用exp工具导出表,然后删除这个表,最后用imp工具导入这表

方法4:alter table table_name move tablespace tablespace_name,然后再重新表的索引 上面的4种方法可以用以消除已经存在的行迁移现象,但是行迁移的产生很多情况下时由于PCT_FREE参数设置的太小所导致,所以需要调整PCT_FREE参数的值。

table scan blocks

gotten 299,249 355.0 4.0 table scan rows

gotten 1,912,851 2,269.1 25.3

table scans (long

tables) 0 0.0 0.0

longtables就是表的大小超过buffer buffer* _SMALL_TABLE_THRESHOLD的表。如果一个数据库的大表扫描过多,那么db file scattered read等待事件可能同样非常显著。如果table scans (long tables)的per Trans值大于0,你可能需要增加适当的索引来优化你的SQL语句。

table scans (short

tables) 143,830 170.6 1.9

short tables是指表的长度低于buffer chache 2%(2%是有隐含参数_SMALL_TABLE_THRESHOLD定义的,这个参数在oracle不同的版本中,有不同的含义。在9i和10g中,该参数值定义为2%,在8i中,该参数值为20个blocks,在v7中,该参数为5个blocks)的表。这些表将优先使用全表扫描。一般不使用索引。_SMALL_TABLE_THRESHOLD值的计算方法如下(9i,8K): (db_cache_size/8192)*2%。 注意:_SMALL_TABLE_THRESHOLD参数修改是相当危险的操作。

transaction

rollbacks 70 0.1 0.0 transaction tables consistent

rea 0 0.0 0.0 transaction tables consistent

rea 0 0.0 0.0

user

calls 345,054 409.3 4.6

user

commits 75,587 89.7 1.0

user

rollbacks 19 0.0 0.0

workarea executions -

optimal 247,121 293.1 3.3 write clones created in

backgroun 0 0.0 0.0 write clones created in

foregroun 25 0.0 0.0

7、I/O统计信息

下面两个报表是面向I/O的。通常,在这里期望在各设备上的读取和写入操作是均匀分布的。要找出什么文件可能非常“热”。一旦DBA了解了如何读取和写入这些数据,他们也许能够通过磁盘间更均匀的分配I/O而得到某些性能提升。

在这里主要关注Av Rd(ms)列 (reads per millisecond)的值,一般来说,大部分的磁盘系统的这个值都能调整到14ms以下,oracle认为该值超过20ms都是不必要的。如果该值超过1000ms,基本可以肯定存在I/O的性能瓶颈。如果在这一列上出现######,可能是你的系统存在严重的I/O问题,也可能是格式的显示问题。

当出现上面的问题,我们可以考虑以下的方法: 1)优化操作该表空间或者文件的相关的语句。

2)如果该表空间包含了索引,可以考虑压缩索引,是索引的分布空间减小,从而减小I/O。 3)将该表空间分散在多个逻辑卷中,平衡I/O的负载。

4)我们可以通过设置参数DB_FILE_MULTIBLOCK_READ_COUNT来调整读取的并行度,这将提高全表扫描的效率。但是也会带来一个问题,就是oracle会因此更多的使用全表扫描而放弃某些索引的使用。为解决这个问题,我们需要设置另外一个参数OPTIMIZER_INDEX_COST_ADJ=30(一般建议设置10-50)。 关于OPTIMIZER_INDEX_COST_ADJ=n:该参数是一个百分比值,缺省值为100,可以理解为FULL SCAN COST/INDEX SCAN COST。当n%* INDEX SCAN COST

Tablespace IO Stats for DB: ORA92 Instance: ora92 Snaps: 13 -14 ->ordered by IOs (Reads + Writes) desc Tablespace

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

Av Av Av Av Buffer Av Buf

Reads Reads/s Rd(ms) Blks/Rd Writes Writes/s Waits Wt(ms)

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

ICD_DXH_IDX

3,869 5 8.6 1.0 36,701 44 1,180 0.1 ICD_DXH_DAT

2,572 3 9.7 1.0 16,545 20 1,076 0.2 UNDOTBS1

16 0 86.9 1.0 19,084 23 283 0.0 ICD_DXH_HISIDX

689 1 30.8 1.0 14,953 18 108 0.0 ICD_DXH_HISDAT

2,756 3 7.9 7.3 1,082 1 3 0.0 PERFSTAT

215 0 6.0 1.0 193 0 0 0.0 SYSTEM

55 0 11.5 5.0 17 0 717 0.1 INDX

1 0 40.0 1.0 1 0 0 0.0 TOOLS

1 0 40.0 1.0 1 0 0 0.0 USERS