日期:2014-05-17  浏览次数:20795 次

SQL Server CPU 100%
我们数据库服务器现在CPU  100%
版本是SQL Server 2008 R2 SP1 企业版 64位
通过profiler抓到SQL,耗CPU最高的是类似 select (sum(page_count)/128.0) from sys.dm_db_index_physical_stats(5, 269244014, NULL, NULL, 'DETAILED')  这种SQL,
请问为什么这查询索引碎片的SQL会自动执行?什么情况下会自动执行这种SQL?
有谁能帮忙解答一下,谢谢!

------解决方案--------------------
看看job里面有没有启动
------解决方案--------------------
或者在JOB里,或者在三方工具里。。看看是哪个SPID,顺腾摸瓜呗
综合分析更全面
------解决方案--------------------
看下这个系统视图的功能:返回指定表或视图的数据和索引的大小和碎片信息
是否有JOB或维护在做碎片整理?
当然,楼主看可以监控中看一下,是哪台机器,哪个用户来执行的这个操作,SPID大于50的是用户进程,小于50是系统进程。综合判断一下这条语句的来源
------解决方案--------------------
能找到spid是什么不?然后用DBCC INPUTBUFFER(SPID)看看
------解决方案--------------------
其实看那个语句,如果是系统引起的话,我个人猜测比较大的可能是维护计划里面的“更新统计信息”或者“重建索引”或者“重组索引”这几个操作引起的。
select (sum(page_count)/128.0) from sys.dm_db_index_physical_stats(5, 269244014, NULL, NULL, 'DETAILED') 至于是不是人为导致的,还得做其他监控。
------解决方案--------------------
--先看一下是哪个表有这样的操作?这个表数据量很大?有很多索引?有人更改了表结构?数据变化很大?
--如果是系统自动统计,可以先结束掉这个进程。等系统空闲的时候,再重建索引

sys.dm_db_index_physical_stats ( 
    {database_id 
------解决方案--------------------
 NULL }
    , { object_id 
------解决方案--------------------
 NULL }
    , { index_id 
------解决方案--------------------
 NULL 
------解决方案--------------------
 0 }
    , { partition_number 
------解决方案--------------------
 NULL }
    , { mode 
------解决方案--------------------