最近在開(kāi)發(fā)過(guò)程中遇到一些麻煩的事情,正常運(yùn)營(yíng)多年的項(xiàng)目Cpu突然飆升

于是開(kāi)始排查問(wèn)題所在,查看服務(wù)器進(jìn)程發(fā)現(xiàn)Sql Server占用大量Cpu,導(dǎo)致服務(wù)器Cpu飆升出現(xiàn)卡頓

既然問(wèn)題出在Sql Server數(shù)據(jù)庫(kù),那么肯定是某些查詢緩慢消耗了大量Cpu導(dǎo)致

那么,如何在Sql Server中查詢出是哪些Sql消耗了大量Cpu呢?


Sql Server中查詢消耗占用Cpu最高的Sql語(yǔ)句(以下Sql代碼可查詢出消耗Cpu最高的10條Sql語(yǔ)句)

SELECT TOP 10
   total_worker_time/execution_count AS avg_cpu_cost, plan_handle,
   execution_count,
   (SELECT SUBSTRING(text, statement_start_offset/2  +  1,
      (CASE WHEN statement_end_offset = -1
         THEN LEN(CONVERT(nvarchar(max), text)) * 2
         ELSE statement_end_offset
      END - statement_start_offset)/2)
   FROM sys.dm_exec_sql_text(sql_handle)) AS query_text
FROM sys.dm_exec_query_stats
ORDER BY [avg_cpu_cost] DESC

利用上面Sql可快速定位是哪些Sql導(dǎo)致Cpu被大量占用


如果您的Sql Server占用大量CPU,可排查下列問(wèn)題:

1、檢查是否數(shù)據(jù)量太大,查詢未加索引或者索引不可用

2、是否使用了like模糊查詢,like模糊查詢時(shí) ‘%KeyWord% ’ 這種寫(xiě)法不會(huì)走索引,

     如果想要like模糊搜索走索引,請(qǐng)這樣寫(xiě):‘KeyWord%’這種寫(xiě)法會(huì)走索引

3、是否使用隨機(jī)函數(shù)自動(dòng)隨機(jī)數(shù)據(jù)

原文鏈接:Sql Server中查詢出消耗占用Cpu最高的Sql語(yǔ)句