首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

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

2013-10-06 
与IO相关的等待事件troubleshooting-系列2Troubleshooting步骤:Troubleshooting与IO相关的等待:数据库性能

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

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     % TotalEvent                                               Waits  Time (cs)   Wt Time-------------------------------------------- ------------ ------------ -------direct path read                                    4,232       10,827   52.01db file scattered read                              6,105        6,264   30.09direct path write                                   1,992        3,268   15.70control file parallel write                           893          198     .95db 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消耗。


(未完待续)

热点排行