最近在开发过程中遇到一些麻烦的事情,正常运营多年的项目Cpu突然飙升
于是开始排查问题所在,查看服务器进程发现Sql Server占用大量Cpu,导致服务器Cpu飙升出现卡顿
既然问题出在Sql Server数据库,那么肯定是某些查询缓慢消耗了大量Cpu导致
那么,如何在Sql Server中查询出是哪些Sql消耗了大量Cpu呢?
Sql Server中查询消耗占用Cpu最高的Sql语句(以下Sql代码可查询出消耗Cpu最高的10条Sql语句)
02 |
total_worker_time/execution_count AS avg_cpu_cost, plan_handle, |
04 |
( SELECT SUBSTRING (text, statement_start_offset/2 + 1, |
05 |
( CASE WHEN statement_end_offset = -1 |
06 |
THEN LEN( CONVERT (nvarchar( max ), text)) * 2 |
07 |
ELSE statement_end_offset |
08 |
END - statement_start_offset)/2) |
09 |
FROM sys.dm_exec_sql_text(sql_handle)) AS query_text |
10 |
FROM sys.dm_exec_query_stats |
11 |
ORDER BY [avg_cpu_cost] DESC |
利用上面Sql可快速定位是哪些Sql导致Cpu被大量占用
如果您的Sql Server占用大量CPU,可排查下列问题:
1、检查是否数据量太大,查询未加索引或者索引不可用
2、是否使用了like模糊查询,like模糊查询时 ‘%KeyWord% ’ 这种写法不会走索引,
如果想要like模糊搜索走索引,请这样写:‘KeyWord%’这种写法会走索引
3、是否使用随机函数自动随机数据