有同事反竽暌功办事器CPU过高,一看截图根本都是100%了,my god,这可是大年夜问题,赶紧先看看。
特别是对大年夜表 Count() ,因为 Count() 后面如不雅没有前提,或者前提用不上索引,都邑引起 全表扫描的,也会引起 CPU 的大年夜量运算
我们再来看看count(*)这句怎么竽暌古化,因为膳绫擎的┞封句跟count这句差别就在于order by的排序。惯例子,用萌芽筹划看看。
文┞仿目次
- 碰到的问题
- 应用SQLServer Profiler监控数据库
- SQL1:查找最新的30条告警事宜
- SQL2:获取当前的总报警记录数
- 有哪些SQL语句会导致CPU过高?
- 查看SQL的萌芽筹划
- 选择top记录时,尽量为order子句的字段建立索引
- 查看SQL语句CPU高的语句
- 经由过程建立相干索引来削减表扫描
- 其他优化手段
- 总结
让同事查看体系过程,发明是SQLServer的CPU占用比较高。起首想到的是不是报表生成的时刻高,因为这块之前出现干预干与题,关掉落办事法度榜样,照样高。难道是客户端法度榜样激发的?然则这么多的客户端连接,难不成每个都叫人封闭,很简单,把收集断开即可。收集断开之后,CPU立马降低。那么问题到底在哪里呢,是时刻祭出我们的利器了——SQLServer Profiler。
应用SQLServer Profiler监控数据库
让同事应用SQLProfiler监控了大年夜概20分钟阁下,然后保存为跟踪文件*.rtc。
我们来看看到底是哪句SQL有问题:
SQL1:查找最新的30条告警事宜
SQL2:获取当前的总报警记录数
- select count(*) from eventlog as a left join mgrobj as b on a.MgrObjId=b.Id and a.AgentBm=b.AgentBm
- left join addrnode as c on b.AddrId=c.Id left join mgrobjtype as d on b.MgrObjTypeId=d.Id
- left join eventdir as e on a.EventBm=e.Bm
- where MgrObjId in (
- select Id from MgrObj where AddrId in
- ('','02100000','02100001','02100002','02100003','02100004','02100005','02100006','02100007'
- ,'02100008','02100009','02100010','02100011','02100012','02100013','02100014','02100015'
- ,
推荐阅读
我总感到 PHP 的开辟者们并没有对 PHP 的质量有所寻求,可能是因为 PHP 的机制问题吧,让大年夜部分的开辟者总认为浏览器拜访就没有问题,所以很多时刻,做 PHP 开辟的,就没有单位测试的>>>详细阅读
本文标题:程序猿是如何解决SQL Server占CPU100%的
地址:http://www.17bianji.com/lsqh/34647.html
1/2 1