原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-6/

作者:Jonathan Lewis

下面是一段时间以前网络上贴出来的一个AWR快照的片段,并有一段文字描述为何值得看一下,摘抄主要来自Don Burleson的文章:

这里是一个10g的oracle的例子,log buffer设置的过小,只有512k:

对于这个数据集,我是有一个问题,这里没有任何的数据来解释这个现象,是否打算要给我们一些线索来发现log buffer设置的过小,或者说没有这个意图,为何还要把它粘贴出来。(还有一点就是文章也没有任何一点来解释是如何发现log buffer的问题的)

这份数据集得另一个问题是没有任何的其它信息,比如有多少颗cpu,快照是多久一次的。

当然,事实是’log buffer space’的等待事件并没有出现在top 5的等待事件中,这会让你怀疑log buffer并不是最重要的问题,并且作者在下一段的awr报告中没有贴出来’log Buffer space’等待基线更令人发怒。

那么,从这个片段中我们到底能得到什么?我们能否发现一些线索来解释log buffer设置太小?

我们被告知buffer的大小是512k,假设DBA没有调整这个参数,而是使用的默认的log buffer大小,系统有1到4个cpu,再没有其它额外的信息了。

从数据上可以看出,报告中的除了cpu时间外的大部分时间都花费在后台进程处理上;仅仅log file sync的时间是应用的等待,这部分时间跟log file parallel write的时间有点相仿,而这趋向于说明这是一个低并发的系统(当有一个log file 写的时候,平均上,仅仅只有一个进程在等待写的完成,而且等待的总时间大致等于写所花费的时间)。但这并没有给出太多的信息。

写的平均时间大致是:

  • log file parallel write – 30.1 m/s
  • db file parallel write – 40.8 m/s
  • control file parallel write – 50.7 m/s

这个结果并不怎么好,如果有抱怨性能问题,低速的磁盘设备可能是主要原因。

当然,log buffer space通常在系统有一定的并发活动的时候出现的,如果一个用户提交了commit,那么可能会处在log file sync等待上,而另外的一些用户则会等待log buffer space。

当然也有例外,如果系统在持续的产生大量的redo 日志,而日志写进程并非由commit事件引起的,比如log buffer超过了大小的1/3. 这种情况可以解释log file parallel write的等待为什么要比log file sync多,总的等待时间也比sync要多。

不管怎样,log buffer space等待时间可能有13s,这台服务器到底出现了什么问题,因为低速的log file parallel write而产生了长达278s的log file sync等待事件。如果提高log buffer的大小,可能系统会花费额外的13s时间在log file sync等待上,所以这个系统的问题可能是低速的磁盘。

当然,我不能仅仅根据‘top 5’等待事件就诊断性能问题,但是,如果你仅仅只有这些信息,而又不能证明提供的诊断,那么就需要更多的信息。这里我需要检查下load profile(系统的负载情况,比如用户请求,执行次数,事务数),再看下除了top 5以外的时间花费在什么地方。

推断:这个系统看起来像是单cpu,低速磁盘驱动器的单用户系统,可能就是一个测试的windows台式机。

实际上:如果你认为这些统一信息就可以帮你定位到过小的log buffer设置,恐怕不太可能。

例子2:

这个是从同一个作者那得到的另一个样本,展示了一个过小的log bufferawr 报告的片段。下面就是awr的报告,DBA没有在init.ora文件中设置log buffer 参数。

 

更新 1st seqt 2010最近我又重新读了这篇文章,发现我没有阐述为什么我不同意Mr. Burleson关于第二段统计信息的解释,这里做一个补充。

首先要说的是:确实有log buffer space的等待,12次,总共3s等待时间,所以认为增加log buffer大小能够缓解这种情况,但如果要真正的调整log buffer,还需要再慎重一些。

  • 首先:无论你设置log buffer为多大,当发生log file 切换的时候,会产生一些log buffer space等待,尤其是在相对比较繁忙的系统上。所以当log buffer space与log file sync等待相比非常少时,可以忽略log buffer space等待。
  • 其次:当提高了log buffer的大小,那么在日志写进程触发时,服务器进程可以写更多的日志到log buffer当中去,这就是增加log file sync的等待时间。(在早期的oracle版本中,log buffer space和log file sync等待是一个经典的权衡问题)。
  • 最后,花费在cpu上的时间超过了163,000秒,而只有大约3S的log buffer space等待,而过高的cpu负载会对log buffer的清理有边际效应,会降低其速率,而引起log buffer space等待。

所以,暂时忽略log buffer空间的问题,极可能是另外一个问题引起的结果,把精力花在真正的问题上面。

在top 5中,最重要的指标是cpu,很明显,找到花费cpu时间最多的sql 语句,可以通过检查awr报告中的SQL ordered by CPU”, “SQL ordered by Executions” , Segments by Logical Reads”.

快速的看下top 5中的其它等待事件,也会有一些指导作用。

Log file sync的数量非常大,而且大致与log file write相当,这就暗示着系统有大量的小事务在进行(如果系统仅仅有少量的大事务,那么log file write的数量肯定比log file syncs多了)。

观察一下时间,你会发现log file writes的速度(1.3s)要比log file syncs(4.6s)快。差异的时间主要花费在日志写进程需要“redo synch message”的消息来确认写完成。这是一个经典的暗示,cpu饥饿。如果cpu饥饿造成log write进程很难得到日志刷新到磁盘的消息,这会造成buffer会填满,而产生log buffer space 等待。

另外, “SQL*Net more data to client” 的等待次数也比较高,可能是一些查询返回了大量的数据,可以通过查看SQL*Net roundtrips to/from client的次数和传输的数据量,来确定系统当前是有许多小的查询,还是大数据集的查询。Round-trip 活动能够加重数据库的负载,需要小心,sql语句可以在报告的部分展示。

Top 5中另外的一个指标 “db file sequential read” ,平均时间是5.5m/s。如果这里有statsapack报告,我希望看下event histogram报告,来判断这不会是大量的快速读(本地缓存的数据,读是cpu密集型的)。我们需要定位到cpu的利用率在何处。

最后一个指标,是“log file sequential read” ,这是一个和自身关系不大的等待事件,接下来的几个星期我会单独阐述它,这里可以简单的认为是归档进程读online redo log的活动。

statspack系列6的更多相关文章

  1. statspack系列8

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-8/ 作者:Jonathan Lewis 在前面的关于stat ...

  2. statspack系列7

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-7/ 作者:Jonathan Lewis 这是一段Oracle ...

  3. statspack系列4

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-4/ 作者:Jonathan Lewis 使用statspac ...

  4. statspack系列3

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-3/ 作者:Jonathan Lewis 下面的例子中的结果并 ...

  5. statspack系列2

    Analysing Statspack 2       命中率陷阱 原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspa ...

  6. statspack系列5

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-5/ 作者:Jonathan Lewis 前些天,有人给我发了 ...

  7. 蓝色的成长记录——追逐DBA(8):为了夺回SP报告,回顾oracle的STATSPACK实验

    ***********************************************声明*************************************************** ...

  8. .Net程序员学用Oracle系列(30):零碎补充、最后总结(The End)

    1.同义词 2.Flashback 技术 3.连接字符串的写法 4.转义字符 & 特殊运算符 5.文件类型 6.查看参数 & 修改参数 7.AWR 工具 8.学习方法 & 学习 ...

  9. 【等待事件】等待事件系列(5.1)--Enqueue(队列等待)

    [等待事件]等待事件系列(5.1)--Enqueue(队列等待)   1  BLOG文档结构图   2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可 ...

随机推荐

  1. dbms_job涉及到的知识点

    用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...

  2. (六)Hibernate 映射类型

    所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:基本类型映射 例子: hibernate.cfg.xml < ...

  3. ASP.NET跨页面传值技巧

      1 使用QueryString变量    QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用  ...

  4. ipod nano 无法添加mp4视频 电影失败解决方法

    我的是nano7. 导入mp4各种错误, 同步资料库 无效等等方法都没用. 后来发现当中 多个mp4,少年pi.mp4竟然导入成功, 怀疑是mp4格式不符合nano 于是:(测试后成功) 先拉到资料库 ...

  5. (转)UIColor,CGColor,CIColor三者的区别和联系

    最近看了看CoreGraphics的东西,看到关于CGColor的东西,于是就想着顺便看看UIColor,CIColor,弄清楚它们之间的区别和联系.下面我们分别看看它们三个的概念: 一.UIColo ...

  6. foreach的一点理解

    首先什么样的数据才能实现foreach 1 实现IEnumerable这个接口 2 有GetEnumerable()这个方法 然后为啥实现这个接口或者有这个方法就可以实现foreach遍历 首先我先用 ...

  7. MyBatis 拦截器 (实现分页功能)

    由于业务关系 巴拉巴拉巴拉 好吧 简单来说就是 原来的业务是 需要再实现类里写 selectCount 和selectPage两个方法才能实现分页功能 现在想要达到效果是 只通过一个方法就可以实现 也 ...

  8. 4MLinux7.0 服务器配置详解 别名TheSSS

    TheSSS download 特性:thttp,php5.5.1,mysql,vsftp,proxy,firewall,带rpm管理器.更新频繁. 官方帮助文件:View (新窗口打开) 发现国内4 ...

  9. 更新ACCESS数据库出现“字段太小而不能接受所要添加的数据的数量。试着插入或粘贴较少的数据。”的解决方法

    今天进行数据调试时出现“字段太小而不能接受所要添加的数据的数量.试着插入或粘贴较少的数据.”,跟踪发现是在更新数据库的数据时出现的. 打开数据库表格发现出错的数据字段类型被定义为“文本”,也就是数据最 ...

  10. input多选图片与显示

    input标签 在使用input选择文件时遇到了 在遍历input file.files 只显示最后一个,修改如下: CSS: <style type="text/css"& ...