SQL Server 占用CPU较高的解决方法
触发原因:月底系统结账的时候对ERP的操作较多,有用户反馈系统之间的数据传输很久没有同步。随即到服务器上查看,没有发现有程序导致的问题,看了一下CPU的使用率,发现SQL Server占用率在百分之九十以上。
解决过程:首先Baidu了一下,看了一下可能的原因应该是索引问题。之前有仔细看过SQL Server索引相关的书籍和查找优化索引的方法。所以立即使用SQL Server Profiler开始检测对CPU使用率高的SQL statement。
经过检测发现更新数据传输的语句占用CPU很高(update t_syncin_log set … where f_guid=@GUID),然后查看这张表发现一个索引都没有。随即建立了主键和f_guid非聚集唯一索引。
然后又重新检测,发现提取订单信息的存储过程对CPU占用较高,打开存储过程之后发现之前写的分页脚本是基于SQL2000写的(not in的方式),因为现在数据库已经升级到2008,所以改写了对分页的写法(Row_Number Over …的方式)。
结果:做完上述两个优化之后,发现CPU已近恢复到正常的水平。
索引就像人和食物的关系一样,要合理的选择才既能提供营养又不会造成过多的负担,。