SQL Server服务器CPU爆高解决
昨天下午,测试反映trunk测试环境的数据库CPU一直100%,一开始以为是病毒,内网这段时间老是有个挖矿的病毒,查了一下被隔离了,但是数据库还是慢,停掉SQL server的服务CPU降下来,启动SSQL server的服务器就CPU就到100%,按照正常情况,
SQL Server导致CPU爆高,一般是异常SQL引起,但查询了监控:
查询是RiskControlAnalysis,TaskTrunk库的sql比较多,先分离RiskControlAnalysis看看是否是这个库的原因,分离后CPU还是很高,再分离TaskTrunk库,报错,无法分离,这时怀疑是服务器的磁盘性能问题,停SQL服务,用
CrystalDiskMark 6.0测试一下磁盘的性能,磁盘性能的确不怎样,但是也没差到这样的地步。
后面只能进一步分离TaskTrunk库,分离后,在看服务器CPU,发现正常了,原因就出在TaskTrunk库,后来在看看监控的sql,发现一条查询SQL:
select count(1) from tb_log E where 1=1 and E.taskid=@taskid
这个tb_log 有3亿条,查询taskid字段没有索引,导致查询IO很慢,进而影响CPU爆高。后重建一张新的tb_log表,并在taskid字段加上索引,以前的表做历史数据。性能问题解决。
现在想想,就一个简单的SQL查询,用DMV性能视图和实时监控的SQL,为何查不出来,这个监控查SQL,他的CPU和时间都不是特别高,并没有特殊异常的情况,而且查数据库也没有未提交的事务在运行。
如果这样的情况出现在线上,解决的时间这么长,肯定会问题。想想有没有简单的方法发现这个SQL,突发灵感,以前查询正在执行的SQL就可以发现这个问题,测试了一下,的确可用:
这个SQL: 查询正在执行的SQL
优势: 1,以前的DMV是查已经执行完毕的SQL,如果这个SQL一直假死,性能视图就查不出来
2,和[sp_WhoIsActive]监控出来的sql相比,能很清晰的显示正在执行的sql和等待事件,定位更精准,特别是正在运行的
--数据库CPU很高,查询问题的SQL,根据时间“等待毫秒”,查出问题的SQL
SELECT spid,
blocked,
DB_NAME(sp.dbid) AS DBName,
(select top 1 s.host_process_id
from Sys.dm_exec_requests r with(nolock)
right outer join Sys.dm_exec_sessions s with(nolock)
on r.session_id = s.session_id
right outer join Sys.dm_exec_connections c with(nolock)
on s.session_id = c.session_id where s.host_name=sp.hostname) 应用服务器进程Id,
(select top 1 c.client_net_address
from Sys.dm_exec_requests r with(nolock)
right outer join Sys.dm_exec_sessions s with(nolock)
on r.session_id = s.session_id
right outer join Sys.dm_exec_connections c with(nolock)
on s.session_id = c.session_id where s.host_name=sp.hostname) IP,
a.[Text] AS [TextData],
waitresource,
sp.waittime 等待毫秒,
sp.stmt_start,
lastwaittype,
sp.hostname,
a.[Text] AS [TextData],
program_name,
sp.loginame,
sp.Status,
SUBSTRING(A.text, sp.stmt_start / 2,
(CASE WHEN sp.stmt_end = -1 THEN DATALENGTH(A.text) ELSE sp.stmt_end
END - sp.stmt_start) / 2) AS [current_cmd]
FROM sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS A
WHERE spid > 50 --and lastwaittype='HADR_SYNC_COMMIT'
AND Status<>'sleeping'
ORDER BY sp.waittime desc;
SQL Server服务器CPU爆高解决的更多相关文章
- 【SQL Server】SQL Server占用CPU使用率100%的解决方法
原文:[SQL Server]SQL Server占用CPU使用率100%的解决方法 近日,帮一个客户解决了服务器CPU占用率高达100%的问题. 以前做的一个某污水处理厂自控系统项目,客户反映其自控 ...
- 10款最佳SQL Server服务器监控工具
转自:http://server.51cto.com/sSecurity-587355.htm 推荐 | 10款最佳SQL Server服务器监控工具 服务器是网络中最重要的资源之一,SQL Serv ...
- SQL Server服务器名称与默认实例名不一致的修复方法
SQL Server服务器名称与默认实例名不一致的修复方法 分类: 个人累积 SQl SERVER 数据库复制2011-08-10 09:49 10157人阅读 评论(0) 收藏 举报 sql ser ...
- Sql Server 服务器名称\实例名称 无法连接 Server Name\Instance Name
解决步骤: 1: Sql Server是否已经启动. 2: 检查Sql Server服务器是否开启TCP/IP协议. 侦听的默认端口为1433 3: ping 数据库 ...
- 使用SQL Server Driver for PHP解决PHP连接MSSQL乱码的问题
原文 使用SQL Server Driver for PHP解决PHP连接MSSQL乱码的问题 最近帮客户写了一个.net商城网站的发布接口,大家都知道.net一般都使用MSSQL数据库,但鱼丸不会. ...
- 需要我们了解的SQL Server阻塞原因与解决方法
需要我们了解的SQL Server阻塞原因与解决方法 上篇说SQL Server应用模式之OLTP系统性能分析.五种角度分析sql性能问题.本章依然是SQL性能 五种角度其一“阻塞与死锁” 这里通过连 ...
- 转:SQL Server服务器名称与默认实例名不一致的修复方法
--原因分析: --SERVERPROPERTY 函数的 ServerName 属性与@@SERVERNAME 返回相似的信息. --ServerName 属性提供Windows 服务器和实例名称,两 ...
- 在非SQL客户端使用命令行方式定期连接SQL Server 服务器并模拟用户查询操作,同时输出信息内容
一个很长的标题,实现的功能就是尽量使用非人力的方式模拟人去做一件事情,为了便于记录,将他们输出成文件方便查阅. 图形界面方式,使用微软自己的ConnMaker.exe,或者Microsoft 数据连接 ...
- SQL Server服务器上需要导入Excel数据的必要条件
SQL Server服务器上需要导入Excel数据,必须安装2007 Office system 驱动程序:数据连接组件,或者Access2010的数据库引擎可再发行程序包,这样就不必在服务器上装Ex ...
随机推荐
- [Artoolkit] Marker Training
Link: Documentation About the Traditional Template Square Marker Limitations (重要) Traditional Templa ...
- Apache Maven 打包可执行jar
在本文的 参考资料 部分,您将发现大量介绍 Maven 的入门教程.本文的 5 个技巧目的是帮助您解决即将出现的一些问题:使用 Maven 管理您的应用程序的生命周期时,将会出现的编程场景. 1. 可 ...
- libuv示例代码
https://github.com/nikhilm/uvbook/tree/master/code
- 使用mui.js实现下拉刷新
闲聊: 最近因公司项目需求,小颖需要写一些html5页面,方便公司IOS和Android给APP中嵌套使用,其中需要实现拉下刷新功能,其实就是调用了一下mui.js就可以啦嘻嘻,下面跟着小颖一起来看看 ...
- 在移动端如何用swiper实现导航栏效果
我们在写移动端的时候会有滑动和点击导航后滑动到目标页面功能:而这个功能如果自己写的话会很麻烦,所以我在这推荐一下swiper这个插件. 其实swiper中的官网中也有这种功能的实现,但是我认为是有点麻 ...
- windous----常用命令集合
Windous常用命令 winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------windows更新程 ...
- day4 四、流程控制之if判断、while循环、for循环
一.if判断 1.语法一: if 条件: 条件成立时执行的子代码块 代码1 代码2 代码3 示例: sex='female' age= is_beautiful=True and age < a ...
- ubuntu下能ping通ssh不通的解决思路
1.首先看看是否能ping通,如果ping不通可能就要考虑网线.路由等问题了: 2.看防火墙是否关闭,sshd是否开启 3.ssh -v 服务器的ip号,根据提示寻找可能的问题: 我的问题在这一步之后 ...
- Oracle DBLINK 简单使用
oracle在进行跨库访问时,可以通过创建dblink实现,今天就简单的介绍下如果创建dblink,以及通过dblink完成插入.修改.删除等操作 首先了解下环境:在tnsnames.ora中配置两个 ...
- shell之awk面试小案例
[root@chavinking mnt]# cat textfile chavinking 1 2 3 4 5 6 nope 1 2 3 4 5 6 [root@chavinking mnt]# c ...