改进ie最大连接数与用windows性能监视器监视sql server 2005

    最近公司为客户新上线了一个系统,主要做为日常办公之用。试用两天后,客户反映系统速度很慢,主要表现为首页面加载速度慢。下图为首页概况:


 

      这是一个老日常办公系统的增强版,所以页面虽然是新的,但页面与数据大部份都是旧的。首页只是个大框架,然后把原系统的各个部份做成单独的页面放入进来。其中菜单部份用iframe套了老系统的菜单,任务列表通过访问原系统的web services获取数据,工作区是个tab页,第一个tab页是一些信息公告,用了近十个iframe来套老系统的页面。

      我们系统大量采用了ajax,在页面还没有加载出来的时候,其空白处就显示:"加载中..." 。客户反映,主要是ie6用户,有时候首页上满页面都是加载中...要等近10秒才能显示出来。

      我的第一个返映就是:是不是因为ie6的js引擎效率低导致的,通过用httpwatch观查,发现其更重要的原因是http请求比较多,且系统返回数据时间较长,造成了很严重的排队现象。这就要从两个方面来解决了:服务端与客户端。

      首先是客户端。ie6不仅js引擎效率低,且对于同一服务器只能有两个并发解求,当http请求较多的时候,页面加载速度慢的问题就特别明显。解决方法是下载MS的一个ie补丁,它可以将ie6/ie7的最大连接数由2个改为10个。

      服务端分为web服务器与数据库服务器。我首先查看了Web服务器:一个16核11G内存万转硬盘的怪物。 发现基本没有负载!!!CPU的使用率在1%以下!NB啊。然后去查看了数据库服务器,果真,问题出在这里!

      由于是生产环境,sql server 是不能用D版滴。客户为了节约预算,将这个新系统的数据库与别的一些系统的数据库放到了一台机器上。结果我今天去看的时候,发现虽然内存与硬盘负载曲线都比较低且稳定,但CPU的负载却长期70%以上,有时达到100%的时间长达几秒钟!CUP成了整个系统最大的瓶颈!解决的方法很简单,我们找了另外一台现有的且负载较低的数据库服务器,将数据库移过去就行了!

      问题到这里并没有结束。为什么CUP的负载这么大?据我所知除了这个新系统的数据库,机子上就只有另外一个系统的数据库。且即使把这个新系统移走后,CPU的负载仍没有明显的改观,长期60%到80%,且这是下午了,根本不是系统最繁忙的时候。我在网上找了找资料,然后打开windows的性能监视器,并加入指定计数器进行观查,发现最大的问题在于数据库的整表扫描过多!网上说这个监控数最好不要超过2,但是这个系统长期100+到200+,且动不动就死锁一下,难怪CPU的负载高,都去做这事了~~~

      

      以下是我总结的常见的sqlserver 性能计数器

      

 

指标描述

指标范围

指标单位

SQL Server中访问方法( Access Methods

全表扫描 / 

( Full Scans/sec)  

 

每秒全表扫描的数量。全表扫描可以是基本表扫描或全索引扫描。由于全表扫描需要耗费大量时间,因此全表扫描的频率过高的话,会影响性能。

如果该指标的值比 1 2 高,应该分析设计的查询以确定是否确实需要全表扫描,以及 SQL 查询是否可以被优化。

次数 /

Page splits/sec

由于数据更新操作引起的每秒页分割的数量。

 

 

SQL Server中缓冲器管理器( Buffer Manager

缓冲区高速缓存命中率 (Buffer Cache  

Hit Ratio %

 

指在缓冲区高速缓存中找到而不需要从磁盘中读取的页的百分比。该比率是缓存命中总次数与缓存查找总次数之比。经过很长时间后,该比率的变化很小。由于从缓存中读取数据比从磁盘中读取数据的开销小得多,一般希望该比率高一些。

该指标的值最好为 90% 或更高。通常可以通过增加 SQL Server 可用的内存数量来提高该指标的值。增加内存直到这指标的值持续高于 90%,表示 90% 以上的数据请求可以从数据缓冲区中获得所需数据。

%

读的页 / 

( Page Reads/sec)

指每秒发出的物理数据库页读取数。该指标主要考察数据库从磁盘读取数据的频率。因为物理 I/O 会耗费大量时间,所以应尽可能地减少物理 I/O 以提高性能。 

该指标的值应尽可能的小。可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,以降低该指标的值。 

个数 /

写的页 / 

( Page Writes/sec)

指每秒执行的物理数据库写的页数。该指标主要考察数据库向磁盘写入数据的频率。因为物理 I/O 会耗费大量时间,所以应尽可能地减少物理 I/O 以提高性能。 

该指标的值应尽可能的小。可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,以降低该指标的值。 

个数 /

惰性写 / 

( Lazy Writes/sec)

指每秒被缓冲区管理器的惰性编写器写入的缓冲区数。惰性编写器是一个系统进程,用于成批刷新脏的老化的缓冲区(包含更改的缓冲区,必须将这些更改写回磁盘,才能将缓冲区重用于其他页),并使它们可用于用户进程。 

该指标的值 最好为 0

个数 /

Cache Manager(高速缓存管理器)(Plan Cache)

高速缓存命中率(Cache Hit Ratio%

指高速缓存命中次数和查找次数的比率。在SQL Server中,Cache包括Log CacheBuffer Cache以及Procedure Cache,该指标是指所有Cache的命中率,是一个总体的比率。

该指标的值越高越好。如果该指标的值持续低于80%,就需要增加更多的内存。

 

SQL Server中闩(Latches

平均闩等待

时间(毫秒)

(Average Latch

Wait Time(ms))

指一个SQL Server线程必须等待一个闩的平均时间。

如果该指标的值很高,则系统可能正经历严重的资源竞争问题。

毫秒

闩等待/

(Latch Waits/sec)

指在一个闩上每秒的平均等待数量。

如果该指标的值很高,则系统可能正经历严重的资源竞争问题。

个数/

General Statistics

user connections

指系统中活动的SQL连接数。该计数器的信息可以用于确定系统得最大并发用户数

 

个数

Locks

lock requests/sec

指每秒请求的锁个数。

通过优化查询来减少读取次数,可以减少该计数器的值。

个数/

 

lock timeouts/sec

指每秒由于等待对锁的授权的锁请求数,

理想情况下,该计数器的值为0

 

lock waits/sec

指每秒无法立刻得到授权而超时的锁请求数,

理想情况下,该计数器的值应该尽可能为0

 

Average Wait Time

线程等待某种类型的锁的平均等待时间

通过优化查询来减少读取次数,可以减少该计数器的值。

毫秒

number of deadlocks/sec

指每秒导致死锁的锁请求数。死锁对于应用程序的可伸缩性非常有害,并且会导致恶劣的用户体验。该计数器必须为0

锁加在SQL Server资源上(如在一个事务中进行的行读取或修改),以防止多个事务并发使用资源。应尽可能少使用锁以提高事务的并发性,从而改善性能。

个数/

Memory manager

memory grants pending

指每秒等待工作空间内存授权的进程数。该计数器应该尽可能接近0,否则预示可能存在着内存瓶颈

 

 

Lock blocks

服务器上锁定块的数量,锁是在页、行或者表这样的资源上。

不希望看到一个增长的值。

 

Total server memory

sql server服务器当前正在使用的动态内存总量.

 

 

SQL statistics

batch requests/sec

指每秒向服务器提交批的请求次数。

该计数器被用来确定系统的负载大小

 

SQL compilations/sec

指每秒编译数。

理想状态下该计数器的值应该低,如果batch requests/sec计数器的值非常接近该计数器,那么可能存在大量的特殊SQL调用

 

re- compilations/sec

指每秒的重新编译数。

该计数器的值越低越好。存储过程在理想情况下应该只编译一次,然后被他们的执行计划重复利用。如果该计数器的值较高,或许需要换个方式编写存储过程,从而减少重编译的次数

 

 

 

 

 

 


 

      最后,附上本文的相关资源:

      MS最大连接数补丁

      浏览器并发连接数

      一个测试并发速度的页面

      监视资源使用情况

      使用 SQL Server 对象 

      SQL Server性能计数器

      关系型数据库性能测试参考指标----SQL Server

      LoadRunner监视的性能计数器

posted @ 2010-08-03 20:53  永远的阿哲  阅读(841)  评论(0编辑  收藏  举报