.Net+SQL Server企业应用性能优化笔记—精确查找瓶颈
首先我们需要部署一个测试环境,将Web项目的源代码拷到测试环境Web服务器IIS上,使得可以直接通过IE访问我们的网站。SQL Server环境可以部署在同一台机器上,条件允许的话有专门的数据库测试服务器那当然是更好,没有也无所谓。部署完测试环境后保证我们这个测试环境没有其他用户在访问,只有我们访问,免得其他用户的操作影响了我们。
假设我们的网站在首页打开的时候很慢,需要10多秒钟才能打开,首页打开是调用了多个函数,函数中调用了多个存储过程,到底是哪个函数慢?到底是哪个存储过程慢?是Web服务器上的函数执行花费了大量的时间还是数据库中的存储过程执行花费了大部分时间?到底每个函数,每个存储过程各自花费了多少时间呢?这些问题就需要通过ANTS Profiler和SQL Server Profiler来解决。
使用ANTS Profiler和SQL Server Profiler进行瓶颈查找的过程如下:
(1)在Web服务器上安装并打开ANTS Profiler,在Profiler项目向导中选择Profiler类型为详细模式,如图所示:
![]()
(2)单击“下一步”按钮,出现要进行跟踪的应用程序类型,这里是将项目发布到IIS中的,所以选择第二个。
![]()
(3)单击“下一步”按钮,出现ASP.NET应用程序配置界面,设置应用程序起始页、.NET版本、IIS版本和要进行跟踪的端口。
![]()
(4)单击“下一步”按钮进入代码跟踪选择界面,选择将所有的.NET方法进行跟踪,也可以选择第一个选择,只对有调试文件和源代码的方法进行跟踪。
![]()
(5)这里我们要跟踪的是首页,所以一旦单击“完成”按钮系统就会打开IE浏览器载入首页,在单击“完成”按钮之前,需要对测试环境数据库开启SQL Server Profiler。SQL Server Profiler负责跟踪数据库上执行的脚本情况,建议将跟踪结果保存到数据库中,这样可以通过SQL语句来查找跟踪的脚本。将跟踪结果保存到数据库的配置如下图:
![]()
(6)对于跟踪事件,如果是进行简单的性能跟踪,则只需要选中RPC:Completed和SQL:BatchCompleted两个事件即可。至于关注的列,主要是关注TextData、CPU、Reads、Writes、Duration等列,其他列不用特别关心,采用默认选项即可,如图所示:
![]()
(7)单击SQL Server Profiler中的“运行”按钮,开始对数据库的跟踪,然后单击ANTS Profiler向导中的“完成”按钮,开启对ASP.NET应用程序的跟踪。
(8)系统将打开IE浏览器,提示输入有效的用户名和密码,过几十秒钟后,首页就可以完整展示出来了。SQL Server Profiler中也跟踪到了大量在首页载入时执行的SQL语句和存储过程。
(9)单击ANTS Profiler工具栏中的“获得快照”按钮,系统将会为ASP.NET应用程序建立快照,然后列出从运行开始到快照时刻系统中执行时间最长的方法和方法的源代码,如图所示:
![]()
(10)从上图中可以看到当前最长时间的一个方法是ViewMainQueryFGS.aspx.cs中的Page_Load方法,该方法花费了13.27秒,而具体花费时间的地方是在Page_Load方法中调用了BindTable方法。
(11)使用VS打开程序源代码,或者是在ANTS Profiler中,点击查看BindTable方法,我们可以看到该方法中有两个函数调用比较耗时,一个是378行,花费了11.1秒,另一个是38行,花费了2.14秒,如图所示。
![]()
(12)使用同样的方法可以查看到GetDataListBySQL方法具体调用了哪些方法,各个方法多少秒。这里通过查看源代码我们可以知道,该方法最终是调用了数据层中的p_cx_prodplanfinish存储过程,切换到SQL Server Profiler,我们可以看到系统调用该存储过程花费了10.98秒。
![]()
(13)现在我们再回过头来算一下,整个页面载入花了13.27秒(Page_Load方法的时间),其中光执行这个存储过程就花了10.98秒,显然,这个瓶颈是在存储过程p_cx_prodplanfinish上,首先应该对该存储过程进行优化。另外还有个2.14秒的地方调用了另外一个存储过程,也可以进行优化。
使用同样的方法,用ANTS Profiler和SQL Server Profiler就可以找出具体是哪个函数最耗时,耗了多少时间,哪个存储过程最耗时,耗了多少时间。确定了到底是应用程序消耗了大量时间还是存储过程消耗了大量时间,接下来可以有的放矢了。
.Net+SQL Server企业应用性能优化笔记—精确查找瓶颈的更多相关文章
- 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)
<Microsoft Sql server 2008 Internals>索引文件夹: <Microsoft Sql server 2008 Internals>读书笔记--文 ...
- SQL Server 聚合函数算法优化技巧
Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...
- SQL SERVER 数据库表同步复制 笔记
SQL SERVER 数据库表同步复制 笔记 同步复制可运行在不同版本的SQL Server服务之间 环境模拟需要两台数据库192.168.1.1(发布),192.168.1.10(订阅) 1.在发布 ...
- SQL Server-聚焦存储过程性能优化、数据压缩和页压缩提高IO性能(一)
前言 关于SQL Server基础系列尚未结束,还剩下最后一点内容未写,后面会继续.有园友询问我什么时候开始写SQL Server性能系列,估计还得等一段时间,最近工作也比较忙,但是会陆陆续续的更新S ...
- windows系统与SQL SERVER 2008数据库服务性能监控分析简要
软件系统性能测试体系流程介绍之windows系统与SQL SERVER 2008数据库服务性能监控分析简要 目前大部分测试人员对操作系统资源.中间件.数据库等性能监控分析都是各自分析各自的监控指标方式 ...
- SQL Server添加MDW性能监控报表(转载)
10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...
- Android App性能优化笔记之一:性能优化是什么及为什么?
By Long Luo 周星驰的电影<功夫>里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”. 在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住 ...
- U3D开发性能优化笔记(待增加版本.x)
http://blog.csdn.net/kaitiren/article/details/45071997 此总结由自己经验及网上收集整理优化内容 包括: .代码方面: .函数使用方面: .ui注意 ...
- Sql Server优化之索引提示----我们为什么需要查询提示,Sql Server默认情况下优化策略选择的不足
环境: Sql Server2012 SP3企业版,Windows Server2008 标准版 问题由来: 最近在做DB优化的时候,发现一个存储过程有非常严重的性能问题, 由于整个SP整体逻辑是一个 ...
随机推荐
- Spring源码情操陶冶-PathMatchingResourcePatternResolver路径资源匹配溶解器
本文简单的分析下spring对某个目录下的class资源是如何做到全部的加载 PathMatchingResourcePatternResolver#getResources PathMatching ...
- Mybatis使用过程问题总结
Mybatis配置文件 test语句问题 字符串比较问题 示例语句:<if test="isIbatis == 'Y'"></if> 问题:NumberEx ...
- 制作 alipay-sdk-java包到本地仓库
一.首先 搭建好maven 基础环境,本地可以运行maven 命令 从支付宝官网上下载sdk https://doc.open.alipay.com/doc2/detail?treeId=54& ...
- 自己动手实践 spring retry 重试框架
前序 马上过年了,预祝大家,新年快乐,少写bug 什么是spring retry? spring retry是从spring batch独立出来的一个能功能,主要实现了重试和熔断. 什么时候用? 远程 ...
- scope_lock与lock_guard区别
lock_guard:更加灵活的锁管理类模板,构造时是否加锁是可选的,在对象析构时如果持有锁会自动释放锁,所有权可以转移.对象生命期内允许手动加锁和释放锁. scope_lock:严格基于作用域(sc ...
- Java线程池ThreadPoolExector的源码分析
前言:线程是我们在学习java过程中非常重要的也是绕不开的一个知识点,它的重要程度可以说是java的核心之一,线程具有不可轻视的作用,对于我们提高程序的运行效率.压榨CPU处理能力.多条线路同时运行等 ...
- Java堆栈内存总结
在Java中,主要存在四块内存空间,除了保存static类型属性的全局数据区,以及保存虽有方法定义的全局代码区之外,程序员更多的在乎内存中的另外两种区域--对象的生存空间堆(heap)和方法调用及变量 ...
- 用最简单的例子实现jQuery图片即时上传
[http://www.cnblogs.com/Zjmainstay/archive/2012/08/09/jQuery_upload_image.html] 最近看了一些jQuery即时上传的插件, ...
- CentOS常用命令大全
一:使用CentOS常用命令查看cpumore /proc/cpuinfo | grep "model name" grep "model name" /pro ...
- MySql 性能调优策略
本主题调优针对于my.cnf配置来做详细的参数说明 示例配置如下: #cat my.cnf # MySQL client library initialization. [client] port = ...