作家
登录

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

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

 
  •  
  •         ,'02113013','02113014','02113015','02113016','02113017','02113018','02113019','02113020' 
  •  
  •         ,'02113021','02113022','02113023','02113024','02113025','02113026'))) 
  •  
  •     or (mgrobjid 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')) 
  •  
  •     ) 
  •  
  • order by alarmtime DESC  
  • SQLServer的萌芽筹划很清跋扈的告诉了我们到底在哪一步消费了最大年夜的资本。我们先来看看获取top30的记录:

    排序竟然占了94%的资本。本来是它!同事立时想到,用orderno排序会不会快点。先把上述语句在SQLServer中履行一遍,清掉落缓存之后,大年夜概是2~3秒,然后排序字段改为orderno,1秒都不到,不雅然有效。然则orderno的次序跟alarmTime的次序是不完全一致的,orderno的排序无法替代alarmTime排序,那么怎么办?

    我想,因为选择的是top,那么因为orderno是集合索引,那么选择前30笔记录,可以急速返回,根本无需遍历全部结不雅,那么如不雅alarmTime是个索引字段,是否可以加快排序?

    选择top记录时,尽量为order子句的字段建立索引

    先建立索引:

    碰到的问题

    1. IF NOT EXISTS(SELECT * FROM sysindexes WHERE id=OBJECT_ID('eventlog'AND name='IX_eventlog_alarmTime'
    2.  
    3.     CREATE NONCLUSTERED INDEX IX_eventlog_alarmTime ON dbo.eventlog(AlarmTime)  

    在查看履行筹划:

    看到没有,刚才萌芽耗时的Sort已经消掉不见了,那么怎么验证它可以或许有效的降低我们的CPU呢,难道要到现场安排,当然不是。

    查看SQL语句CPU高的语句

    1. SELECT TOP 10 TEXT AS 'SQL Statement' 
    2.  
    3.     ,last_execution_time AS 'Last Execution Time' 
    4.  
    5.     ,(total_logical_reads + total_physical_reads + total_logical_writes) / execution_count 

        推荐阅读

        PHP单元测试与数据库测试

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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