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

经常在论坛看到问高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到底是什么引起的,然后对症下药。

时间: 2024-10-11 00:02:45

SqlServer运行时占用高CPU问题查询的相关文章

visual studio 2013运行时卡顿 CPU占用超50%的解决方法

如果你许久未使用vs,再次新建一个工程时,有可能会遇到这种情况,鼠标点击.滚轮滑动都一卡一卡的,打开任务管理器一看,一个vs,内存占用几十M,CPU占用却几乎达到50%(我的是57%)!!!编写代码各种卡顿,完全不能忍... 解决方法:有可能是vs的一些内部文件丢失,根据vs的提示.我在编写c++时遇到这个问题,于是去找安装镜像,解压出了SSCE40这个文件夹,里面有两个文件,如图: SSCERuntime_x64-chs.exe和SSCERuntime_x86-CHS.exe这两个文件,由于我

SQLSERVER排查CPU占用高的情况

SQLSERVER排查CPU占用高的情况 今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库实例里有多个数据库 他说是这几天才出现的,而且在每天的某一个时间段才会出现CPU占用高的情况 内存占用也很高,占用了30个G -----------------------------------------------华丽的分割线-------------

工具运行过程中,CPU占用过高的分析定位

之前使用Java Swing开发了一款设备档案收集工具.支持多台设备同时收集,每个设备使用一个线程.在同时收集多台设备信息时,发现CPU占用率居然达到了97%,而且高居不下.显然这样的性能是令人无法忍受的. 我们知道,通过jdk自带的工具jvisualvm可以查看每个线程的执行情况,但就是无法分析每个线程的CPU占用情况.由于工具是运行在Windows系统上的,所以也没办法像Linux下面那样通过命令去分析线程的CPU占用.而微软的process explorer工具可以解决这一难题.通过这个强

【转载】SQL Server中查询CPU占用高的SQL语句

本文导读:触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理:下面介绍SQL Server中如何查询CPU占用高的SQL语句 SQL Server中查询CPU占用高的情况,会用到sys.sysprocesses ,dm_exec_sessions ,dm_ex

Nodejs mkdirP 模块导致CPU占用高的问题

Nodejs mkdirP 模块导致CPU占用高的问题 近期将nodejs项目部署到服务器上并启动时,发现node进程的cpu占用率在40%左右,当时表示非常不解,刚启动的服务并没有运行什么需要大量消耗cpu的逻辑,且此时还未有请求发送到服务器端. 鉴于这种情况,只能猜测是某段程序在初始化一些东西的时候异常,所以才导致了这种情况. 经过对代码的排查后,最终锁定出为题的代码块如下: router.use(multer({ dest: config.uploadDir, limits:{ fileS

WinDbg调试CPU占用高的问题 试验+实战 《第七篇》

一.High CPU试验 1.示例代码 static void Main(string[] args) { Console.Clear(); Console.WriteLine("到命令行下,切换到windbg目录,执行adplus -hang -pn highcpu.exe -o c:\\dumps"); Console.WriteLine("如果要停止,按Ctrl+C结束程序"); Console.WriteLine("================

单线程、高并发的运行时环境

浅谈Node.js单线程模型 Node.js采用 事件驱动 和 异步I/O 的方式,实现了一个单线程.高并发的运行时环境,而单线程就意味着同一时间只能做一件事,那么Node.js如何利用单线程来实现高并发和异步I/O?本文将围绕这个问题来探讨Node.js的单线程模型: 1.高并发 一般来说,高并发的解决方案就是多线程模型,服务器为每个客户端请求分配一个线程,使用同步I/O,系统通过线程切换来弥补同步I/O调用的时间开销,比如Apache就是这种策略,由于I/O一般都是耗时操作,因此这种策略很难

生产环境下JAVA进程高CPU占用故障排查

问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过,排除此类情况.2,程序代码有问题,出现死循环,可能性极大. 问题解决:1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出.2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下

Java进程CPU占用高导致的网页请求超时的故障排查

一.发现问题的系统检查: 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多. 二.定位故障 根据这种故障的一般处理思路,先找出问题进程内CPU占用率高的线程,再通过线程栈信息找出该线程当时在运行的问题代码段,操作如下: 2.1.根据思路查看高占用的"进程中"占用高的"线程",追踪发现7163的进程中16298的线程占用较高,使用命令: top -Hbp 7163 | a