您的位置:首页 > 数据库 > Oracle

maclean-【性能调优】Oracle AWR报告指标全解析 学习笔记

2016-10-31 21:44 381 查看
原文链接:http://www.askmaclean.com/archives/performance-tuning-oracle-awr.html

AWR小技巧

手动执行一个快照:

Exec dbms_workload_repository.create_snapshot; (这个要背出来哦,用的时候去翻手册,丢脸哦 J!)

创建一个AWR基线

Exec DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id,end_snap_id ,baseline_name);

@?/rdbms/admin/awrddrpt AWR比对报告

@?/rdbms/admin/awrgrpt RAC 全局AWR

自动生成AWR HTML报告:
http://www.oracle-base.com/dba/10g/generate_multiple_awr_reports.sql
1、报告总结

Elapsed:               29.75 (mins)
DB Time:            7,633.76 (mins)

Elapsed 为该AWR性能报告的时间跨度(自然时间的跨度,例如前一个快照snapshot是4点生成的,后一个快照snapshot是6点生成的,则若使用@?/rdbms/admin/awrrpt 脚本中指定这2个快照的话,那么其elapsed = (6-4)=2 个小时),一个AWR性能报告 至少需要2个AWR snapshot性能快照才能生成 ( 注意这2个快照时间 实例不能重启过,否则指定这2个快照生成AWR性能报告 会报错),AWR性能报告中的 指标往往是 后一个快照和前一个快照的 指标的delta,这是因为 累计值并不能反映某段时间内的系统workload。

DB TIME= 所有前台session花费在database调用上的总和时间:

注意是前台进程foreground sessions

包括CPU时间、IO Time、和其他一系列非空闲等待时间,别忘了cpu on queue time

DB Time描绘了数据库总体负载,但要和elapsed time逝去时间结合其他来。

Average Active Session AAS= DB time/Elapsed Time

DB Time =60 min , Elapsed Time =60 min AAS=60/60=1 负载一般

DB Time= 1min , Elapsed Time= 60 min AAS= 1/60 负载很轻

DB Time= 60000 min,Elapsed Time= 60 min AAS=1000 系统hang了吧?

DB TIME= DB CPU + Non-Idle Wait + Wait on CPU queue

如果仅有2个逻辑CPU,而2个session在60分钟都没等待事件,一直跑在CPU上,那么:

DB CPU= 2 * 60 mins , DB Time = 2* 60 + 0 + 0 =120

AAS = 120/60=2 正好等于OS load 2。

如果有3个session都100%仅消耗CPU,那么总有一个要wait on queue

DB CPU = 2* 60 mins ,wait on CPU queue= 60 mins

AAS= (120+ 60)/60=3 主机load 亦为3,此时vmstat 看waiting for run time

1-1 内存参数大小

内存管理方式:MSMM、ASMM(sga_target)、AMM(memory_target)

1-2 Load Profile

指标

指标含义
redo size单位 bytes,redo size可以用来估量update/insert/delete的频率,大的redo size往往对lgwr写日志,和arch归档造成I/O压力, Per Transaction可以用来分辨是 大量小事务, 还是少量大事务。如上例每秒redo 约1MB ,每个事务800 字节,符合OLTP特征
Logical Read单位 次数*块数, 相当于 “人*次”, 如上例 196,888 * db_block_size=1538MB/s , 逻辑读耗CPU,主频和CPU核数都很重要,逻辑读高则DB CPU往往高,也往往可以看到latch: cache buffer chains等待。 大量OLTP系统(例如siebel)可以高达几十乃至上百Gbytes。
Block changes单位 次数*块数 , 描绘数据变化频率
Physical Read单位次数*块数, 如上例 5076 * 8k = 39MB/s, 物理读消耗IO读,体现在IOPS和吞吐量等不同纬度上;但减少物理读可能意味着消耗更多CPU。好的存储 每秒物理读能力达到几GB,例如Exadata。 这个physical read包含了physical reads cache和physical reads direct
Physical writes单位 次数*块数,主要是DBWR写datafile,也有direct path write。 dbwr长期写出慢会导致定期log file switch(checkpoint no complete) 检查点无法完成的前台等待。 这个physical write 包含了physical writes direct +physical writes from cache
User Calls单位次数,用户调用数,more details from internal
Parses解析次数,包括软解析+硬解析,软解析优化得不好,则夸张地说几乎等于每秒SQL执行次数。 即执行解析比1:1,而我们希望的是 解析一次 到处运行哦!
Hard Parses万恶之源. Cursor pin s on X, library cache: mutex X , latch: row cache objects /shared pool……………..。 硬解析最好少于每秒20次
W/A MB processed单位MB W/A workarea workarea中处理的数据数量

结合 In-memory Sort%, sorts (disk) PGA Aggr一起看
Logons登陆次数, logon storm 登陆风暴,结合AUDIT审计数据一起看。短连接的附带效应是游标缓存无用
Executes执行次数,反应执行频率
Rollback回滚次数, 反应回滚频率, 但是这个指标不太精确,参考而已,别太当真
Transactions每秒事务数,是数据库层的TPS,可以看做压力测试或比对性能时的一个指标,孤立看无意义
% Blocks changed per Read每次逻辑读导致数据块变化的比率;如果’redo size’, ‘block changes’ ‘pct of blocks changed per read’三个指标都很高,则说明系统正执行大量insert/update/delete;

pct of blocks changed per read = (block changes ) /( logical reads)
Recursive Call %递归调用的比率;Recursive Call % = (recursive calls)/(user calls)
Rollback per transaction %事务回滚比率。 Rollback per transaction %= (rollback)/(transactions)
Rows per Sort平均每次排序涉及到的行数 ; Rows per Sort= ( sorts(rows) ) / ( sorts(disk) + sorts(memory))
1-3 Instance Efficiency Percentages (Target 100%)

Buffer Nowait %的计算公式是 sum(v$waitstat.wait_count) / (v$sysstat statistic session logical reads)

WaitsTotal Wait Time (s)Avg Time (ms)
data block24,5432,26792
undo header74323
undo block1,11600
1st level bmb3500
session logical reads40,769,80022,544.84204.71
Buffer Nowait %:99.94
Buffer Nowait= ( 40,769,800 – (24543+743+1116+35))/ ( 40,769,800) = 0.99935= 99.94%

buffer HIT%在 不同版本有多个计算公式:

在10g以后:

Buffer Hit Ratio= 1 – ((‘physical reads cache’) / (‘consistent gets from cache’ + ‘db block gets from cache’)

db block gets 、consistent gets 以及 session logical reads的关系如下:

db block gets=db block gets direct+ db block gets from cache

consistent gets = consistent gets from cache+ consistent gets direct

consistent gets from cache= consistent gets – examination + else

consistent gets – examination==>指的是不需要pin buffer直接可以执行consistent get的次数,常用于索引,只需要一次latch get

session logical reads = db block gets +consistent gets

其中physical reads 、physical reads cache、physical reads direct、physical reads direct (lob)几者的关系为:

physical reads = physical reads cache + physical reads direct

这个公式其实说明了 物理读有2种 :

物理读进入buffer cache中 ,是常见的模式 physical reads cache

物理读直接进入PGA 直接路径读, 即physical reads direct

physical reads direct = physical reads direct (lob) + physical reads direct temporary tablespace + physical reads direct(普通)

这个公式也说明了 直接路径读 分成三个部分:

physical reads direct (lob) 直接路径读LOB对象

physical reads direct temporary tablespace 直接路径读临时表空间

physical read direct(普通) 普通的直接路径读, 一般是11g开始的自动的大表direct path read和并行引起的direct path read

physical writes direct= physical writes direct (lob)+ physical writes direct temporary tablespace

DBWR checkpoint buffers written = DBWR thread checkpoint buffers written+ DBWR tablespace checkpoint buffers written+ DBWR PQ tablespace checkpoint buffers written+….

1-4 Shared Pool Statistics

% SQL with executions>1 复用的SQL占总的SQL语句的比率,数据来源 DBA_HIST_SQL_SUMMARY 的 SINGLE_USE_SQL和TOTAL_SQL:1 – SINGLE_USE_SQL / TOTAL_SQL

% Memory for SQL w/exec>1 执行2次以上的SQL所占内存占总的SQL内存的比率,数据来源DBA_HIST_SQL_SUMMARY 的SINGLE_USE_SQL_MEM和TOTAL_SQL_MEM:1 – SINGLE_USE_SQL_MEM / TOTAL_SQL_MEM

1-5 Top 5 Timed Events

Waits : 该等待事件发生的次数, 对于DB CPU此项不可用

Times : 该等待事件消耗的总计时间,单位为秒, 对于DB CPU 而言是前台进程所消耗CPU时间片的总和,但不包括Wait on CPU QUEUE

Avg Wait(ms) : 该等待事件平均等待的时间, 实际就是 Times/Waits,单位ms, 对于DB CPU此项不可用

% Total Call Time, 该等待事件占总的call time的比率

total call time = total CPU time + total wait time for non-idle events

% Total Call Time = time for each timed event / total call time

Wait Class: 等待类型:

Concurrency,System I/O,User I/O,Administrative,Other,Configuration,Scheduler,Cluster,Application,Idle,Network,Commit

几种常见的等待事件

=========================>

free buffer waits:是由于无法找到可用的buffer cache 空闲区域,需要等待DBWR 写入完成引起

buffer busy wait/ read by other session 一般以上2个等待事件可以归为一起处理,建议客户都进行监控

log file sync:一般此类等待时间是由于 LGWR 进程讲redo log buffer 写入redo log 中发生

2-1 Time Model Statistics

parse time elapsed、hard parse elapsed time 结合起来看解析是否是主要矛盾,若是则重点是软解析还是硬解析

sequence load elapsed time sequence序列争用是否是问题焦点

PL/SQL compilation elapsed time PL/SQL对象编译的耗时

注意PL/SQL execution elapsed time 纯耗费在PL/SQL解释器上的时间。不包括花在执行和解析其包含SQL上的时间

connection management call elapsed time 建立数据库session连接和断开的耗时

failed parse elapsed time 解析失败,例如由于ORA-4031

hard parse (sharing criteria) elapsed time 由于无法共享游标造成的硬解析

hard parse (bind mismatch) elapsed time 由于bind type or bind size 不一致造成的硬解析

2-2 Foreground Wait Class

Wait Class: 等待事件的类型,如上查询所示,被分作12个类型。 10.2.0.5有916个等待事件,其中Other类型占622个。

Waits: 该类型所属等待事件在快照时间内的等待次数

%Time Out 等待超时的比率, 未 超时次数/waits * 100 (%)

Total Wait Time: 该类型所属等待事件总的耗时,单位为秒

Avg Wait(ms) : 该类型所属等待事件的平均单次等待时间,单位为ms ,实际这个指标对commit 和 user i/o 以及system i/o类型有点意义,其他等待类型由于等待事件差异较大所以看平均值的意义较小

waits / txn: 该类型所属等待事件的等待次数和事务比

2-3 前台等待事件

Foreground Wait Events 前台等待事件,数据主要来源于DBA_HIST_SYSTEM_EVENT

Event 等待事件名字

Waits 该等待事件在快照时间内等待的次数

%Timeouts : 每一个等待事件有其超时的设置,例如buffer busy waits 一般为3秒, Write Complete Waits的 timeout为1秒,如果等待事件 单次等待达到timeout的时间,则会进入下一次该等待事件

Total Wait Time 该等待事件 总的消耗的时间 ,单位为秒

Avg wait(ms): 该等待事件的单次平均等待时间,单位为毫秒

Waits/Txn: 该等待事件的等待次数和事务比

2-4 后台等待事件

Event 等待事件名字

Waits 该等待事件在快照时间内等待的次数

%Timeouts : 每一个等待事件有其超时的设置,例如buffer busy waits 一般为3秒, Write Complete Waits的 timeout为1秒,如果等待事件 单次等待达到timeout的时间,则会进入下一次该等待事件

Total Wait Time 该等待事件 总的消耗的时间 ,单位为秒

Avg wait(ms): 该等待事件的单次平均等待时间,单位为毫秒

Waits/Txn: 该等待事件的等待次数和事务比

2-5 Operating System Statistics

统计项

描述
NUM_CPU_SOCKETS物理CPU的数目
NUM_CPU_CORESCPU的核数
NUM_CPUS逻辑CPU的数目
SYS_TIME在内核态被消耗掉的CPU时间片,单位为百分之一秒
USER_TIME在用户态被消耗掉的CPU时间片,单位为百分之一秒
BUSY_TIMEBusy_Time=SYS_TIME+USER_TIME 消耗的CPU时间片,单位为百分之一秒
AVG_BUSY_TIMEAVG_BUSY_TIME= BUSY_TIME/NUM_CPUS
IDLE_TIME空闲的CPU时间片,单位为百分之一秒
所有CPU所能提供总的时间片BUSY_TIME + IDLE_TIME = ELAPSED_TIME * CPU_COUNT
OS_CPU_WAIT_TIME进程等OS调度的时间,cpu queuing
VM_IN_BYTES换入页的字节数
VM_OUT_BYTES换出页的字节数,部分版本下并不准确,例如Bug 11712010 Abstract: VIRTUAL MEMORY PAGING ON 11.2.0.2 DATABASES,仅供参考
IOWAIT_TIME所有CPU花费在等待I/O完成上的时间 单位为百分之一秒
RSRC_MGR_CPU_WAIT_TIME

是指当resource manager控制CPU调度时,需要控制对应进程暂时不使用CPU而进程到内部运行队列中,以保证该进程对应的consumer group(消费组)没有消耗比指定resource manager指令更多的CPU。RSRC_MGR_CPU_WAIT_TIME指等在内部运行队列上的时间,在等待时不消耗CPU

2-6 Service Statistcs

按照Service Name来分组时间模型和 物理、逻辑读取, 部分数据来源于 WRH$_SERVICE_NAME;

Service Name 对应的服务名 (v$services), SYS$BACKGROUND代表后台进程, SYS$USERS一般是系统用户登录

DB TIME (s): 本服务名所消耗的DB TIME时间,单位为秒

DB CPU(s): 本服务名所消耗的DB CPU 时间,单位为秒

Physical Reads : 本服务名所消耗的物理读

Logical Reads : 本服务所消耗的逻辑读
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: