作家
登录

程序猿是如何解决SQL Server占CPU100%的

作者: 来源: 2017-04-07 15:06:13 阅读 我要评论

'02100016','02100017','02100018','02100019','02101000','02101001','02101002','02101003' 
  •  
  •         ,'02101004','02101005','02101006','02101007','02101008','02101009','02101010','02101011','02101012' 
  •  
  •         ,'02101013','02101014','02101015','02101016','02101017','02101018','02101019','02101020','02101021' 
  •  
  •         ,'02101022','02101023','02101024','02101025','022000','022001','022101','022102','0755','0755002'
  •  
  •     ) 
  •  
  •     and mgrobjid not in ( 
  •  
  •         '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' 
  • 这是典范的获取数据并分页的数据,一条获取最新分页记录总数,一条获取分页记录,恰是获取最新事宜这里导致的CPU过高。这里的营业大年夜概是每个客户端,每3秒履行一次数据库查找,以便显示最新的告警事宜。好了,元凶找到了,怎么解决?

    有哪些SQL语句会导致CPU过高?

    上彀查看了下文┞仿,得出以下结论:

    1.编译和重编译

    编译是 Sql Server 为指令生成履行筹划的过程。Sql Server 要分析指令要做的工作,分析它所要拜访的表格构造,也就是生成履行筹划的过程。这个过程主如果在做各类计算,所以CPU 应用比较集中的处所。

    履行筹划生成后会被缓存在 内存中,以便重用。然则不是所有的都可以 被重用。在很多时刻,因为数据量产生了变更,或者数据构造产生了变更,同样一句话履行,就要重编译。

    在萌芽的时刻,经常会做 order by、distinct 如许的操作,也会做 avg、sum、max、min 如许的聚合计算,在数据已经被加载到内存后,就要应用CPU把这些计举动当作完。所以这些操作的语句CPU 应用量会多一些。

    3.表格连接(Join)操作

    当语句须要两张表做连接的时刻,SQLServer 经常会选择 Nested Loop 或 Hash 算法。算法的完成要运行 CPU,所以 join 有时刻也会带来 CPU 应用比较集中的处所。

    4.Count(*) 语句履行的过于频繁

    大年夜致的原因,我们都知道了,然则具体到我们上述的两个SQL,似乎都有上述提到的┞封些问题,那么到底哪个擦?鲱大年夜的元凶,我们可以或许怎么竽暌古化?


      推荐阅读

      PHP单元测试与数据库测试

    我总感到 PHP 的开辟者们并没有对 PHP 的质量有所寻求,可能是因为 PHP 的机制问题吧,让大年夜部分的开辟者总认为浏览器拜访就没有问题,所以很多时刻,做 PHP 开辟的,就没有单位测试的>>>详细阅读


    本文标题:程序猿是如何解决SQL Server占CPU100%的

    地址:http://www.17bianji.com/lsqh/34647.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)