SqlServer 有张表,被频繁访问,导致服务器cpu 比较高,有没有什么好的办法解决呢

解决方案 »

  1.   

    用profiler看看你的语句的reads和duration是多少,duration的单位是毫秒
      

  2.   

    看看如下的情况是否对你有帮助?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%,当你关闭快捷菜单的时候才返回正常水平。 
      

  3.   

    执行很快的, duration 最多 50 
      

  4.   

    SqlServer 有张表,被频繁访问,导致服务器cpu 比较高,有没有什么好的办法解决呢
    -->>看看这张表的字段是不是比较多,如果比较多的话,建议把表拆分成几个小表;如果字段比较少的话,好像不好办
      

  5.   

    字段是比较少的, 只有3个字段, 一个是 IPName   MinIP    MaxIP
      

  6.   

    能不能贴出你的语句,你的reads太高,最好控制在500一下
      

  7.   


    CPU比较高?应该是你的SQL中含有复杂的计算吧,分组?帖出表结构&SQL比较好分析一点。
      

  8.   

    是有计算的, 
              string[] IPs = strIP.Split('.');
                long lIP = ck.ObjToInt64(IPs[0]) * 256 * 256 * 256 + ck.ObjToInt64(IPs[1]) * 256 * 256 + ck.ObjToInt64(IPs[2]) * 256 + ck.ObjToInt64(IPs[3]);
    算出当前 ip 得值, 然后进数据库匹配
      

  9.   


    楼上的,很明确的告诉你,between and 
    不如>= 和<=不信自己试一试。自己造2千万的数据测试。
      

  10.   

    貌似没写出sql语句,这是最关键的部分
      

  11.   

    Sql 是这样的      string strSql = "Select IPName from TB_IPS where MinIP<=" + lIP + " and MaxIP>=" + lIP + "";
      

  12.   


    建议用存储过程来查询,你的sql,如果满足条件的记录比较多,比如 10万左右,那你这条sql要花不少的时间,因为它要返回10万条记录,这是很花费性能的,用存储过程分页读取你要显示的数据就可以了
      

  13.   

    1.在minip,maxip上面建立联合索引;
    2.看看你这条语句的执行计划;
    3.在查询分析器里执行这条语句看看返回多少条记录
      

  14.   

    LZ我怀疑你找错地方了。按你说的情况看,就算这个表访问的再频繁,也不会导至cpu大量占用(你的duration才50)是不是还有其它什么地方有问题?
      

  15.   

    string strSql = "Select top 1 IPName from TB_IPS where MinIP <=" + lIP + " and MaxIP>=" + lIP + "";
      

  16.   

    C# code先多拿点数据到内存Dataset中,然后再对dataset 进行筛选
      

  17.   

    表里面有多少条记录? 然后经常用到的查询条件字段有没有建索引? 注意 like '%abc' 这样的写法是无法使用索引的。如果只要一条的话,用top 1 会快很多。
      

  18.   

    得先确定下是否是这个表的问题,如果是的话用跟踪看下对这个表的操作(其实开始就需要跟踪所有的查询查找损耗cpu、时间的语句)。确定后再分析。就SQL简单而言,索引应用不当,或索引没有维护至于硬件问题也有可能,可能性虽然不高,但更致命.