暂无图片
分享
许朝阳
2019-04-01
如何排查数据库cpu较高问题。

你好,

最近客户提出让排查前两天sqlserver服务器cpu较高问题,让其分析原因,请问有什么sql  或者方法进行分析嘛?

如果没有分析历史方法,有什么推荐内容,抓取以后在可能出现类似的问题 可以捕获嘛?


image.png


收藏
分享
5条回答
默认
最新
lastwinner

先从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
我是DBA

下面的查询显示 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
许朝阳

多谢

暂无图片 评论
暂无图片 有用 0
章芋文
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏