Fiddler

fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据。 使用Fiddler无论对开发还是测试来说,在诊断分析问题时,都有很大的帮助。

下载地址:http://www.telerik.com/download/fiddler

工作原理和使用说明可参考:http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html

当然我们如果仅开发WEB系统,使用浏览器自身的开发者工具也可以看到http的请求响应时间。不再赘述。

SQL Profiler

对于企业应用系统,绝大部分单功能的性能问题出现在数据库的SQL脚本执行上,所以当我们发现fiddler中有响应时间较长的http请求时,往往做的第一件事就是跟踪出该功能执行的SQL,找出响应时间最长的SQL脚本,直接执行该SQL,分析IO、执行计划。一般来说,逻辑IO是SQL性能的主要因素。

如果数据库使用的是sqlserver,这个工作会比较简单,,我们可以使用sqlserver Profiler直接使用缺省设置即可(但sqlserver本身其实很复杂,即使是这简单的Profiler工具,在深入使用的时候也有很大的学问,以后有机会我会再针对sqlserver起一个专题)。

使用Oracle数据库的话,可以借助性能视图找出性能较差的SQL。sqlserver也有大量的动态性能视图,不过sqlserver的图形界面工具做的如此优秀,以至于我们只有在整体性能下降等复杂场景下才使用它。

在此我们仅以Oracle为例,列出常用的一些性能视图的SQL脚本。当然如果我们的业务系统本身提供了获取SQL脚本的功能或机制更好。

--.查找前十条性能差的sql(磁盘读取较大,缺少索引或语句不合理)
SELECT *
FROM (SELECT PARSING_USER_ID EXECUTIONS,
SORTS,
COMMAND_TYPE,
DISK_READS,
sql_text
FROM v$sqlarea
ORDER BY disk_reads DESC)
WHERE ROWNUM < 10; SELECT sql_text, hash_value, executions, buffer_gets, disk_reads, parse_calls
FROM V$SQLAREA
WHERE buffer_gets > 10000000 OR disk_reads > 1000000
ORDER BY buffer_gets + 100 * disk_reads DESC;
-- 最近10分钟最消耗CPU的SQL语句:
select sql_text
from (
select sql_id,count(*) as cn
from v$active_session_history
where sample_time > sysdate - 10/24/60
and session_type <> 'BACKGROUND'
and SESSION_STATE = 'ON CPU'
group by sql_id
order by cn desc
) ash, v$sql s
where ash.sql_id=s.sql_id; -- 最近10分钟最消耗IO的SQL语句:
select sql_text
from (
select sql_id,count(*) as cn
from v$active_session_history
where sample_time > sysdate - 10/24/60
and session_type <> 'BACKGROUND'
and WAIT_CLASS='User I/O'
group by sql_id
order by cn desc
) ash, v$sql s
where ash.sql_id=s.sql_id;

在plsql中查看SQL的执行计划时,我一般增加IO和CPU耗费两项。

在sqlplus等工具中,可以使用如下命令查看执行计划与IO

--
explain plan for
select count(1) from emp a where a.dept_no=5;
select * from table(dbms_xplan.display()); --
set autotrace traceonly exp;

【性能诊断】二、单功能场景的性能分析(fiddler、SQL Profiler)的更多相关文章

  1. 【性能诊断】三、单功能场景的性能分析(RedGate Profiler)

    上一篇我们简单的对客户前端和数据库后端的性能问题进行了定位,如果排除了这两块,问题基本就确定在应用服务器上.但是我们往往对应用服务器,或者说应用程序的性能最陌生,一旦出现性能问题往往有无所适从的感觉, ...

  2. 【性能诊断】四、单功能场景的性能分析(RedGate,找到同一个客户端的并发请求被串行化问题)

    问题描述: 客户端js连续发起两个异步http请求,请求地址相同,但参数不同:POST http://*.*.*.*/*****/webservice/RESTFulWebService/RESTFu ...

  3. 使用vs自带的性能诊断工具

    visual studio是个强大的集成开发环境,内置了程序性能诊断工具.下面通过两段代码进行介绍. static void Main( string[] args) { Test1(); Test2 ...

  4. [C#] 网站程序ASP.NET的性能诊断 - CPU分析

    微软提供了标准的CLR性能分析类库 https://github.com/Microsoft/clrmd 这个类库是开源的代码.能够获取CLR runtime里面几乎所有的信息. 如何获取clrmd编 ...

  5. Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)

    概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Ja ...

  6. Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  7. Oracle ADDM性能诊断利器及报告解读

    性能优化是一个永恒的话题,性能优化也是最具有价值,最值得花费精力深入研究的一个课题,因为资源是有限的,时间是有限的.在Oracle数据库中,随着Oracle功能的不断强大和完善,Oralce数据库在性 ...

  8. Redis(二十一):Redis性能问题排查解决手册(转)

    性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息.通过这些信息来分析文章后面提到的一些性能指标. info命令输出的数 ...

  9. 通过 Javacore 诊断线程挂起等性能问题

    http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuzy_jav ...

随机推荐

  1. 20145210 《Java程序设计》第08周学习总结

    第十四章 NIO与NIO2 14.1 认识NIO •NIO概述 •NIO使用频道来衔接数据结点 •在处理数据时,NIO可以让你设定缓冲区容量 •Channel架构与操作 •isOpen():确认Cha ...

  2. C#指针转换

    下表显示了预定义的隐式指针转换. 隐式转换可能在多种情形下发生,包括调用方法时和在赋值语句中. 隐式指针转换       From To 任何指针类型 void* null 任何指针类型 显式指针转换 ...

  3. HDU 4460

    http://acm.hdu.edu.cn/showproblem.php?pid=4460 水题一道,oj时间卡的非常奇怪,把spfa的queue开成全局卡线过,别的全挂了,迪杰斯特拉的手写堆都超时 ...

  4. 动画(Animation) 、 高级动画(Core Animation)

    1 演示UIImage制作的动画 1.1 问题 UIImage动画是IOS提供的最基本的动画,通常用于制作一些小型的动画,本案例使用UIImage制作一个小狗跑动的动画,如图-1所示: 图-1 1.2 ...

  5. 将文件从一台linux机器拷贝到多台的方法

    首先你所操作的各台linux机器间必须设置了ssh免密码登录,具体方法可上网查看.将文件从一台linux机器拷贝到多台分为以下几个步骤: 第一步:创建脚本文件remotecopy.sh #!/bin/ ...

  6. USB协议-USB的包结构及包的分类

    USB是串行总线,所以数据是一位一位地在数据线上传送的.既然是一位一位地传送,就存在着一个数据位先后的问题.USB使用的是LSB在前的方式,即先出来的是最低位数据,接下来是次低位,最后是最高位(MSB ...

  7. UI学习笔记---第五天

    target...action设计模式   代理设计模式   手势识别器 target...action设计模式 耦合是衡量一个程序写的好坏的标准之一,耦合是衡量模块与模块之间关联程度的指标 &quo ...

  8. leetcode 150. Evaluate Reverse Polish Notation ------ java

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  9. ntpdate:no server suitable for synchronization found

    Question: 在使用ntpdate同步时间时,出现了no server suitable for synchronization found的报错. 通过ntpdate -d s2m.time. ...

  10. POJ 3422Kaka's Matrix Travels(最小费用最大流)

                                                            Kaka's Matrix Travels Time Limit: 1000MS   M ...