Sql Server 经常出现CPU占用100%的情况,重启后能运行一段时间,一般情况下CPU占用很正常,偶尔瞬时占用较高达80~90%,数据记录相对较,30W~40W条记录运行一段时间后就会出现100%居高不下,只有重启才行,有时一天出现几次,有时不会出现。请大家帮忙分析原因?程序占用的连接没有及时释放?
优化SQL查询?(这是肯定要做的工作之一了)
优化索引?有什么可能?用什么方法排查问题较好?

解决方案 »

  1.   

    使用SQL Server Profiler工具跟踪,看哪些占用较多资源,并进行优化。
      

  2.   

    当占用100%时,打开SQL Server “管理--活动监视器”,看有没死锁。
      

  3.   

    1:SQL Server Profiler
    2:操作系统的一个工具:管理工具-->性能
      

  4.   

    SQL Server Profiler 
    查看那sql执行时间最长
      

  5.   

    性能数据的收集和分析是要平时做积累,建议楼主收集这方面的数据然后分析具体原因。
    select --top 5 
    (total_logical_reads/execution_count) as [平均逻辑读取次数],
    (total_logical_writes/execution_count) as [平均逻辑写入次数],
    (total_physical_reads/execution_count) as [平均对象读取次数],
     Execution_count 运行次数, 
    substring(qt.text,r.statement_start_offset/2+1, 
    (case when r.statement_end_offset = -1 
    then datalength(qt.text) 
    else r.statement_end_offset end - r.statement_start_offset)/2+1) [运行语法]
    from sys.dm_exec_query_stats  as r
    cross apply sys.dm_exec_sql_text(r.sql_handle) as qt 
    order by 
     (total_logical_reads + total_logical_writes) Desc在不同时间点和性能高峰期分别抓取相应数据供分析。
      

  6.   

    1、排除病毒影响
    2、使用SQL Server Profiler跟踪一下
      

  7.   

    不监测很难找到问题所在,如果你们公司愿意出点苦力费,可以找我
    不管是SQL 7、2000 、2005 、2008
      

  8.   

    病毒肯定是排除的我计划
    先用SQL Server Profiler跟踪
    然后找到哪几条SQL占用资源较厉害
    考虑建索引
    考虑缓存占用资源的SQL的页面先搞完这些看看再说吧
      

  9.   

    你查看系统资源的服务中的一些东西,如果一些实例的服务不需要开启的就改成手动的,这样可以节约一部分CPU和内存
      

  10.   

    你的job你的sp有没有游标?? 特别是跑很多记录的游标...再接着看,你的内存多大?? 先把你的硬件环境说出来 .. 外带你的application情况 内存有没有设置上限...在cpu 使用率较高的时候 打开perfmon , 看缓存命中率..低于99,基本就是内存问题....确诊后,高峰期用Profiler 抓t-sql 和sp 的batch completed ~ 筛选下...IO大于5000 你也可以筛选 Duration ..把捕获的数据 写入你自己使用的机器(个人用机器,测试机之类的)的表里,别写在生产机上...看看哪些sql写得很烂,使用IO暴多的, 还有索引不合理的 ,或者没有索引的, 等等这些....剩下的就看你写sql的功力 以及 你主观臆断的能力了...
      

  11.   

    建议使用sql的事件查看器,程序运行时可以看到sql运行过程,硬件上可以增加内存
      

  12.   

    本人进一步在程序上做了优化,合理使用了程序缓存,增加一部分文件缓存,把WEB server的压力分流一小部分到硬盘
    优化一部分数据表索引
    最终又加上静态生成
    SQL的CPU问题得到一定程度的缓解各位的意见都很受用,话不多说,散分