.Net+SQL Server企业应用性能优化笔记—精确查找瓶颈

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 首先我们需要部署一个测试环境,将Web项目的源代码拷到测试环境Web服务器IIS上,使得可以直接通过IE访问我们的网站。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类型为详细模式,如图所示:

image

(2)单击“下一步”按钮,出现要进行跟踪的应用程序类型,这里是将项目发布到IIS中的,所以选择第二个。

image

(3)单击“下一步”按钮,出现ASP.NET应用程序配置界面,设置应用程序起始页、.NET版本、IIS版本和要进行跟踪的端口。

image

(4)单击“下一步”按钮进入代码跟踪选择界面,选择将所有的.NET方法进行跟踪,也可以选择第一个选择,只对有调试文件和源代码的方法进行跟踪。

image

(5)这里我们要跟踪的是首页,所以一旦单击“完成”按钮系统就会打开IE浏览器载入首页,在单击“完成”按钮之前,需要对测试环境数据库开启SQL Server Profiler。SQL Server Profiler负责跟踪数据库上执行的脚本情况,建议将跟踪结果保存到数据库中,这样可以通过SQL语句来查找跟踪的脚本。将跟踪结果保存到数据库的配置如下图:

image

(6)对于跟踪事件,如果是进行简单的性能跟踪,则只需要选中RPC:Completed和SQL:BatchCompleted两个事件即可。至于关注的列,主要是关注TextData、CPU、Reads、Writes、Duration等列,其他列不用特别关心,采用默认选项即可,如图所示:

image

(7)单击SQL Server Profiler中的“运行”按钮,开始对数据库的跟踪,然后单击ANTS Profiler向导中的“完成”按钮,开启对ASP.NET应用程序的跟踪。

(8)系统将打开IE浏览器,提示输入有效的用户名和密码,过几十秒钟后,首页就可以完整展示出来了。SQL Server Profiler中也跟踪到了大量在首页载入时执行的SQL语句和存储过程。

(9)单击ANTS Profiler工具栏中的“获得快照”按钮,系统将会为ASP.NET应用程序建立快照,然后列出从运行开始到快照时刻系统中执行时间最长的方法和方法的源代码,如图所示:

image

(10)从上图中可以看到当前最长时间的一个方法是ViewMainQueryFGS.aspx.cs中的Page_Load方法,该方法花费了13.27秒,而具体花费时间的地方是在Page_Load方法中调用了BindTable方法。

(11)使用VS打开程序源代码,或者是在ANTS Profiler中,点击查看BindTable方法,我们可以看到该方法中有两个函数调用比较耗时,一个是378行,花费了11.1秒,另一个是38行,花费了2.14秒,如图所示。

image

(12)使用同样的方法可以查看到GetDataListBySQL方法具体调用了哪些方法,各个方法多少秒。这里通过查看源代码我们可以知道,该方法最终是调用了数据层中的p_cx_prodplanfinish存储过程,切换到SQL Server Profiler,我们可以看到系统调用该存储过程花费了10.98秒。

image

(13)现在我们再回过头来算一下,整个页面载入花了13.27秒(Page_Load方法的时间),其中光执行这个存储过程就花了10.98秒,显然,这个瓶颈是在存储过程p_cx_prodplanfinish上,首先应该对该存储过程进行优化。另外还有个2.14秒的地方调用了另外一个存储过程,也可以进行优化。

使用同样的方法,用ANTS Profiler和SQL Server Profiler就可以找出具体是哪个函数最耗时,耗了多少时间,哪个存储过程最耗时,耗了多少时间。确定了到底是应用程序消耗了大量时间还是存储过程消耗了大量时间,接下来可以有的放矢了。

目录
相关文章
|
11月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
667 3
|
6月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
9月前
|
SQL 存储 关系型数据库
SQL自学笔记(3):SQL里的DCL,DQL都代表什么?
本文介绍了SQL的基础语言类型(DDL、DML、DCL、DQL),并详细说明了如何创建用户和表格,最后推荐了几款适合初学者的免费SQL实践平台。
575 3
SQL自学笔记(3):SQL里的DCL,DQL都代表什么?
|
9月前
|
SQL 数据挖掘 数据库
SQL自学笔记(2):如何用SQL做简单的检索
本文深入介绍了SQL的基本语法,包括数据查询、过滤、排序、分组及表连接等操作,并通过实际案例展示了SQL在用户研究中的应用,如用户行为分析、用户细分、用户留存分析及满意度调查数据分析。
138 0
SQL自学笔记(2):如何用SQL做简单的检索
|
9月前
|
SQL 数据挖掘 关系型数据库
SQL自学笔记(1):什么是SQL?有什么用?
本文为用户研究新手介绍SQL(结构化查询语言),解释了SQL的基本概念、入门方法及在用户研究中的应用通过实际案例说明,如用户行为分析、用户细分和满意度调查数据分析,展示了SQL在用户研究中的重要作用。
2863 0
SQL自学笔记(1):什么是SQL?有什么用?
|
12月前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
1416 15
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
11月前
|
SQL 监控 Oracle
Oracle SQL性能优化全面指南
在数据库管理领域,Oracle SQL性能优化是确保数据库高效运行和数据查询速度的关键
1413 6
|
11月前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
10月前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
778 0
|
11月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保