最近搞得跟世界末日要到了一样,服务器、数据库 什么鸟问题都遇见
     
     问题描述: ERP软件使用SQL SERVER 2005做后台数据库,最近服务器进程SQL SERVER 老是占用率100%
     服务器 内容8GB,8颗双核CPU ,之前上个周末公司正常业务运行ERP,就这两天CPU突然100% 
     内存使用量7.5GB 左右(这个使用率是正常的)
     
     起初以为是服务器问题,重做服务器系统SERVER 2003 ,重装SQL SERVER 2005后 依然这样。

解决方案 »

  1.   

    1.从任务管理器里面看一下哪个进程占据大量的CPU
    2.如果是SQL进程,运行一下 Profiler跟踪数据库,看什么代码在占用着大量的CPU再根据得到的信息分析处理
      

  2.   

       我在想除了代码占用CPU外还有什么原因引起CPU使用100 因为这些代码运营了很长时间都是没有问题的
      

  3.   

    查询性能视图,确定是哪些占用了资源
    跟踪Profiler亦可,更详细
    有偿支持
      

  4.   

    CPU占用率高的九种可能 
    1、防杀毒软件造成故障 
    由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧,者,升级你的硬件配备。 
    2、驱动没有经过认证,造成CPU资源占用100% 
    大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。 处理方式:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并且严格核对型号、版本。 
    3、病毒、木马造成 
    大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据高不下。解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。经常性更新升级杀毒软件和防火墙,加强防毒意识,掌握正确的防杀毒知识。 
    4、控制面板—管理工具—服务—RISING REALTIME MONITOR SERVICE点鼠标右键,改为手动。 
    5、开始->;运行->;msconfig->;启动,关闭不必要的启动项,重启。 
    6、查看“svchost”进程。 
    svchost.exe是Windows XP系统的一个核心进程。svchost.exe不单单只出现在Windows XP中,在使用NT内核的Windows系统中都会有svchost.exe的存在。一般在Windows 2000中svchost.exe进程的数目为2个,而在Windows XP中svchost.exe进程的数目就上升到了4个及4个以上。 
    7、查看网络连接。主要是网卡。 
    8、查看网络连接 
    当安装了Windows XP的计算机做服务器的时候,收到端口 445 上的连接请求时,它将分配内存和少量地调配 CPU资源来为这些连接提供服务。当负荷过重的时候,CPU占用率可能过高,这是因为在工作项的数目和响应能力之间存在固有的权衡关系。你要确定合适的 MaxWorkItems 设置以提高系统响应能力。如果设置的值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。 
    要解决此问题,我们可以通过修改注册表来解决:在注册表编辑器中依次展开[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserver ]分支,在右侧窗口中新建一个名为“maxworkitems”的DWORD值。然后双击该值,在打开的窗口中键入下列数值并保存退出: 
    9、看看是不是Windows XP使用鼠标右键引起CPU占用100% 
    在资源管理器里面,当你右键点击一个目录或一个文件,你将有可能出现下面所列问题: 
    任何文件的拷贝操作在那个时间将有可能停止相应 
    网络连接速度将显著性的降低 
    所有的流输入/输出操作例如使用Windows Media Player听音乐将有可能是音乐失真成因: 
    当你在资源管理器里面右键点击一个文件或目录的时候,当快捷菜单显示的时候,CPU占用率将增加到100%,当你关闭快捷菜单的时候才返回正常水平。 
      

  5.   

    --当前正在消耗CPU的SQLSELECT substring(p.text,statement_start_offset/2,CASE WHEN statement_end_offset>0 THEN (statement_end_offset-statement_start_offset)/2 ELSE LEN(p.text) END),
    r.status,r.cpu_time,r.logical_reads,wait_resource,wait_type,LEFT(p.text,500)
     --r.* 
    FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.plan_handle) p
    WHERE r.session_id>=50
    ORDER BY cpu_time DESC
    看看这个结果
      

  6.   


    以上可以考虑:还可以用sys.dm_os_query_stats 和sys.dm_exec_sql_text结合起来看,这样会更加准确。