怎样查出SQLServer的性能瓶颈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样查出SQLServer的性能瓶颈相关的知识,希望对你有一定的参考价值。

参考技术A   SQLServer性能监控

  这套性能优化的清单将至少准科学的帮助你找出你的SQLServer任何明显的性能问题。说是这样说,SQLServer的性能调优仍然是很困难的。我试图用这套清单去找出“容易”的sqlserver性能问题,困难的留待稍后。我这样做是因为很容易将容易和困难的的性能调优问题搞混。通过列出一个“容易” 的性能调优范围,就很容易的将这些问题解决,一旦解决了这些容易的问题,那么你就能集中去解决更困难的问题。

  使用这个SQLServer性能调优清单的一个好处是,它将不仅仅告诉你目前最容易解决的性能问题是什么,而且还帮助你正确的去解决。在某种程度上,你可以选择不同的顺序进行。换句话说,你可以故意做出特殊的决定而不是按照清单通常的顺序进行。某种意义上说你是对的,不是所有的性能调优建议都适合所有的情形。另外,你的决定是基于你的资源限制,例如没有足够的钱去买满足负荷的硬件。如果真是那样的话,你就别无选择了。还有,你的决定可能基于一些政治原因,那是你不得不作出的改变。不管怎样,你需要知道你能做什么,使用这个性能调优清单找出你能改变的范围并做出相应的改变提升你的SQLServer的性能。

  一般来说,你将在你的每一个SQL服务器上执行这个清单。如果遇到清单中的一些问题,这会花掉你一些时间。我建议你从目前性能问题最多的的服务器开始,然后当你有时间的时候按照自己的思路去解决其他服务器。

  一旦你完成了,可仍然有很多事情要去做。记住,这些只是一些容易的。一旦你完成了这些容易的,接下来你需要花时间去解决更困难问题。这个是另一篇文章要解决的问题了。

  怎样进行你的SQLServer性能调优呢?

  为了使其变得容易,我把它们分成了以下几个部分:

  使用性能监视器找出硬件瓶颈
  SQLServer硬件性能监控列表
  操作系统性能监控列表
  SQLServer2000配置性能监控列表
  数据库配置设置性能监控列表
  索引性能监控列表
  应用程序和T-SQL性能监控列表
  SQLServer数据库作业性能监控列表
  使用Profiler找出低效的查询
  怎样最好的实现SQLServer性能监控
  管理你的SQLServe性能的最好方法是首先回顾上面每一部分的内容,把它们打印出来。然后完成每一部分的内容,写下你收集到的结果。你也可以按照你喜欢的顺序进行。上面的步骤仅仅列出了我执行的顺序,因为那样通常能达到一个比较好的效果。

  一旦你完成其中一部分,你可以按照在清单中发现的不同的建议进行你的性能优化工作。然后你将在后面的部分学到更多。

SqlServer性能瓶颈分析

SqlServer性能瓶颈分析

一、内存瓶颈分析--SQLServer:Buffer Manager

SELECT TOP 312 * FROM  sys.dm_os_performance_counters
where object_name =‘SQLServer:Buffer Manager‘ order by counter_name


1.Buffer cache hit ratio  平均值>=90%                                                                                                         

缓冲区是创建数据页面的缓冲页面池,这一般是SQL server内存池中最大的部分。这个计数器应该尽可能高。

低值表示只有少数的请求是在缓冲区,其他请求是在磁盘获取服务

这种情况发生可能是SQL server还在准备状态下,或缓冲区的增长需求超过最大可用内存,因此如果此值比较低,应该考虑为系统增加内存。

2.Checkpoint pages/sec    平均值<30     

美好一个检查点操作移到磁盘的页面数量,这些值应该相当低,高值意味着缓冲中更多的页面被标记为脏页面。

脏页面是在缓冲区中被修改的页面。一旦被修改,就标记为脏并在下一个检查点被写回磁盘。

如果这个计数器较高说明系统发生大量的写入操作,可能是I/O问题的征兆。                                                                                                

3.Lazy writes/sec     平均值<20            

 记录了缓冲区管理器的Lazy write进程每秒写入的缓冲区数量。这个进程会把时间较长的脏页面从缓冲区中删除,将内存释放

 数值过高说明I/O有问题或是内存问题。                                                                                                

4.Page life expectancy     平均值>300        

页面平均寿命,表示一个不被引用的页面在缓冲池中停留的时间。数值低意味着页面从缓冲区中被移走

降低了缓冲的效率并指出内存压力的可能。                                                                                                    

SELECT TOP 312 * FROM  sys.dm_os_performance_counters
where object_name =‘SQLServer:Memory Manager‘ order by counter_name

1.Memory Grants Pending      平均值=0

值高说明内存短缺,需要将进度挂起等待内存空闲

2. Target Server Memory(KB)     接近物理内存大小

表示SQLServer希望消耗的动态内存总数。

3.Total Server Memory (KB  )    接近于Target Server Memory
当前分配给SQLerver的总内存。 如果低于Target Server Memory

那么可能是SQLserver内存需求很低,服务器最大内存设置的太低

二、磁盘瓶颈分析  Physical Disk

%disk time 磁盘时间百分比 平均值<85%
CurrentDiskQueueLength 当前磁盘队列长度  平均值<2
disk Transfers/sec 每秒磁盘传输数量  平均值<100
Disk Bytes/sec 每秒传输字节数 平均值<每秒10MB(该值需通过磁盘性能测试评估,不同磁盘指标不同)
avg.disk sec/read(write) 每次磁盘读写所需平均时间   平均值<10毫秒

三、cpu  processor

%process Time 处理器时间百分比 平均值<80%

%privileged time 特权时间百分比 平均值<10%

windows server 包括用户模式和特权模式两种 %privileged time为20%-25%表明系统正在进行大量的IO操作,一个专用的SQLserver系统%privileged time不能超过10%

sqlserver:SQL Statistics Batch Requests/sec 每秒接收到的sql命令批数  根据机器配置 一般1000为繁忙,超过1000应注意

               SQL Compilations/sec sql编译次数  <100

               SQL Reompilations/sec sql重编译次数

 

四 网络

Network interface  bytes Total/sec 每秒总传输字节数  平均值<NIC容量的50%

NetworkSegment  %net utilization 网络利用率 平均值<80%

 

以上是关于怎样查出SQLServer的性能瓶颈的主要内容,如果未能解决你的问题,请参考以下文章

怎样查出SQLServer的性能瓶颈

怎样查出SQLServer的性能瓶颈

怎样查出SQLServer的性能瓶颈

SqlServer性能瓶颈分析

如何防止聚合物1的性能瓶颈?

如何查看 mysql 性能瓶颈