1 SQL CPU 经常高达 99% 需要一段时间后才能恢复到正常
2 有时为SQL 与文件同步进程各占50%
3 当将网络断开后,单独访问时也有CPU 高达100%的情况,但没有网络连接时那么频繁。
4 将数据库与OA文件复制到别的电脑上后再访问时情况正常(此时只有一个访问量)
5 SQL企业管理器里有部份系统数据库没有显示此数据库上有分发与复制,
此系统上还有一个联想的同件同步程序客户的情况是这样,分内网外网两台服务器,不同的客户端访问不同的服务器,
外网是分发与复制主服务器(也就是现在出问题的服务器),目前内网情况还算稳定,外网这台服务器出现上述问题。 请问,上述的问题该怎么样分析到底问题出在哪里?

解决方案 »

  1.   

    事件探查器跟踪一下出问题时跑的 sql 语句, 看看这些语句中那些CPU使用率高, 针对这些语句优化
      

  2.   

    是看CPU, 不是看持续时间啊
      

  3.   

    嗯,我看了下我当时保存下来的文件,
    里面是有一个存储过程被频繁使用到的。cpu最高达2000多,
      

  4.   

     --根据用户选择新闻信息  
    --  
    CREATE proc WIT_OA_Article_GetByObjectOnTop  
      
    @ModuleID int,   
        @UserID int,  
         @DptIDList nvarchar(3000),  
         @DutyIDList nvarchar(3000),  
         @topID int     
    as  
       declare @Sqlstring nvarchar(3000)   
    --赋初始值   
    if @DptIDList = ''  
     begin  
     set @DptIDList='0'    
     end  
    if @DutyIDList = ''  
     begin  
     set @DutyIDList='0'    
     end  
      
     --选择新闻   
        set @Sqlstring =  'SELECT DISTINCT top '+CAST(@topID as nvarchar)+'   
                                    n.[ItemID],   
                n.Title,  
          tu.RealName     as RealName,  
            tu.loginname    as loginname,  
                       n.CreateDate  
                       FROM WIT_OA_Article n  
                       inner join WIT_OA_ArticleObject nto  on n.[ItemID] = nto.ArticleID  
               left join rb_Users tu on tu.userid=n.userID         
                       where   
     n.moduleID =  ' + CAST(@ModuleID as nvarchar) + '   
    AND  
    (  
                      (n.type = 1 and nto.objectID = '+CAST(@userID as nvarchar)+')  
                      or   
                       (n.type = 3 and nto.objectID in ('+ @DptIDList +'))  
                      or   
                       (n.type = 2 and nto.objectID in ('+ @DutyIDList +'))  
    )  
       
                    order by n.[ItemID] desc'  ---
    WIT_OA_ArticleObject 表里ArticleID有索引,objectID也有索引 (2百多万数据)
    WIT_OA_Article表ItemID是主键(5万多数据)
    rb_Users 表 userid 是主键 (5千多数据)占CPU高的这个存储过程为如上,各位给看看还能怎么优化 ?
    这个是我去年给优化过了的
      

  5.   


    --TRY:
    CREATE proc WIT_OA_Article_GetByObjectOnTop 
     
    @ModuleID int, 
        @UserID int, 
        @DptIDList nvarchar(3000), 
        @DutyIDList nvarchar(3000), 
        @topID int   
    as 
      declare @Sqlstring nvarchar(4000) --选择新闻 
        set @Sqlstring =  'SELECT DISTINCT top '+CAST(@topID as nvarchar)
        SET @Sqlstring =@Sqlstring+'FROM  
    (
    SELECT
    n.[ItemID], 
    n.Title, 
    tu.RealName    as RealName, 
    tu.loginname    as loginname, 
    n.CreateDate 
    FROM  WIT_OA_Article n 
    INNER join WIT_OA_ArticleObject nto  ON n.[ItemID] = nto.ArticleID 
             LEFT join rb_Users tu ON tu.userid=n.userID       
    WHERE n.moduleID =  ' + CAST(@ModuleID as nvarchar) + ' 
    AND (n.type = 1 and nto.objectID = '+CAST(@userID as nvarchar)+') '    IF @DutyIDList<>''
    SET @Sqlstring =@Sqlstring+' UNION ALL  SELECT
    n.[ItemID], 
    n.Title, 
    tu.RealName    as RealName, 
    tu.loginname    as loginname, 
    n.CreateDate 
    FROM  WIT_OA_Article n 
    INNER join WIT_OA_ArticleObject nto  ON n.[ItemID] = nto.ArticleID 
             LEFT join rb_Users tu ON tu.userid=n.userID       
    WHERE n.moduleID =  ' + CAST(@ModuleID as nvarchar) + ' 
    AND (n.type = 2 and nto.objectID in ('+ @DutyIDList +')  '
        IF @DptIDList<>''
    SET @Sqlstring =@Sqlstring+' UNION ALL SELECT
    n.[ItemID], 
    n.Title, 
    tu.RealName    as RealName, 
    tu.loginname    as loginname, 
    n.CreateDate 
    FROM  WIT_OA_Article n 
    INNER join WIT_OA_ArticleObject nto  ON n.[ItemID] = nto.ArticleID 
             LEFT join rb_Users tu ON tu.userid=n.userID       
    WHERE n.moduleID =  ' + CAST(@ModuleID as nvarchar) + ' 
    AND (n.type = 3 and nto.objectID in ('+ @DptIDList +') '    SET @Sqlstring =@Sqlstring+' 
    ) tmp
    order by [ItemID] desc' 
      

  6.   

    中午的时候应该是备份数据库把?
    一般CPU 比较大 都是 IO读写的问题
      

  7.   

    CPU 100% 不降低,咋办?