zoukankan      html  css  js  c++  java
  • 改进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监视的性能计数器

  • 相关阅读:
    如何找出数组中重复次数最多的数
    如何计算两个有序整型数组的交集
    如何分别使用递归与非递归实现二分查找算法
    如何用递归算法判断一个数组是否是递增
    如何用一个for循环打印出一个二维数组
    如何用递归实现数组求和
    ElasticSearch安装和head插件安装
    SpringBoot全局异常处理方式
    Redis高级命令操作大全--推荐
    Mysql中FIND_IN_SET和REPLACE函数简介
  • 原文地址:https://www.cnblogs.com/ljzforever/p/1791534.html
Copyright © 2011-2022 走看看