欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Sql随手笔记 » 正文

热门阅读

SqlServer运行时占用高CPU问题查询

创建时间:2013年12月23日 14:10  阅读次数:(20007)
分享到:
经常在论坛看到问高CPU的问题,简单的总结一下。
1,首先你要确认,高CPU是不是是SQL SERVER进程引起的还是别的进程引起的,这个很容易,直接看任务管理器。
2,如果从任务管理器看出高CPU确实是用SQL SERVER引起的。
3,如果是SQL SERVER引起的。
 
3.1SQL SERVER的一个比较BAD的执行计划引起的,比如说缺少必要的INDEX,引起了hash  join什么的。这个也分成2种:
1,造成高CPU的语句已经执行结束,这个时候可以用下面的语句来检查。
select  
     highest_cpu_queries.plan_handle,  
     highest_cpu_queries.total_worker_time, 
     q.dbid, 
     q.objectid, 
     q.number, 
     q.encrypted, 
     q.[text] 
 from  
     (select top 50  
         qs.plan_handle,  
         qs.total_worker_time 
     from  
         sys.dm_exec_query_stats qs 
     order by qs.total_worker_time desc) as highest_cpu_queries 
     cross apply sys.dm_exec_sql_text(plan_handle) as q 
 order by highest_cpu_queries.total_worker_time desc

解释一下sys.dm_exec_query_stats:
sys.dm_exec_query_stats返回缓存查询计划的聚合性能统计信息。每个查询计划在该视图中对应一行,并且行的生存期与计划本身相关联。在从缓存删除计划时,也将从该视图中删除对应行。 
可查看帮助文档:ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/tsqlref9/html/eb7b58b8-3508-4114-97c2-d877bcb12964.htm 

3.1.2,造成高CPU的语句正在运行,这个时候可以用下面的语句来检查。
SELECT  st.text, qp.query_plan, rq.* 
 FROM sys.dm_exec_requests RQ CROSS APPLY sys.dm_exec_sql_text(rq.sql_handle) as st 
 CROSS APPLY sys.dm_exec_query_plan(rq.plan_handle) as qp order by RQ.CPU_time desc 

3.2 开启了SQL profiler.
通过3.1.2可以看到 sp_trace_getdata这个SP在运行。

3.3 过度的编译跟重编译。
可以通过下面的SQL来查
select top 25 
     sql_text.text, 
     sql_handle, 
     plan_generation_num, 
     execution_count, 
     dbid, 
     objectid  
 from  
     sys.dm_exec_query_stats a 
     cross apply sys.dm_exec_sql_text(sql_handle) as sql_text 
 where  
     plan_generation_num  >1 
 order by plan_generation_num desc

3.4 某个系统进程造成的,比如说 Ghost cleanup, Lazy writer等。可以通过select * from sys.sysprocesses where spid<51来查。
 
造成具体的引起高CPU到底是什么引起的,然后对症下药。
来源:http://bbs.csdn.net/topics/390657642
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 85+16=? 的结果(结果是:101)
结  果: