原文:如何识别SQL Server中的CPU瓶颈

原文出自:

http://www.mssqltips.com/sqlservertip/2316/how-to-identify-sql-server-cpu-bottlenecks/

问题:

如果经常遇到CPU瓶颈而导致的SQLServer宕机,那如何去发现并解决这些相关的问题?

解决方案:

导致CPU成为SQLServer性能问题的原因有很多,比较明显的原因是因为资源不足。但是,CPU的利用率可以通过配置的更改和查询的优化来降低,所以当你想买更快更好的处理器之前,先要考虑前面的操作。下面是使用一些内置工具来识别CPU相关瓶颈:

性能监视器(Performance Monitor):

可以使用性能监视器来检查CPU的负载。检查Processor:% Processor Time 这个计数器:如果长期超过80%/处理器,那很有可能面临了CPU相关瓶颈。

 

CPU密集操作主要是编译和重编译。你可以通过使用SQL Statistics对象计数器来监视它们的情况。也可以监控批处理接收的数量来查看。如果SQL Recompilations/sec 中的BatchRequests/sec的速率很高,那就有潜在的问题:

配置和监视以下计数器:

  • SQL Server: SQL Statistics: SQL Compilations/sec
  • SQL Server: SQL Statistics: SQL Recompilations/sec
  • SQL Server: SQL Statistics: Batch Requests/sec

可以从MSDN中获取关于这部分的详细信息: MSDN Library.

另外一个用于探测CPU相关问题的计数器是:SQL Server: Cursor Manager By Type – CursorRequests/Sec ,用于显示你的服务器上游标使用情况。如果你看到每秒有数以百计的游标请求,那很有可能是因为低效的游标使用和小体积提取操作(small fetch size)引起性能问题。

内部并行查询同样会引起CPU问题,可以检查:

SQL Statistics:Batch Requests/sec counter 计数器。在CPU生命周期中,每秒的批处理应该很小。如果过多,意味着正在使用并行计划运行。

动态管理视图(DMVs):

以下是对排查CPU瓶颈游泳的DMVs。动态视图:sys.dm_exec_query_stats显示目前缓存的批处理或者使用CPU的过程。下面的查询用于检查耗费CPU的执行计划:

select plan_handle,

sum(total_worker_time) as total_worker_time,

sum(execution_count) as total_execution_count,

count(*) as number_of_statements

from sys.dm_exec_query_stats

group by plan_handle

order bysum(total_worker_time), sum(execution_count) desc

SQLServer2008在每个查询编译时,会计算其hash值。你可以在query_hash列中找到该值,是否两个查询仅仅字面值不同但是使用相同query_hash值。该值也在 Showplan/Statistics XML QueryHash属性中可以查看。

Plan_generation_num列显示一个查询被重编译的次数。

SQLServer优化器尝试选择能提供最快响应时间的执行计划,但是不代表总是低CPU利用。低效的查询计划会引起CPU的好用,此时同样可以使用sys.dm_exec_query_stats 来监控。

如果你想有一个对SQLServer优化所耗费时间的总览,可以检查:

sys.dm_exec_query_optimizer_info 。其中的消耗时间和最后开销会非常有用。

可以使用以下DMVs来查询内部并行查询及其查询文本、执行计划的情况:

  • sys.dm_exec_cached_planShows the cached query plans.
  • sys.dm_exec_requestsShows each executing request in the SQL Server instance.
  • sys.dm_exec_sessionsShows all active user connections and internal tasks.
  • sys.dm_exec_sql_textShows the text of the SQL batches.
  • sys.dm_os_tasksShows each active task within SQL Server.

SQL Server Profiler:

如果性能监视器发现有问题,同样可以使用SQLServer Profiler来发现不必要的编译和重编译。SQLServer Profiler 跟踪能帮助你找到一直重编译的存储过程。可以使用下面的事件:

  • SP:RecompileCursorRecompileSQL:StmtRecompile: 这个事件是针对SQLServer的重编译。SP:Recompile事件中的EventSubClass 说明了重编译的原因。

·        Showplan XML For Query Compile: 这个事件是针对T-SQL语句的重编译。包含了查询计划和过程的对象ID.注意对这个事件运行一个跟踪,能得到利用系统资源的重要信息。但是,如果性能计数器报告SQL Compilations/sec 的值很高时,跟踪将非常好资源。

低效的游标可以使用RPC:Completed事件来跟踪。查看sp_cursorfetch语句并检查第四个参数,包含每次提前(fetch)包含的行数。

如何识别SQL Server中的CPU瓶颈的更多相关文章

  1. 如何识别SQL Server中的IO瓶颈

    原文:如何识别SQL Server中的IO瓶颈 原文出自: http://www.mssqltips.com/sqlservertip/2329/how-to-identify-io-bottlene ...

  2. SQL Server中查询CPU占用高的SQL语句

    SQL Server中查询CPU占用高的情况,会用到sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests 一.查看当前的数据库用户连接有多少 USE ...

  3. 转载:SQL Server中查询CPU占用高的SQL语句

    SQL Server中查询CPU占用高的SQL语句 SQL Server 表变量的用法 究竟什么是敏捷测试--朱少民

  4. SQL Server中如何识别、查找未使用的索引(unused indexes)

    在SQL Server中,索引是优化SQL性能的一大法宝.但是由于各种原因,索引会被当做"银弹"滥用,一方面有些开发人员(甚至是部分数据库管理员)有一些陋习,不管三七二十一,总是根 ...

  5. 如何识别和解决SQL Server中的热闩锁(PAGELATCH_EX)

    描述 在SQL Server中,内部闩锁体系结构可在SQL操作期间保护内存.通过页面上的读写操作,可以确保内存结构的一致性.从根本上讲,它具有两个类:缓冲区锁存器和非缓冲区锁存器,它们在SQL Eng ...

  6. SQL Server中tempdb的management

    对<SQL Server中tempdb的management>的一些更正和补充   对<SQL Server中tempdb的management>的一些更正和补充 前几天看了这 ...

  7. 对《SQL Server中tempdb的management》的一些更正和补充

    对<SQL Server中tempdb的management>的一些更正和补充 前几天看了这篇文章:SQL Server中tempdb的management 发现里面有些内容不是很准确 文 ...

  8. SQL Server 中PAGELATCH_x和PAGEIOLATCH_x解析

    0.参考文献 Microsoft SQL Server企业级平台管理实践 第11章 Buffer Latch Timeout的解析 什么是PAGELATCH和PAGEIOLATCH 1.PAGELAT ...

  9. SQL Server中TOP子句可能导致的问题以及解决办法

    简介      在SQL Server中,针对复杂查询使用TOP子句可能会出现对性能的影响,这种影响可能是好的影响,也可能是坏的影响,针对不同的情况有不同的可能性.      关系数据库中SQL语句只 ...

随机推荐

  1. H264相关随笔

    DR(Instantaneous Decoding Refresh)--即时解码刷新. I和IDR帧都是使用帧内预测的.它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以 ...

  2. POJ 3286 How many 0&#39;s?

    题目大意: 计算[m,n]之间全部数字有多少个零. 解题思路: 能够用[0,m)之间和[0,n]之间有多少个零然后作差. 规律是计算全部位置在到当前数时有多少个零. 以下是代码:   #include ...

  3. 一百万数据索引实例測试--mysql

    推荐书籍:http://pan.baidu.com/s/1sjJIyRV 任务描写叙述: 如果一高频查询例如以下  SELECT * FROM user WHERE area='amoy' AND s ...

  4. Android编程之LayoutInflater的inflate方法实例

    假设你不关心其内部实现,仅仅看怎样使用的话,直接看这篇就可以. 接上篇,接下来,就用最最简单的样例来说明一下: 用两个布局文件main 和 test: 当中,main.xml文件为: <?xml ...

  5. [IOS]本地化

    我们在IOS开发应用中,会碰到做好的一个应用,如何趋向国际化,也就是说支持多种语言?下面我就来简单演示一下,用一个Demo来实现中文和英文的实现. 实现步骤: 1.本地化项目中xib的view 1.在 ...

  6. HiPAC高性能规则匹配算法之查找过程

    收到一封邮件,有位朋友认为我误解了nf-HiPAC.如此的一个高性能算法怎能被什么传统的hash,tree之类的胁迫.是啊.HiPAC是一个非常猛的算法.文档也比較少,这就更加添加了其神奇感,可是这决 ...

  7. SQL Server :理解GAM和SGAM页

    原文:SQL Server :理解GAM和SGAM页 我们知道SQL Server在8K 的页里存储数据.分区就是物理上连续的8个页.当我们创建一个数据库,数据文件会被逻辑分为页和区,当用户对象创建时 ...

  8. Windows Phone开发(11):常用控件(下)

    原文:Windows Phone开发(11):常用控件(下) WP控件大部分都可以从Silverlight中继承过来,这里我也只能拿一部分作演示,对于其它控件如何使用,可以参考SDK相关说明以及Sil ...

  9. Android4.4 Framework分析——Zygote进程的启动过程

    Android启动过程中的第一个进程init.在启动过程中会启动两个关键的系统服务进程ServiceManager和Zygote. 本文要介绍的就是Zygote进程的启动,Zygote俗称孵化器,专门 ...

  10. Windows Phone 8 - Runtime Location API - 2

    原文:Windows Phone 8 - Runtime Location API - 2 在<Windows Phone 8 - Runtime Location API - 1>介绍基 ...