日期:2014-05-18  浏览次数:20506 次

CPU使用率日渐增长,重启Sql服务就正常的问题
这段时间遇到一个很古怪的问题,有一台Sql Server 2005服务器,CPU使用率会每天增长一点,到最后会非常高,造成所有查询都超时,此时重启这台服务器的数据库服务,就恢复正常了,但是CPU还是每天增长,最后又挂掉,CPU增长如图:



上图的3个最高点,都是重启数据库服务后就正常了,在Week45和Week46之间的一个高点,是执行了下述sql:
DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE 
DBCC FREESYSTEMCACHE ('ALL')

具体应用环境:
有一台主数据库作为发布服务器,另外3台服务器作为订阅服务器,这台有问题的服务器是订阅服务器中的一台,但是另外两台订阅服务器没有这个问题

求大侠指点问题的可能性

------解决方案--------------------
会不会是连接上有什么问题,导致它反复连接而造成CPU负担过重呢?
或者,磁盘有没有什么问题.
------解决方案--------------------
这台订阅和其他两台有什么区别,连接有没有问题。
------解决方案--------------------
会不会是日志文件太大?或者索引碎片的问题,磁盘碎片这些造成的I/O和CPU瓶颈?

没有这方面的经验 学习一下。
------解决方案--------------------
可能的原因:

1.是否过多的语句及存储过程使用了option(recompile)选项.

2.当时服务器是否在执行例行维护作业(windows级的),数据导出或数据库备份等事情.

3.确认SQL2005 SP3补丁及Windows补丁都安装更新了没.

4.复制(replication)的类型是快照式的吗?如是,这个问题就好解释了.
------解决方案--------------------
看看下面几个计数器
SQLServer: SQL Statistics: Batch Requests/Sec,SQL Compilations/Sec,SQL Recompilations/Sec

再跟另外2台订阅服务器比比

个人觉得是查询量大,编译,重编译次数多。
------解决方案--------------------
建议设定一个SQL Job, 每天在系统闲时, 执行以下,
SQL code

DBCC FREEPROCCACHE
DBCC FREESESSIONCACHE  
DBCC FREESYSTEMCACHE ('ALL')

------解决方案--------------------
我猜,

楼主的系统里数据的特点,是不是经常做大批量导入或大批修改的操作?

是否有设定系统维护计划,定期进行索引碎片整理? 我估计是没有.
------解决方案--------------------
加我QQ:449693030,我方便的时候,远程帮你看一下
------解决方案--------------------
如果发布服务器上有大批量导入或修改的操作,也是会同步同样的操作过来的喔.

可以比对一下,该订阅服务器与其他2台订阅服务器的差别,如索引有可能不一致.

原因慢慢找, 暂时措施是用10楼的方法.