SQL Server 占用内存太高,查找占用内存高以及影响其性能的sql语句

今天公司的线上网站崩溃,登陆不了,结果查看服务器的性能的时候发现SQL Server 占用的cup 高达97%,之前没有出现过这样的状况,直觉感觉重启SQL Server就好,可是重启之后依然如此。接着重启电脑,问题依旧。

所以感觉是Sql Server哪里执行出现了问题。所以网站查找能够看到所有sql执行情况的一个sql语句。

结果找到了一位大神的sql如下:

因为我是今天数据库才出现了问题,所以改吧了一下order by,last_worker_time desc,想看一下今天哪些sql执行出现问题了

sql 如下:

SELECT s2.dbid, 
s1.sql_handle, 
(SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 , 
( (CASE WHEN statement_end_offset = -1 
THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2) 
ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,
execution_count, 
plan_generation_num, 
last_execution_time, 
total_worker_time, 
last_worker_time, 
min_worker_time, 
max_worker_time,
total_physical_reads, 
last_physical_reads, 
min_physical_reads, 
max_physical_reads, 
total_logical_writes, 
last_logical_writes, 
min_logical_writes, 
max_logical_writes 
FROM sys.dm_exec_query_stats AS s1 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 
WHERE s2.objectid is null 

ORDER BY last_worker_time desc,s1.sql_handle, s1.statement_start_offset, s1.statement_end_offset;

结果如下:


当然这是我优化之后的执行结果,优化之前截图2的last_worker_time 最高的sql高达八位数,结果把截图中1的sql 复制出来查看发现 sql中join on的字段没有建索引,有的关联表甚至没有建立主键,给条件中的字段添加上索引以及给没有主键的表添加上主键之后 再看一下cpu,SQL SERVER占用的内存已经降下来了。

在此记录下来这个问题以及解决办法供大家遇到类似问题的时候做个参考,以及自己遇到这样的问题也好查找解决办法。

猜你喜欢

转载自blog.csdn.net/chencai56/article/details/80580251