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

it2022-05-09  37

经常在论坛看到问高CPU的问题,沈阳463整形医院程序简单的总结一下。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返回缓存查询计划的聚合性能统计信息。每个查询计划在该视图中对应一行,并且行的生存期与计划本身相关联。在从缓存删除计划时,也将从该视图中删除对应行。http://www.hengnay.com/C.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到底是什么引起的,然后对症下药。

转载于:https://www.cnblogs.com/chaorenman/p/4173388.html


最新回复(0)