如何识别SQL Server中的CPU工作中遇到瓶颈怎么办

如何识别SQL Server中的CPU瓶颈
如何识别SQL Server中的CPU瓶颈
英文原文出自:
/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 & /en-us/library/ms190911.x
另外一个用于探测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) astotal_worker_time,
& & & sum(execution_count) astotal_execution_count,
& & & count(*) as number_of_statements
fromsys.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_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)包含的行数。
作者 黄钊吉怎样查出SQLServer的性能瓶颈_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
怎样查出SQLServer的性能瓶颈
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩68页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢查看: 12117|回复: 7
sql server服务器CPU占用率高的解决方案
论坛徽章:1
与sql server2000连接的程式很慢,服务器:Win2k3、CPU使用率近90%(其中sqlservr.exe占用近70%),有什么解决办法没?除了网络带宽外,主要都有哪些问题呢?
已收集相关原因:
1.sql蠕虫病毒或注入攻击
2.数据库设计:字段设计、表索引设计、作业过多且频繁
3.sql语句:不合理的sql语句导致网络阻塞,产生死锁
4.服务器硬件原因:磁盘空间、虚拟内存等变动
5.网络原因
请问:还有哪些?具体怎么解决呢?
论坛徽章:1
有人说在3,4中多考虑下,大家觉得呢
认证徽章论坛徽章:54
Profiler一下,你就找到答案了
论坛徽章:1
哦,那个也试过了,找不出明确的问题,谢谢
论坛徽章:40
突然变慢,还是渐渐变慢?
突然变慢:最近有上什么新的功能?重点检查新上功能部分的SQL
渐渐变慢:看看硬件性能,SQL Profiler做个跟踪
论坛徽章:15
3.索引的合理与否。。profiler 。。 都有相关查看严重消耗cpu时间的SQL语句 方法 还有死锁。。。
4.看F1帮助 使用perfmon查看相关硬件的瓶颈。。。。
论坛徽章:1
突然变慢的,正在查到底是什么原因啊?最近也没改什么东西啊!就是内网的速度好像不怎么快啊,但也不至于那么慢啊
论坛徽章:0
驱动没有通过认证,造成CPU资源占用;
看看是不是WindowsXP使用鼠标右键引起CPU占用100%。
当你在资源管理器里面,右击一个文件和目录的时候,当快捷菜单显示的时候,CPU占有率将增加到百分之一百,当你关闭快捷菜单的时候才返回正常。
如果这两个方法也不行的话,那就只能优化网站,我们是专业的网络优化公司,经过优化,我们保证能将CPU占有率降至百分之十左右,联系qq
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号}

我要回帖

更多关于 工作中遇到瓶颈怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信