13:05 2015/9/11 午睡醒来收到几封CPU使用率预警邮件。登录对应服务器,打开资源监视器,看到sqlservr.exe进程的CPU达到40%(平常服务器CPU消耗在10%以内)。查看CPU信息跟踪表,近一小时的CPU都维持在40%左右。
TRUNCATE引起CPU异常上涨
图1 CPU使用率预警邮件
TRUNCATE引起CPU异常上涨TRUNCATE引起CPU异常上涨
图2 资源监视器和CPU信息跟踪表
开启profiler跟踪,筛选CPU>60毫秒的事件。发现有一个存储过程调用非常频繁,而且cpu>90 read>2800。查看此过程,语句很简单,返回记录数很少,表上有对应索引。但从profiler所得开销看,语句肯定没有使用索引。之前遇到类似的问题,只需删除存储过程的计划缓存,cpu、read就降下去了。

--返回做IO数目最多的存储过程以及它们的执行计划(微秒)
SELECT TOP 20 DB_NAME(a.database_id) DBname
      ,OBJECT_NAME(OBJECT_ID ,database_id) 'proc name'
      ,a.cached_time
      ,a.last_execution_time
      ,a.execution_count
      ,a.last_logical_reads
      ,a.total_logical_reads / a.execution_count avg_logical_reads
      ,a.total_logical_writes / a.execution_count avg_logical_writes
      ,a.total_physical_reads / a.execution_count avg_physical_reads
      --,a.total_worker_time / a.execution_count AS avg_worker_time
      ,a.total_elapsed_time / a.execution_count avg_elapsed_time
       --,b.text
       ,c.query_plan
       ,a.plan_handle
FROM   sys.dm_exec_procedure_stats    AS a
       CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) b
CROSS APPLY sys.dm_exec_query_plan(a.plan_handle) c
where OBJECT_NAME(OBJECT_ID ,database_id) ='ProcName'
ORDER BY
       a.total_logical_reads/a.execution_count desc
       
--DBCC FREEPROCCACHE(0x0500080094EA1B2F40A1B3DE000000000000000000000000)
View Code

相关文章:

  • 2022-12-23
  • 2021-06-27
  • 2021-10-30
  • 2021-10-14
  • 2022-12-23
  • 2021-11-03
  • 2022-02-10
  • 2021-12-11
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-23
  • 2021-10-02
  • 2021-09-12
  • 2021-05-22
  • 2022-12-23
相关资源
相似解决方案