最近在開發(fā)過程中遇到一些麻煩的事情,正常運營多年的項目Cpu突然飆升
于是開始排查問題所在,查看服務(wù)器進程發(fā)現(xiàn)Sql Server占用大量Cpu,導(dǎo)致服務(wù)器Cpu飆升出現(xiàn)卡頓
既然問題出在Sql Server數(shù)據(jù)庫,那么肯定是某些查詢緩慢消耗了大量Cpu導(dǎo)致
那么,如何在Sql Server中查詢出是哪些Sql消耗了大量Cpu呢?
Sql Server中查詢消耗占用Cpu最高的Sql語句(以下Sql代碼可查詢出消耗Cpu最高的10條Sql語句)
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,可排查下列問題:
1、檢查是否數(shù)據(jù)量太大,查詢未加索引或者索引不可用
2、是否使用了like模糊查詢,like模糊查詢時 ‘%KeyWord% ’ 這種寫法不會走索引,
如果想要like模糊搜索走索引,請這樣寫:‘KeyWord%’這種寫法會走索引
3、是否使用隨機函數(shù)自動隨機數(shù)據(jù)
原文鏈接:Sql Server中查詢出消耗占用Cpu最高的Sql語句