与IO相关的等待事件troubleshooting-系列2

标签: io 相关 等待 | 发表时间:2013-10-05 04:04 | 作者:bisal
出处:http://blog.csdn.net

Troubleshooting步骤:

Troubleshooting与IO相关的等待

数据库性能调优方面一项关键的方法就是响应时间分析。找出时间都花费在数据库的哪些环节。

时间是性能调优中最重要的属性。用户通过交易或批处理任务的响应时间来感知系统的性能。

Oracle的响应时间分析使用如下公式:

Response Time = Service Time + Wait Time

响应时间=服务处理时间+等待时间

‘服务处理时间’使用‘CPU used by this session’统计数据来衡量。

‘等待时间’则是所有等待事件用时之和。

注:尽管很像,但这个公式绝对不是排队理论的基础公式。

通过分析总体响应时间不同组件的相对影响,可以使用AWR或statspack这样的工具进行性能调优,将调优的精力放到最消耗时间的组件中。


判断IO等待事件的真实重要性

        包括AWR和Statspack在内的许多工具都可以列出最重要的等待事件。Oracle 9i R2的Statspack报告之前的版本包含在了"Top 5 Wait Events"节。

        当看到这样的top等待事件列表,通常就会很容易地开始处理这些等待事件,但往往忽视了首先可以分析下他们对总体响应时间的影响。

        “Service Time”(例如CPU的使用)要远比“Wait Time”更重要,分析这些等待事件不会对节省“响应时间”有帮助。

        因此,应该将top等待事件花费的时间与“CPU used by this session”对比,将调优的精力放到最需要的地方。

        从Oracle 9i R2开始,“Top 5 Wait Events”已经改名为“Top 5 Timed Events”,通过统计session所用的CPU来衡量“Service Time”,并列到“CPU time”中。这就意味着可以更容易、更准确地衡量等待事件对总体“响应时间”的影响,正确地指导接下来的调优方向。


错误理解等待事件的影响:实例

        接下来的两个真实案例说明了为什么需要查看“Wait Time”和"Service Time"两部分,对分析数据库性能的重要性。

实例1:Oracle 9i R2之前的Statspack

        下面是产生自46分钟的两个snapshot之间的Statspack报告“Top 5 Wait Events”节:

Top 5 Wait Events                                                             
~~~~~~~~~~~~~~~~~                                             Wait     % Total
Event                                               Waits  Time (cs)   Wt Time
-------------------------------------------- ------------ ------------ -------
direct path read                                    4,232       10,827   52.01
db file scattered read                              6,105        6,264   30.09
direct path write                                   1,992        3,268   15.70
control file parallel write                           893          198     .95
db file parallel write                                 40          131     .63
         -------------------------------------------------------------   

        从以上的列表,我们很可能倾向于立即开始查找“direct path read”和“db file scattered read”等待之间的原因,尝试调优他们。这种方法没有考虑到“Service Time”。

        从同一份报告中得到的“Service Time”如下:

Statistic                                    Total   per Second    per Trans  
--------------------------------- ---------------- ------------ ------------  
CPU used by this session                   358,806        130.5     12,372.6   

        让我们来做一下简单的计算:

'Wait Time' = 10,827 x 100% / 52,01% = 20,817 cs

'Service Time' = 358,806 cs

'Response Time' = 358,806 + 20,817 = 379,623 cs

        如果现在我们来计算所有“Response Time”组件的百分比:

CPU time                    = 94.52%
direct path read            =  2.85%
db file scattered read      =  1.65%
direct path write           =  0.86%
control file parallel write =  0.05%
db file parallel write      =  0.03%

        现在就明显了,与IO相关的等待事件对于总体响应时间来说并不是真正耗时的组件(少于6%),因此解析来的调优应该聚焦在服务处理时间组件上,例如CPU消耗。


实例2:Oracle 10i R2之后的AWR

注意:类似的信息也会显示在Oracle 9i R2以后的Statspack报告:

Top 5 Timed Foreground Events 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
                                                          Avg  
                                                         wait   % DB 
Event                                 Waits     Time(s)   (ms)   time Wait Class 
------------------------------ ------------ ----------- ------ ------ ----------
DB CPU                                           33,615          82.0           
db file sequential read           3,101,013       7,359      2   18.0 User I/O  
log file sync                       472,958         484      1    1.2 Commit    
read by other session                46,134         291      6     .7 User I/O  
db file parallel read                91,982         257      3     .6 User I/O  

        在AWR中,更容易看到CPU是最耗费时间的,因为CPU组件也包括在“Top 5 Timed Foreground Events”节。从上面的例子,我们能够再次看到等待事件的用时少于20%,家下来的调优重点应该放在服务处理时间的组件上,例如CPU消耗。


(未完待续)

作者:bisal 发表于2013-10-4 20:04:40 原文链接
阅读:87 评论:0 查看评论

相关 [io 相关 等待] 推荐:

与IO相关的等待事件troubleshooting-系列5

- - CSDN博客推荐文章
        这是另一种常见的等待事件. 他产生于Oracle从磁盘读取多个块到Buffer Cache中非连续("scattered")缓存的时候. 这种读一次最大值是DB_FILE_MULTIBLOCK_READ_COUNT. 这种典型场景像全表扫描(Full Table Scans)和全索引快速扫描(Fast Full Index.

与IO相关的等待事件troubleshooting-系列3

- - CSDN博客数据库推荐文章
        使用Statspack类似的工具对数据库响应时间分析之后,已经表明与IO相关的等待事件限制了系统性能,有许多的方法可以判断这种问题.         接下来的章节会介绍排查等待事件的方法.         有一些方法可以不用管特定的等待事件. 在这个章节,会介绍和解释每个方法背后的概念和基本原理.

与IO相关的等待事件troubleshooting-系列2

- - CSDN博客数据库推荐文章
Troubleshooting步骤:. Troubleshooting与IO相关的等待:. 数据库性能调优方面一项关键的方法就是响应时间分析. 找出时间都花费在数据库的哪些环节. 时间是性能调优中最重要的属性. 用户通过交易或批处理任务的响应时间来感知系统的性能. Oracle的响应时间分析使用如下公式:.

与IO相关的等待事件troubleshooting-系列1

- - CSDN博客数据库推荐文章
近来XX应用充分暴露出开发人员最初只关心功能,未考虑性能的问题,夜维、OLTP应用均出现了不同程度的与数据库相关的性能问题. 这个应用所在磁盘的IO较差,原因在于这块磁盘较旧,已进入更换的流程,但短期内还不能更换,对应用是个极大的隐患. 而且也出现过某段时间IO非常差,导致应用处理速度非常缓慢. 针对与IO相关的性能问题,MOS有篇文章(223117.1)介绍的就是与IO相关的troubleshooting,拜读一下.

物理IO与逻辑IO

- - 操作系统 - ITeye博客
IO性能对于一个系统的影响是至关重要的. 一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到IO. 而IO性能的发展,明显落后于CPU的发展. Memchached也好,NoSql也好,这些流行技术的背后都在直接或者间接地回避IO瓶颈,从而提高系统性能. 上图层次比较多,但总的就是三部分.

linux异步IO浅析

- Sepher - kouu's home
知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上. 预先知道这些数据的位置,所以预先发起异步IO读请求. 等到真正需要用到这些数据的时候,再等待异步IO完成. 使用了异步IO,在发起IO请求到实际使用数据这段时间内,程序还可以继续做其他事情).

java nio和io的比较

- - 互联网 - ITeye博客
第一部分:简单介绍NIO.     服务器在合理时间内处理大量客户机的请求的能力取决于服务器使用I/O流的效率,同时为成百上千的客户提供服务的服务器必须能并发的使用I/O服务.     用Java语言写的服务器,由于其线程与客户机之比几乎是一比一,因而易受到大量线程开销的影响,其结果是即导致性能问题,又缺乏伸缩性.

C++之文件IO操作流

- Nanqi - 博客园-首页原创精华区
  前两节介绍了C++的IO流类库,标准设备IO操作流中部分预定义流对象的成员函数以及IO格式控制. 那今天我将继续介绍关于C++中的流操作内容——文件IO操作流fstream. 并会着重讲解C++是如何对文件进行操作的.   文件指存放在外部介质上的数据的集合. 大家都知道操作系统是以文件为单位来对数据进行管理的.

异步IO一定更好吗?

- Wolf - CNode社区
在长林的文章《nodejs异步IO的实现》中提到,NodeJS通过libeio来实现IO操作的异步化,而libeio采用多线程的方式来模拟异步操作. 这里我需要强调一个观点,异步IO虽然是NodeJS一个非常重要的特点,但异步IO并不总是最好的,其他语言也一样. 在我的磁盘上有2个文件,我希望在一个程序里读取这2个文件,每次输出一个字符.

linux AIO (异步IO) 那点事儿

- zffl - CNode社区
这时候进程至少会阻塞10次,而这可能会导致其他的上千个用户请求得不到处理,这当然是不能接受的.. Linux AIO 早就被提上议程,目前比较知名的有 Glibc 的 AIO   与 Kernel Native AIO. 我们用Glibc 的AIO 做个小实验,写一个简单的程序:异步方式读取一个文件,并注册异步回调函数:.