首先我们需要部署一个测试环境,将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企业应用性能优化笔记—精确查找瓶颈的更多相关文章

  1. 《Microsoft Sql server 2008 Internals》读书笔记--第六章Indexes:Internals and Management(1)

    <Microsoft Sql server 2008 Internals>索引文件夹: <Microsoft Sql server 2008 Internals>读书笔记--文 ...

  2. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  3. SQL SERVER 数据库表同步复制 笔记

    SQL SERVER 数据库表同步复制 笔记 同步复制可运行在不同版本的SQL Server服务之间 环境模拟需要两台数据库192.168.1.1(发布),192.168.1.10(订阅) 1.在发布 ...

  4. SQL Server-聚焦存储过程性能优化、数据压缩和页压缩提高IO性能(一)

    前言 关于SQL Server基础系列尚未结束,还剩下最后一点内容未写,后面会继续.有园友询问我什么时候开始写SQL Server性能系列,估计还得等一段时间,最近工作也比较忙,但是会陆陆续续的更新S ...

  5. windows系统与SQL SERVER 2008数据库服务性能监控分析简要

    软件系统性能测试体系流程介绍之windows系统与SQL SERVER 2008数据库服务性能监控分析简要 目前大部分测试人员对操作系统资源.中间件.数据库等性能监控分析都是各自分析各自的监控指标方式 ...

  6. SQL Server添加MDW性能监控报表(转载)

    10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...

  7. Android App性能优化笔记之一:性能优化是什么及为什么?

    By Long Luo   周星驰的电影<功夫>里面借火云邪神之口说出了一句至理名言:“天下武功,唯快不破”. 在移动互联网时代,同样如此,留给一个公司的窗口往往只有很短的时间,如何把握住 ...

  8. U3D开发性能优化笔记(待增加版本.x)

    http://blog.csdn.net/kaitiren/article/details/45071997 此总结由自己经验及网上收集整理优化内容 包括: .代码方面: .函数使用方面: .ui注意 ...

  9. Sql Server优化之索引提示----我们为什么需要查询提示,Sql Server默认情况下优化策略选择的不足

    环境: Sql Server2012 SP3企业版,Windows Server2008 标准版 问题由来: 最近在做DB优化的时候,发现一个存储过程有非常严重的性能问题, 由于整个SP整体逻辑是一个 ...

随机推荐

  1. ABP官方文档翻译 3.3 仓储

     仓储 默认仓储 自定义仓储 自定义仓储接口 自定义仓储实现 基础仓储方法管理数据库连接 查询 获取单个实体 获取实体列表 关于IQueryable 自定义返回值 插入 更新 删除 其他 关于异步方法 ...

  2. BZOJ 3238: [Ahoi2013]差异 [后缀自动机]

    3238: [Ahoi2013]差异 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2512  Solved: 1140[Submit][Status ...

  3. Python tutorial阅读之使用 Python 解释器

    配置环境变量后,一般可以直接通过Python或指定Python版本号来调用Python. Python 解释器有些操作类似 Unix shell:当使用终端设备(tty)作为标准输入调用时,它交互的解 ...

  4. WPF ----在UserControl的xaml里绑定依赖属性

    场景:在定义wpf 用户控件的时候,希望使用时设置自定义的属性来改变用户控件里的状态或内容等. 下面直接上实例代码: 用户控件的后台代码,定义依赖属性 public partial class MyU ...

  5. APACHE服务器出现No input file specified.解决方案

    thinkcmf程序默认的.htaccess里面的规则: <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_F ...

  6. 我的2017年终总结(PF项目框架设计心得分享 1.0rc new)

    一晃眼又过去了一年,在这一年里尽管有许多不如意的事,却阻挡不了我前进的脚步.先用一句话来总结去年一年的状态,那就是“无休无止的忙碌”.而这样的忙碌状态对我来说是不可取的,因为匮乏的忙碌只能让头脑处于一 ...

  7. php常用面试知识点

    1.php基础 2.mysql基础 3.js基础 4.jq 5.正则 6.面向对象 7.分页类,购物车类,数据库类,上传类,图片处理类 8.smarty模板技术(以及自己写模板引擎) 9.ajax 1 ...

  8. Date 类 02

    Date类 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理.这里简单介绍一下Date ...

  9. DxPackNet 3.音频捕捉(录音)

    用DxpackNet捕捉音频其实很简单 1.初始化控件 IDxMicrophCapture microphone; private void Form1_Load(object sender, Eve ...

  10. python3.6+django2.0 一小时学会开发一套学员管理系统demo

    1.在pycharm中新建project demo1 添加app01 点击create按钮完成新建 2.在demo项目目录下新建目录static,并在settings.py中追加代码: STATICF ...