cpu占用过高怎么办 cpu占用过高怎么办

来自:马非码 - 博客园
文章目录
遇到的问题
使用SQLServer Profiler监控数据库
SQL1:查找最新的30条告警事件
SQL2:获取当前的总报警记录数
有哪些SQL语句会导致CPU过高?
查看SQL的查询计划
选择top记录时,尽量为order子句的字段建立索引
查看SQL语句CPU高的语句
通过建立相关索引来减少表扫描
其他优化手段
总结
遇到的问题
使用SQLServer Profiler监控数据库
SQL1:查找最新的30条告警事件
SQL2:获取当前的总报警记录数
有哪些SQL语句会导致CPU过高?
查看SQL的查询计划
选择top记录时,尽量为order子句的字段建立索引
查看SQL语句CPU高的语句
通过建立相关索引来减少表扫描
其他优化手段
总结
遇到的问题
使用SQLServer Profiler监控数据库
SQL1:查找最新的30条告警事件
SQL2:获取当前的总报警记录数
展开全文
SQL1:查找最新的30条告警事件
SQL2:获取当前的总报警记录数
有哪些SQL语句会导致CPU过高?
查看SQL的查询计划
选择top记录时,尽量为order子句的字段建立索引
查看SQL语句CPU高的语句
通过建立相关索引来减少表扫描
选择top记录时,尽量为order子句的字段建立索引
查看SQL语句CPU高的语句
通过建立相关索引来减少表扫描
其他优化手段
总结
遇到的问题
有同事反应服务器CPU过高,一看截图基本都是100%了,my god,这可是大问题,赶紧先看看 。
让同事查看系统进程,发现是SQLServer的CPU占用比较高 。首先想到的是不是报表生成的时候高,因为这块之前出现过问题,关掉服务程序,还是高 。难道是客户端程序引发的?但是这么多的客户端连接,难不成每个都叫人关闭,很简单,把网络断开即可 。网络断开之后,CPU立马下降 。那么问题到底在哪里呢,是时候祭出我们的利器了——SQLServer Profiler 。
使用SQLServer Profiler监控数据库

cpu占用过高怎么办 cpu占用过高怎么办

文章插图
让同事使用SQLProfiler监控了大概20分钟左右,然后保存为跟踪文件*.rtc 。
我们来看看到底是哪句SQL有问题:
SQL1:查找最新的30条告警事件
selecttop30a.orderno,a.AgentBm,a.AlarmTime,a.RemoveTime,c.NameasAddrName,b.NameasMgrObjName,a.Ch,a.Value,a.Content,a.Level
,ag.NameasAgentServerName,a.EventBm,a.MgrObjId,a.Id,a.Cfmoper,a.Cfm,a.Cfmtime,a.State,a.IgnoreStartTime,a.IgnoreEndTime
,a.OpUserId,d.NameasMgrObjTypeName,l.UserNameasuserName,f.NameasAddrName2
fromeventlogasaleft joinmgrobjasbona.MgrObjId=b.Idanda.AgentBm=b.AgentBm
left joinaddrnodeasconb.AddrId=c.Idleft joinmgrobjtypeasdonb.MgrObjTypeId=d.Id
left joineventdiraseona.EventBm=e.Bmleft joinagentserverasagona.AgentBm=ag.AgentBm
left joinloginUseraslona.cfmoper=l.loginGuidleft joinaddrnodeasfonag.AddrId=f.Id
where((MgrObjIdin(
selectIdfromMgrObj
whereAddrIdin('','02100000','02113000','02113001','02113002','02113003','02113004'
,'02113005','02113006','02113007','02113008','02113009','02113010','02113011','02113012'
,'02113013','02113014','02113015','02113016','02113017','02113018','02113019','02113020'
,'02113021','02113022','02113023','02113024','02113025','02113026')))
or(mgrobjidin('00000000-0000-0000-0000-000000000000','00000000-0000-0000-0000-000000000000'
,'00000000-0000-0000-0000-000000000000','11111111-1111-1111-1111-111111111111'
,'11111111-1111-1111-1111-111111111111'))
)
order byalarmtimeDESC
selecttop30a.orderno,a.AgentBm,a.AlarmTime,a.RemoveTime,c.NameasAddrName,b.NameasMgrObjName,a.Ch,a.Value,a.Content,a.Level