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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

前面一篇文章中我已经对项目的基本情况进行了简单的介绍,今天就开始动手针对系统进行性能调优。在性能调优上面说实话我算是个菜鸟,并没有太多的经验和扎实的基础,所以有错误的地方希望大家指出。

对于一个BS的系统来说,总共涉及到3个角色:Web服务器、数据库服务器和客户端。性能调优的第一步也是最重要的一步就是查找瓶颈。到底是Web服务器中的程序有问题还是数据库服务器上的SQL查询语句有问题,或者是客户端上的HTML、JS、Flash、SilverLight、图片有问题?就算知道了是哪个角色出现了问题,那么到底是CPU上的问题、内存问题、磁盘IO问题还是网络问题?如果没有找到瓶颈就开始调优,那无异于缘木求鱼。举个简单的例子,如果一个页面客户端请求要10秒钟系统才响应,在网络传输和浏览器展现上用了1秒,Web服务器进行逻辑处理和运算用了8秒,SQL服务器进行数据查询用了1秒,如果错误的将瓶颈判断为SQL服务器,对SQL查询进行调优,废了九牛二虎之力将查询效率提高了100倍(只需要0.01秒),单从SQL调优上来说算是比较成功的,但是从整体而已,客户端请求该调优后的页面还是要花9.01秒,用户可能根本感觉不到10秒和9.01秒的差别,所以整个调优是失败的。

前面说到BS系统中的3个角色:Web服务器、数据库服务器和客户端。要查找瓶颈在哪个角色上,最好的情况是这3个角色是3台不同的计算机,而且这3台计算机最好比较单纯,也就是说Web服务器上就只跑了一个IIS,其他什么服务都不跑,SQL服务器上只运行了SQL Server,客户端只运行了个IE,而且IE只打开了我们要调优的这个系统。一般来说,大多数瓶颈都是出现在WEB服务器或SQL服务器上,很少有在客户端出现瓶颈的。(不过我还真遇到过客户端出现性能瓶颈的情况,由于使用了一个不正确的GIF图片,该图片导致客户端CPU占用100%,使得用户感觉系统响应很慢。)

首先确认瓶颈是否在客户端。调查用户在使用该BS系统时的硬件和软件环境,是不是只有配置低的电脑才感觉系统缓慢?是不是只有使用了FireFox的用户才感觉系统缓慢?用户在使用该系统时是不是CPU占用过高?通过对客户端的一些调查就可以确定瓶颈是否在客户端了。真是在客户端的话那就要优化JS、优化HTML等。

确认了瓶颈没有在客户端,那么剩下的就是2台服务器。要确定到底是哪台服务器的问题,用到的主要工具就是Windows计数器。在使用Windows计数器之前还可以使用Windows的任务管理器来大概的查看一下CPU、内存、进程的使用情况。但是切不可看到数据库服务器的CPU高就说是数据库服务器的问题,也可能是WEB服务器上运行的程序有问题。我以前就遇到过这样的情况,即使是在业务低谷期(下班后,晚上时间)数据库的CPU占用率一直居高不下,经过好长时间的分析,终于找到原因,原来是程序里面写了死循环,在不断的执行数据库操作。另外,就算能够确定是数据库的问题,也不能因为CPU占用高就认为是执行的运算太复杂,其实更大的可能是因为对数据的IO太多。大量的IO操作可能造成CPU负担加重。

在Windows计数器中可以监视系统的内存、CPU、磁盘还有各应用程序自身提供的计数器(SQL Server、Asp.Net等都有自身的计数器)。要监视系统的内存情况可以添加Memory下的Pages/sec ,这个计数器表示物理内存和硬盘上的虚拟内存的分页交互情况,数值越大,表示系统读写虚拟内存频繁,主机繁忙,平均值一般在20以下最好。另外还有大量的ASP.NET和SQL Server的计数器,我就不一一介绍了。

如果环境允许,我们将业务系统转移到测试环境中,而且是将Web服务器和SQL服务器分开,同时如果能够让测试环境和生产环境的硬件配置和网络配置这些都差不多那就更好了。使用LoadRunner或者是VS或者其他压力测试工具模拟多个用户对性能有问题的页面进行压力测试,同时开启服务器上的相关计数器。通过对两个服务器的监控,基本上就可以判断出到底哪个服务器存在性能瓶颈。

如果要获得更详细的性能瓶颈信息,那么需要获得程序的源代码,然后修改源代码在其中加入记录时间的代码,在页面初始化的时候、调用数据库之前、调用数据库之后、页面Render完成之后分别加入记录时间的代码,将这些时间记录下来,然后可以得到页面载入的时间,调用数据库花费的时间。比如页面载入花了10秒钟,从时间记录上看,调用数据库花了9秒钟,那么说明性能的瓶颈是在数据库上,而不是在Web服务器上。

另外还有一种办法可以获得函数调用的时间,那就是使用.net性能跟踪的工具ANTS Profiler,这个工具是Red Gate公司出品的一款工具,十分好用,在我以前的博客中也进行了介绍。使用这个工具Host到Web服务器的IIS上,然后打开IE浏览器我们就做业务操作,该工具就可以跟踪出打开某个页面,做某些页面操作的时候调用每个函数的时间,同时也列出了哪些函数调用比较费时。在打开ANTS Profiler进行.net性能跟踪的同时,SQL Server上也应该打开SQL Server Profiler对数据库进行跟踪。比如在页面上我们执行的一个查询,系统返回了查询的表格,通过ANTS Profiler跟踪得到查询操作耗时9.2秒,而我们在SQL Server Profiler中看到查询数据库耗时(Duration字段)8921ms,整个操作是9.2秒,数据库操作就花了8.9秒,显然瓶颈是在数据库上。

本文转自深蓝居博客园博客,原文链接:http://www.cnblogs.com/studyzy/archive/2008/11/12/1332249.html,如需转载请自行联系原作者


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
4月前
|
SQL 存储 数据库
SQL Server性能优化策略与实践
在使用Microsoft SQL Server(简称MSSQL)进行数据库管理时,性能优化是确保系统高效运行、提升用户体验的关键环节
|
开发框架 NoSQL .NET
ASP.NET Core微服务(六)——Redis效率与sqlserver数据库对比
ASP.NET Core微服务(六)——Redis效率与sqlserver数据库对比
326 0
ASP.NET Core微服务(六)——Redis效率与sqlserver数据库对比
|
SQL 索引
SQL Server性能优化之CPU
SQL Server CPU性能优化
1323 0
|
SQL 大数据 数据库
一起谈.NET技术,Sql Server性能优化——Partition(管理分区)
  在企业管理器中,虽然有“管理分区”的菜单,里面的内容却可能与你的预想不同,这里并没有提供直接对分区进行操作的方法,所以一些普通的操作,比如“增加分区”、“删除分区”之类的操作就需要通过脚本实现了。   增加分区(Split Partition)   “增加分区”事实上就是将现有的分区分割开,基于此,在SQL Server中应用的是Split操作。
1441 0
|
SQL 数据库 索引
SQL Server 性能调优培训引言
原文:SQL Server 性能调优培训引言      大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录。       作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于是我通过网络找了各种MS SQ...
1105 0