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

作者:Jonathan Lewis

前些天,有人给我发了封邮件,附上了一份10g版本的statpack报告,因为开发人员抱怨系统很慢,但是从statpack的报告上又完全看不出有什么高负载的迹象。

报告头信息显示,机器有4颗cpu,30分钟的快照的信息显示系统非常的空闲

To paraphrase Cary Millsap:如果你不能从汇总的数据中推断一些有用的信息,那么面对开发人员时你只能说:“你认为系统慢--证明给我看”, 然后再跟踪一下他们的行为。

不过,也会有很多情况,汇总的数据也会表现出来一些迹象,至少在一定程度上让你有机会做一个相对好的猜测。

看下面的信息,第一部分是”TOP SQL by cpu”。第二部分是“Instance Activity”;

从上面的信息可以看出两个问题,4个相似的delete语句可能被一个delete_something的过程所调用,(一个接一个的,可能是执行一个cursor,然后进行循环操作)。

接着再看tablescans和物理读:13,368个s的短表tablescans,和110M个blocks扫描。因为仅仅只有一个长表的扫描,和46,000个物理读,所以基本可以推断出大部分的“table scan blocks gotten“来自于短表的扫描,这意味着每次大约8,000 blocks。简单的计算得出每次短表扫描大约640,000行数据。

所以,当前系统有大约13,368次代价非常高的表扫描,并且delete_something过程占了大约8,600个。考虑到每次delete操作仅仅一行,却耗费了大量的开销。

可以打赌,开发所谓的系统慢的情况,肯定是指这个过程比较慢,毕竟,系统好像在这个时间段仅仅只有这个任务在运行。

似乎目标表有结构性的问题,可能类似于缺少索引这样的情况,或者说是索引存在,但是统计信息误导了,也或是绑定变量传入的类型不一致导致了隐式转换,使索引变得不可用。

无论怎么样,汇总的数据还是给出了一些有价值的信息,帮助问题的定位和解决。

警示:

尽管粗略的检查statpack报告得出了极其明显的资源占用,但还是有其它的地方看起来开销比比较大(比如最后一个sql语句)。可能我的分析是正确的,但跟具体开发的抱怨已经关系不大了。

另一方面,定位这个问题其实不需要很久,可以很容易的拿着这个statpack报告跟开发一起review是什么代码表现这么差。

statspack系列5的更多相关文章

  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系列6

    原文:http://jonathanlewis.wordpress.com/2006/12/27/analysing-statspack-6/ 作者: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. IOS如何刷新视图上的显示内容

    大家都知道,UItableView 有个 reloadData的方法,可以tableview刷新视图.而普通的View上面.我们如何刷新视图的呢? 下图是我做的一个用户登录之后显示用户昵称和个性签名还 ...

  2. ssh连接远程linux服务器

    1.在百度搜索输入"putty"然后进行下载,下载后无需安装只需要在文件中找到"putty.exe"双击即可运行. 2.在"Host Name or ...

  3. struts 模型驱动

    情景: 有一个用来处理用户的UserAction 类, 该动作类实现了 ModelDriven 接口. 当用户触发UserAction 动作时, ModelDriven 拦截器将调用相关UserAct ...

  4. C++模板学习随笔

    本文学习内容参考:http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html C++模板 1.模板分为函数模板和类模板两种类型 函数模板针 ...

  5. caffe源码阅读(2)-Layer

    神经网络是由层组成的,深度神经网络就是层数多了.layer对应神经网络的层.数据以Blob的形式,在不同的layer之间流动.caffe定义的神经网络已protobuf形式定义.例如: layer { ...

  6. (转)C++静态库与动态库

    转自:http://www.cnblogs.com/skynet/p/3372855.html C++静态库与动态库 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别, ...

  7. 【笔记-前端】div+css排版基础,以及错误记录

    现在的网站对于前端的排版已经逐渐不使用<table>,而是使用div+css. 使用这种方法的最大好处就在于在维护页面时,可以只维护css而不去改动html. 可是这种方式对于初学者来说可 ...

  8. 初学JqueryMobile(一)

    一.初学2个data标签 标签名称 标签属性 属性说明 备注 data-role page 容器或试图 表示容器的作用 header 标题 content 内容 footer 页脚 data-tran ...

  9. alibaba的COBAR真是强大.

    近好不容易抽空研究了下Cobar,感觉这个产品确实很不错(在文档方面比Amoeba强多了),特此推荐给大家.Cobar是阿里巴巴研发的关系型数据 的分布式处理系统,该产品成功替代了原先基于Oracle ...

  10. C语言-03流程控制

    1.选择结构 char c = '+'; ; ; // 如果要在case后面定义新的变量,必须用大括号{}包住 注意变量的作用域的紊乱 if语句不加括号时,也要注意此问题 switch (c) { c ...