March 2010
M T W T F S S
« Jan    
1234567
891011121314
15161718192021
22232425262728
293031  

如何分析AWR (5)

有一次跟一个QQ上的朋友一起探讨了另一个对系统CPU进行度量的指标: CPU used by this session。
他刚好有一份AWR报告,在这份报告里,出现了严重的CPU used by this session和DB CPU不一致的现象……

如何分析AWR (4)

构建DSS系统的第一步离不开数据加载,通过文本文件加载是最常见的方式,Oracle提供了外部表加载的方法,即把一个文本文件当成一个正常的表来进行操作,通过类似insert /*+ append */ into table select from external_table的方式进行加载。
数据加载是一个CPU-Bound的过程,不过是通过什么工具,external table也好,sqlldr也好,imp也好,impdp也好。
这个过程的AWR报告会是怎么样子的呢……

如何分析AWR (3)

如何得到系统大致的MBPS呢?
MBPS= (Physical reads + Physical writes) * Block_Size = (196,271.4+2.0)*8*1024/1024/1024 = 1533 MB/s
更准确的MBPS可以从Instance Activity Stats部分获得……

Oracle性能分析工具概览与开发设想

上一篇文章提到的那些个工具,主要侧重点在于实时监控,而在我看来,实时监控只是一个监控工具的一个职责而已。就如Linux上的collectl或者nmon一样,我们还需要对这些历史性能数据进行保存,以便于过后进行分析。而且,这也是一个不可或缺的功能,毕竟,DBA不会也不可能24小时盯着屏幕,DBA做的主要事情应该是对历史数据进行分析从而更好的认识数据库的工作状态。

监控工具方面,也有很多实现这方面需求的软件。记得anySQL.net上面就有一个类似的监控工具。通过收集v$sysstat和v$session的数据,再利用图表的方式进行分析。这应该是这类软件的共性。

但有一个”工具”值得大提特提,那就是Oracle自身的AWR。AWR默认一个小时对系统做一次快照,这些快照其实是难得的历史性能数据,Oracle自带的AWR报告,主要是基于两个快照间的分析,因此只能得到一些孤立的数值。如果我们能够更进一步,实现对所有快照数据的分析,我们就能清晰地了解系统过去一段时间(默认AWR保留7天)的工作负载的特征曲线,各种重要指标的变化曲线。我想,这些曲线对于DBA或者决策层而言都是极其有用的……

Oracle监控工具概览

写了Linux上的监控与分析工具之后,写写Oracle上相应的监控与分析工具还是挺有意思的,一方面可以更加完整,一方面可以进行横向对比。

Linux上的性能数据一般都来自于/proc文件系统,而Oracle则是来自于V$视图。因此,所有的Oracle监控工具的实现都万变不离V$ 视图。而这些个视图里面,最重要的应推v$sysstat。里面记录着Instance一级的各个统计数据的当前值,例如CPU利用情况,逻辑读,Redo Size等等。10g后有了另一个重要的视图,叫v$active_session_history,通过它可以容易地得知当前Instance的活动状态,主要是各个时刻系统都在等待哪些事件,通过对这些等待事件和相应等待次数的处理,就可以清晰地了解系统的历史工作负载特征和压力。如果想获取当前正在执行的SQL,则可查询v$sql视图。如果想获取当前SQL的执行计划,则可调用dbms_xplan.display_cursor。从这方面讲,一个DBA都具备着写一个Oracle的监控工具的能力。它应该比写一个Linux的监控工具来得容易简单得多……

如何分析AWR (2)

如何去表征一个系统的繁忙程度呢?除了利用CPU进行计算外,数据库还会利用其它计算资源,如网络,硬盘,内存等等,这些对资源的利用同样可以利用时间进行度量。假设系统有M个session在运行,同一时刻,有的session可能在利用CPU,有的session可能在访问硬盘,那么,在一秒钟内,所有session的时间加起来就可以表征系统在这一秒内的繁忙程度,一般的,这个和的最大值应该为M。这其实就是Oracle提供的另一个重要指标:DB time,它用以衡量前端进程所消耗的总时间。

对除CPU以后的计算资源的访问,Oracle用等待事件进行描述。同样地,和CPU可分为前台消耗CPU和后台消耗CPU一样,等待事件也可以分为前台等待事件和后台等待事件。

DB Time一般的应该等于DB CPU + 前台等待事件所消耗时间的总和。等待时间通过v$system_event视图进行统计,CPU Time和DB CPU则是通过同一个视图,即v$sys_time_model进行统计……

如何分析AWR (1)

如果关注数据库的性能,那么当拿到一份AWR报告的时候,最想知道的第一件事情可能就是系统资源的利用情况了,而首当其冲的,就是CPU。

而细分起来,CPU可能指的是

OS级的User%, Sys%, Idle%
DB所占OS CPU资源的Busy%
DB CPU又可以分为前台所消耗的CPU和后台所消耗的CPU
如果数据库的版本是11g,那么很幸运的,这些信息在AWR报告中一目了然…

如何分析AWR (0)

Automatic Workload Repository是10g引入的一个重要组件。在里面存贮着近期一段时间内,默认是7天,数据库活动状态的详细信息。
通过AWR和AWR报告,DBA可以容易地获知最近数据库的活动状态,数据库的各种性能指标的变化趋势曲线,最近数据库可能存在的异常,分析数据库可能存在的性能瓶颈从而对数据库进行优化。

AWR报告所有的数据来源于AWR视图,即以DBA_HIST_开头的所有系统表,Database Reference有对所有这些系统表的描述,这应该是Oracle官方对AWR报告的官方注释了。

而对于如何有效地去分析AWR报告….