一条语句导致CPU持续100%
一大早收到一堆CPU预警邮件,通常每天只在统计作业执行期间会收到2~3封CPU预警邮件。这次的预警来自另一台服务器,并且明细数据显示其CPU一直维持在49%。
登录到服务器,查看任务管理器(查看资源监视器更好),CPU时不时上涨到100%,CPU被谁使用了呢?虽然猜测到是被SQLServer,还是打开性能监视器添加\Processor(_Total)\% Processor Time、Process(sqlservr)\% Processor Time计数器

可以看到CPU使用率持续98%时,SQLServer占用CPU持续约为1575%,服务器有16个logical cores,平均值为1575%/16=98.44%,也就是CPU繁忙基本是由SQLServer引起。
那么就用profiler把高消耗语句拎出来(此时猜测可能是频繁执行某一高消耗的语句),列筛选设置CPU>=100毫秒,等了十来秒没看到任何语句,不断地更改筛选条件,
终于看到一条异常语句,语句每1分钟执行一次,每次执行时长约30秒,执行期间服务器CPU接近100%!
--问题语句
SELECT TOP 100 T1.guid,
T1.UserID,
T1.UserChairID,
T1.UserTreasure,
T1.FirstRound,
T1.SecondRound,
T1.ThreeRound,
T1.MachineSerial,
T1.LoginIP,
T1.RecordTime,
T1.ServerID,
T2.UserID AS JSID,
T2.UserChairID AS JSChairID,
T2.UserTreasure AS JSUserTreasure,
T2.FirstRound AS JSFirstRound,
T2.SecondRound AS JSSecondRound,
T2.ThreeRound AS JSThreeRound,
T2.MachineSerial AS JSMachineSerial,
T2.LoginIP AS JSLoginIP
FROM dbo.XxxxRecordDetail AS T1 WITH(NOLOCK)
LEFT JOIN dbo.XxxxRecordDetail AS T2 WITH(NOLOCK)
ON T1.Guid = T2.Guid
AND T1.UserID != T2.UserID
WHERE T1.PeopleNum = 2
AND T2.PeopleNum = 2
AND T1.UserTreasure < 0
AND T1.RecordTime >= '2017-5-10 8:36:36'
AND T1.RecordTime < '2017-5-10 13:36:36'
ORDER BY
T1.RecordTime ASC
由于语句执行期间CPU过高,因此没必要再次执行语句来查看执行计划。直接从计划缓存查找
--参考 http://www.cnblogs.com/Uest/p/6419017.html 计划缓存
--特定语句聚合性能统计µs
select top 100 SUBSTRING (c.text,(b.statement_start_offset/2) + 1
,((CASE WHEN b.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), c.text)) * 2
ELSE b.statement_end_offset END - b.statement_start_offset)/2) + 1) RunSQL
,b.creation_time --编译计划的时间
,b.last_execution_time --上次开始执行计划的时间
,b.execution_count AS SQLExCount--计划自上次编译以来所执行的次数
,b.last_logical_reads --上次执行计划时所执行的逻辑读取次数
,b.total_logical_reads/b.execution_count avg_logical_reads
,b.last_worker_time --上次执行计划所用的 CPU 时间(微秒)
,b.last_elapsed_time --最近一次完成执行此计划所用的时间(微秒)
,b.total_elapsed_time/b.execution_count avg_elapsed_time --上次完成执行此计划所用的总时间
--,b.sql_handle,b.plan_handle
,d.query_plan
,c.text
FROM sys.dm_exec_query_stats b with(nolock)
CROSS APPLY sys.dm_exec_sql_text(b.sql_handle) c
CROSS APPLY sys.dm_exec_query_plan(b.plan_handle) d
where c.text like '%KeyWords%'
语句对应执行计划
可以看到消耗花费在聚集索引扫描,语句T2用了条件peoplenum=2进行扫描~
分析语句业务逻辑,其实就是返回Xx游戏2人局各场明细信息。T1能快速返回满足where条件的记录,何不用这些记录到T2中查找。通过指定索引,指引语句按照我们的期望的方式去执行。优化前、后跟踪对比
优化前、后性能计数器对比
可以看到修改后CPU立马降下去。在文章的开头收到的预警邮件显示最高CPU使用率为49%,但实际在某些时候达到98%+。难道sys.dm_os_ring_buffers记录数据时CPU刚好回落●-●
一条语句导致CPU持续100%的更多相关文章
- 服务器php-cgi.exe进程过多,导致CPU占用100%的解决方法
再使用iis服务器中经常会出现php-cgi.exe进程过多,导致CPU占用100%,最终造成网站运行过慢甚至卡死的情况,重启iis会好一会,过一段时间久出现这种情况,为什么会出现这种情况呢,应该怎么 ...
- magento 由于Httpd进程增多,导致CPU占用100%问题
由于Httpd进程增多,导致CPU占用100%问题 magento for version 2.2.3 前些天一直导致CPU无法控制的增多问题. 根据报错我设置了如下内容: [Mysql]mysql. ...
- HashMap-死锁导致cpu占用100%分析(转)
最近项目里面的一段千年代码出了问题,这个问题以前也出现过,不过不是那么明显,这次迁移机器由以前的4台机子变成2台以后问题被放大,最终不得不解决,特此分析一下. 先放出问题的代码 ? 1 2 3 4 5 ...
- SQL语句导致cpu占用如此高
一般我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理.但我们也可以通过自己写SQL语句来有针对性的进行性能方面的查询.通 ...
- Oracle查询语句导致CPU使用率过高问题处理
解决此问题的关键在于如何找到造成CPU使用率过高的SQL语句.步骤如下: 1.使用Process Explorer工具查看到Oracle进程,双击Oracle进程,在弹出的属性窗口的Threads选项 ...
- 阿里云被挖矿使用,导致cpu长期处于100%,ddgs进程,xWx3T进程,关于redis密码
1.使用top命令,查看到一个叫xWx3T的进程cpu占用99.8%,由于我的阿里云是单核的,所以最高只能100%. 把它用kill命令杀死后,过一会儿又启动了,又占用100%. 使用ps -ef可以 ...
- 解决一个 MySQL 服务器进程 CPU 占用 100%解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记》[转]
转载地址:http://bbs.chinaunix.net/archiver/tid-1823500.html 解决一个 MySQL 服务器进程 CPU 占用 100%解决一个 MySQL 服务器进程 ...
- 【故障公告】数据库服务器 CPU 近 100% 引发的故障(源于 .NET Core 3.0 的一个 bug)
非常抱歉,这次故障给您带来麻烦了,请您谅解. 今天早上 10:54 左右,我们所使用的数据库服务(阿里云 RDS 实例 SQL Server 2016 标准版)CPU 突然飙升至 90% 以上,应用日 ...
- 数据库服务器CPU持续百分之百、部分Session一直处于执行状态---等待事件为:asynch descriptor resize(Oracle Bug )
问题描述: 项目反馈数据库服务器的CPU持续100%的情况,跟踪发现很多活动会话的等待事件是“asynch descriptor resize”,并且这些会话一直处于Active状态,而这些会话执行的 ...
随机推荐
- Apache Storm 1.1.0 中文文档 | ApacheCN
前言 Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ...
- Struts2简介以及初步搭建配置
一.基本介绍 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互. ...
- 【前端】vue.js环境配置以及实例运行简明教程
vue.js环境配置以及实例运行简明教程 声明:本文档编写参考如下两篇博客,是对它们的修改与补充,欢迎点击链接查看原文: 原文1:vue.js在windows本地下搭建环境和创建项目 原文2:Vue. ...
- 利用Google浏览器调试js代码
1.js有两种引入方式,外链和内嵌: 内嵌在浏览中直接调试,外链要在断点处写debugger; 示例代码: <!DOCTYPE html> <html lang="en&q ...
- jmeter日记
1.不要像loadrunner一样使用集合点,jmeter不需要 2.性能测试 线程组设置的时候 永远 3.启动jmeter之后,打开log 4.分布式的话 tps是多台电脑的tps之和 自动加好了的 ...
- Akka(23): Stream:自定义流构件功能-Custom defined stream processing stages
从总体上看:akka-stream是由数据源头Source,流通节点Flow和数据流终点Sink三个框架性的流构件(stream components)组成的.这其中:Source和Sink是stre ...
- 线性表之何时使用ArrayList、LinkedList?
前言 线性表不仅可以存储重复的元素,而且可以指定元素存储的位置并根据下表访问元素. List接口的两个具体实现:数组线性表类ArrayList.链表类LinkedList. ArrayList Arr ...
- python 从视频中提取图片,并保存在硬盘上
使用python的moviepy库来提取视频中的图片,按照视频每帧一个图片的方式来保存. extract images from video, than save them to disk from ...
- [置顶]
Chat Room:基于JAVA Socket的聊天室设计
d0304 更新功能实现 d0312 更新部分图片&UI设计部分 d0318 更新功能实现 d1222 实现添加好友功能.实现注册功能.修改大量BUG github:https://githu ...
- 想做iPhoneX抢购活动?压测大师先教你优化网站后台
北京时间9月13日凌晨1点,iPhone 10周年,在Apple Park乔布斯剧院,苹果发布了三款新iPhone.全面屏iPhone X来袭,这款被定义为未来的智能手机黑科技满满:全面屏,无线充电. ...