`
java-mans
  • 浏览: 11426492 次
文章分类
社区版块
存档分类
最新评论

如何识别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/seccounter 计数器。在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(*) asnumber_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 XMLQueryHash属性中可以查看。

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

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

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

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

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

  • sys.dm_exec_cached_plan:Shows the cached query plans.
  • sys.dm_exec_requests:Shows each executing request in the SQL Server instance.
  • sys.dm_exec_sessions:Shows all active user connections and internal tasks.
  • sys.dm_exec_sql_text:Shows the text of the SQL batches.
  • sys.dm_os_tasks:Shows each active task within SQL Server.

SQL Server Profiler:

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

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

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

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

分享到:
评论

相关推荐

    教你识别SQL Server中CPU瓶颈

     如果经常遇到CPU瓶颈而导致的SQLServer宕机,那如何去发现并解决这些相关的问题?  解决方案:  导致CPU成为SQLServer性能问题的原因有很多,比较明显的原因是因为资源不足。但是,CPU的利用率可以通过配置...

    如何识别SQL Server中的IO瓶颈

    我们应该如何识别SQLServer是否有I/O相关的瓶颈?  解决:  当数据页经常从缓冲池中移进移出的时候,I/O子系统会成为SQLServer性能问题的关键因素之一。事务日志和tempdb同样也会产生重大的I/O压力。因此,你...

    SQL Server数据库查询速度慢原因及优化方法

    例如耽搁查询 的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。 ...

    高级SQL Server监控、性能图、分析与优化、版本控制源码

    这是一个相当高级的SQL Server监控工具,全面监控SQL Server的活动与性能,分析性能瓶颈,给出优化建议。 监控SQL Server的活动:进程、任务,详细查看当前执行的语句与实际变量值,终止进程 IO/CPU/网络等性能...

    Pro SQL Server 2019 Wait Statistics, 2nd Edition.pdf

    此版本被更新,以涵盖查询存储中等待统计信息的分析、CXCONSUMER等待事件以及SQLServer 2019年的最新情况。无论您是刚刚开始等待统计,还是已经熟悉这些统计信息,这本书提供了关于等待统计信息是如何生成的以及它们...

    SQL Server 数据页缓冲区的内存瓶颈分析

    SQL Server会把经常使用到的数据缓存在内存里(就是数据页缓存),用以提高数据访问速度。因为磁盘访问速度远远低于内存,所以减少磁盘访问量同样是数据库优化的重要方面。 当数据页缓存区出现内存不足,则会出现查询...

    SQL_Server2005性能测试实践

    如果在没有额外复杂条件下突然出现CPU瓶颈,有可能是因为没有优化查询,错误的数据库配置,或者是数据库设计上的原因和硬件资源不足引起。在决定采用增加CPU数量或者使用更快速的CPU之前,应该先检查消耗CPU资源最多...

    sqlserver中关于WINDOWS性能计数器的介绍

    SQLServer:Buffer Manager Buffer cache hit ratio 缓冲区调整缓冲命中率,阀值>97%正常状况,推荐>99%,如果此项低于97%则内存不足。 Checkpoint pages/sec SQL检查点,此项值由缓冲池中页的生存周期及惰性写入...

    SQLServer新特性:内存数据库

    而随着这些年硬件的发展,现在服务器拥有几百G内存并不罕见,此外由于NUMA架构的成熟,也消除了多CPU访问内存的瓶颈问题,因此内存数据库得以出现。内存的学名叫做RandomAccessMemory(RAM),因此如其特性一样,是...

    sql最全的常用命令语句

    --一个信号等待时间过多对资源的等待时间那么你的CPU是目前的一个瓶颈。 --查看进程所执行的SQL语句 if (select COUNT(*) from master.dbo.sysprocesses) > 500 begin select text,CROSS APPLY master.sys....

    BenchmarkSQL-5.0 数据库基准测试工具-个人修改测试版本

    个人修改支持测试PostgreSQL数据库系统。 BenchmarkSQL 是一个免费的开源的数据库系统基准测试工具,用于测试衡量不同数据库系统的性能。...这些指标可用于比较不同数据库系统的性能,并通过测试报告指数识别性能瓶颈。

    SQL Server误区30日谈 第12天 TempDB的文件数和需要和CPU数目保持一致

    误区 #12:TempDB的文件数和需要和CPU数目保持一致 错误  哎,由于上述误区是微软“官方”的建议,并且还有大量博文坚持这个观点,这个误区已经是老生常谈。  但让人困惑的是SQL CAT团队给出的建议就是1:1,但这个...

    LoadRunner负载测试之Windows常见性能计数器,分析服务器性能瓶颈

    l%TotalProcessorTime系统中所有处理器都处于繁忙状态的时间百分比,对于多处理器系统来说,该值可以反映所有处理器的平均繁忙状态,该值为100%,如果有一半的处理器为繁忙状态,该值为50%服务器。器消耗的处理器...

    Toad 使用快速入门

    使用Toad,非常容易检测到存储过程的错误,开发人员可以一步一步运行PL/SQL语句来识别问题。调试会话可以和其他程序会话同时进行。 SQLab Xpert Option: 帮助开发人员优化SQL,为他们提供各种优化模式下SQL执行...

    服务器性能测试报告.docx

    暂无 2、测试环境 2.1 硬件环境 系统硬件与网络环境如下: 应用服务器硬件配置: Server Name CPU MEM 16GB memory HardDisk 2.2 软件环境 服务器 1台 操作系统 Windows Server 2003 数据库 Microsoft SQL Server ...

    大数据与人工智能.pptx

    分布式系统的前世今生 应用驱动 数据 硬件驱动 突破约束 人的驱动 聪明人 懒人 高效、容错、易用 1980s,个人电脑普及 分布式系统采用Client-Server架构 分布式SQL数据库(1979) 网络文件系统(1984) 1990s,数据中心...

    Loadrunner报错日志

    程序上存在数据库的问题,那就必须采用更加专业的工具来抓取出现问题的程序,主要是程序中执行效率很低的sql语句,weblogic可以采用introscope定位,期间可以注意观察一下jvm的垃圾回收情况看是否正常,我在实践中...

    易语言程序免安装版下载

    修改外部数据库在4.12版中导致的不兼容问题,并增加了对MS SQL Server数据库中image和text字段类型的说明。 7. 修改扩展界面支持库一,禁止透明标签在父窗口刷新时自动刷新,以解决其导致窗口刷新缓冲的问题。 8....

    J2eeFAST企业级快速开发平台-其他

    15、连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。16、产品许可: 对项目进行许可证书控制,防止程序拷贝运行。17、公告通知: 针对项目升级重要情况出通知公告直接生成静态页面,可以...

Global site tag (gtag.js) - Google Analytics