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. 查单神器v1.0 升级 →B站看鬼畜神器v1.0

    去年学校实习,我去了一家快递输单公司工作.工作任务就是把运单图片上的内容(寄件人,地址之类)输入到公司的数据库里.每天输单结束后,还要对一些容易错的运单进行排查.单量多的时候一天甚至要查千张以上的运单 ...

  2. JQuery 实现倒计时

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 第一个Sprint冲刺第三天

    讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:如何将新学的技术应用于四则运算项目中 讨论地点:宿舍 进展:跟预期相差不远

  4. LeetCode Sum Root to Leaf Numbers(DFS)

    题意: 给一棵二叉树,每个节点上有一个数字,范围是0-9,将从根到叶子的所有数字作为一个串,求所有串的和. 思路: 普通常规的DFS. /** * Definition for a binary tr ...

  5. 进程process和线程thread的关系

    写的很好很明白cpu每次只能执行一个进程,所以其他进程会挂起 在一个进程中,允许存在n个线程,n个线程共享这个进程中的资源 多个线程在共享的时候存在资源互斥,一次只能一个线程,会需要加锁 一次存在固定 ...

  6. htseq-count 的使用

    Given a file with aligned sequencing reads and a list of genomic features, a common task is to count ...

  7. javascript 字符串方法名调用

    项目中有时候需要通过字符串传递方法名称,供页面调用 var ParameterDefaultCallMethod = Request("ParameterDefaultCallMethod& ...

  8. python矩阵运算 不断收集整理

    python矩阵运算 转自:http://blog.sina.com.cn/s/blog_5f234d4701012p64.html Python使用NumPy包完成了对N-维数组的快速便捷操作.使用 ...

  9. rsync 使用示例

    导读 Rsync(remote sync) 是用于同步某一位置文件和目录到另一位置的有效方法.备份的位置可以在本地服务器或远程服务器.本站之前亦有介绍rsync的安装配置和教程,详看<rsync ...

  10. 2015GitWebRTC编译实录5

    2015.07.20 libaudio_encoder_interface/libaudio_decoder_interface 编译通过将encoder,decoder两个lib合并了,后面需要看看 ...