使用CPU计数器监视SQL Server性能的一点提示

来源:互联网 发布:网络媒介素养基本内容 编辑:程序博客网 时间:2024/03/29 14:35

Tips for Using Performance Monitor CPU Counters

By : Brad McGehee

Aug 21, 2005

原文: http://www.sql-server-performance.com/tips/performance_monitor_cpu_counter_p1.aspx

欢迎转载。转载请保留原作者姓名以及原文地址,并请注明译文出处:http://blog.csdn.net/xiao_hn

 

当使用CPU计数器测量CPU活动时,记住下面是SQL Server中耗用CPU资源最多的进程:

 

·     上下文切换:SQL Server在多个CPU之间切换线程时就会发生上下文切换,过多的上下文切换会吃掉CPU资源。有些情况下,打开LightweightPooling选项可以减少上下文切换。

·     重编译:过多的存储过程重新编译消耗CPU资源,使SQL Server变慢。

·     排序:有时可能需要对数据排序。但是可以通过只对需要排序的最小量的数据排序,或者将排序放到客户端降低排序所带来的负载。

·     哈希法:在关联以及UNION中常常会用到哈希算法。,哈希关联经常(但不总是)可以改成循环关联,这样可以减少CPU活动,增进效能。

 

如果想要减少CPU活动,就需要降低或减少如上的一个或多个SQL Server功能的使用。[6.5,7.0,2000] (4-17-2003添加.)

*****

 

测量SQL Server CPU活动是找出潜在的CPU瓶颈的关键方式。Process Object: % Processor Time计数器可用来测量服务器上每个CPU的使用情况。但如果服务器上有多个单CPU,或者有超线程CPU,那么查看特定CPU的这个计数器没有多少价值。相反,监控这个计数器的_Total实例可以提供服务器上总的CPU使用情况,它很好的显示了服务器的忙碌程度。

也可以使用System Object: %Total Processor Time计数器,它测量服务器上所有CPU的平均使用状况。

 

一般来说,如果服务器的总的CPU使用持续超过80%(大约超过10分钟),那么可能产生CPU瓶颈了。一些潜在的CPU瓶颈解决方案是降低服务器负荷(调整查询),使用更快的CPU,或者更多的CPU. [6.5, 7.0, 2000] (4-2-2004更新)

 *****

另一个有用的CPU性能指示器是System Object: Process Queue Length计数器。如果CPU的这个计数器值持续超过2/CPU(大约超过10分钟),那么可能产生了CPU瓶颈。打比方说,如果服务器上有4CPU,那么整台服务器的Process Queue Length计数器总的值不应该超过4*2=8

 

如果Process Queue Length计数器经常超过建议的最大值,但CPU使用量却没有相应提高(通常如此),那么考虑减少SQL Server”max worker threads”配置设定。Process Queue Length计数器值高的原因可能是排队等待的工作线程数量过多。减少max worker threads值可以强制线程池kick in(如果它还没有的话),或者更好的用利线程池。 [:译者注:kick in该如何译才好?原文:By reducing the number of "maximum worker threads", what you are doing is forcing thread pooling to kick in (if it hasn't already), or to take greater advantage of thread pooling.]

 

同时使用Processor Queue Length%Total Process Time计数器来鉴别是否存在CPU瓶颈。如果在相同的持续期间两个计数器值都超过了它们的建议值,那么肯定存在CPU瓶颈。[6.5,7.0,2000] (4-2-2004 更新)

*****

 

如果多CPU服务器上的the System Object: % Total Processor Time计数器常常超过约80%,那么可能需要监视下System: Context Switches/Sec计数器。这个计数器测量NT服务器在线程中切换的频率。过度的上下文切换损害性能,应该将之降到最低。如果System: Context Switches/Sec计数器接近8000,那么应该考虑使用NT Windows 纤程。纤程是执行类似于线程的工作的线程子组件。使用纤程的好处是在多CPU服务器上的多个CPU之间切换时产生的额外开销较少。

 

只有当服务器的CPU运行到最大值,或者性能计数器System: Context Switching/Sec在一段持续时间(超过10分钟)内接近8000/每秒时,纤程的好处才会体现出来。因此,除非服务器CPU几乎用完了,否则不要使用这个选项。在使用这个选项的前后都需要测试它对服务器性能的影响,因为这个修改可能不会总是达到预期的效果。[7.0,2000] (4-2-2004更新)

 

有时,性能计数器可测量出你可能没有想到的潜在瓶颈。例如,System: %Total Privileged Time计数器测量的是System: % Total Processor Time计数器用在运行内核模式的百分比。你或许知道,CPUWindows NT, Windows 2000Windows 2000上可以在两种模式下运行:内核模式或者用户模式。绝大多数(但不是所有)操作系统代码都运行在内核模式下,有些操作系统以及所有的使用者应用程序都是运行在用户模式下。

 

这是什么意思呢?如果System: % Total Privileged Time计数器超过20%,就意味着服务器的I/O可能成为了瓶颈。为什么呢?因为I/O驱动器运行在内核模式下,高I/O的一个症状就是高百分比的Privileged Time 如果Privileged Time数值高,并且% Dsik Time 计数器超过55%,就完全可以断定服务器的I/O已成为瓶颈了。

 

除了密集的I/O使用,这个计数器也可以指出潜在的网络驱动器,硬盘驱动器或者硬件问题。如果% Total Privileged Time计数器为25%或更高,但是% Disk Time计数器少于55%,那就很有可能不是I/O造成的瓶颈,而是驱动或者硬件问题了。

 

尽管我没有常常查看这个计数器,但当你怀疑I/O成为服务器瓶颈时,你可以使用它来帮助你确认[7.0,2000] (4-2-2004更新)