你好,
最近客户提出让排查前两天sqlserver服务器cpu较高问题,让其分析原因,请问有什么sql 或者方法进行分析嘛?
如果没有分析历史方法,有什么推荐内容,抓取以后在可能出现类似的问题 可以捕获嘛?

先从SQL角度查看有没有高消耗SQL出现
参考查询方法如下:
SELECT spid ,
blocked ,
DB_NAME(sp.dbid) AS DBName ,
waitresource ,
sp.waittime 等待毫秒 ,
sp.stmt_start ,
lastwaittype ,
sp.hostname ,
( SELECT TOP 1
c.client_net_address
FROM sys.dm_exec_requests r WITH ( NOLOCK )
RIGHT OUTER JOIN sys.dm_exec_sessions s WITH ( NOLOCK ) ON r.session_id = s.session_id
RIGHT OUTER JOIN sys.dm_exec_connections c WITH ( NOLOCK ) ON s.session_id = c.session_id
WHERE s.host_name = sp.hostname
) IP ,
A.[text] AS [TextData] ,
program_name ,
sp.loginame ,
sp.status ,
SUBSTRING(A.text, sp.stmt_start / 2,
( CASE WHEN sp.stmt_end = -1 THEN DATALENGTH(A.text)
ELSE sp.stmt_end
END - sp.stmt_start ) / 2) AS [current_cmd]
FROM sys.sysprocesses AS sp
OUTER APPLY sys.dm_exec_sql_text(sp.sql_handle) AS A
WHERE spid > 50 --and lastwaittype='HADR_SYNC_COMMIT'
AND status <> 'sleeping'
ORDER BY sp.waittime DESC;
评论
有用 0谢谢回复。
麻烦问下
1 有可以查询出占用cpu百分比的 sql吗 ?
2 有查询占用百分比内心的sql吗?
环境中常用 但是一直没有谢谢
评论
有用 0下面的查询显示 CPU 平均占用率最高的前 50 个 SQL 语句。
SELECT TOP 50
total_worker_time/execution_count AS [Avg CPU Time],
(SELECT SUBSTRING(text,statement_start_offset/2,(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 Time] DESC
评论
有用 0
墨值悬赏

