加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer 定位CPU使用较高的用户和SQL

发布时间:2020-12-12 13:10:41 所属栏目:MsSql教程 来源:网络整理
导读:CPU 高的时候有很多方法定位,以下是一种比较慢的定位方法,不过本人也不会这样跟踪。实例如下: 首先确认高CPU是数据库内部消耗还是Windows其他应用程序消耗较高CPU。打开Windows 任务管理器可以确定哪个进程消耗高CPU。 确定是 sqlserver 实例内部消耗的CP

CPU 高的时候有很多方法定位,以下是一种比较慢的定位方法,不过本人也不会这样跟踪。实例如下:


首先确认高CPU是数据库内部消耗还是Windows其他应用程序消耗较高CPU。打开Windows 任务管理器可以确定哪个进程消耗高CPU。



确定是 sqlserver 实例内部消耗的CPU,打开性能计数器跟踪。

cmd——》perfmon——》选择计数器对象 thread ——》选择 % Processor Time、ID Process 、ID Thread——》对象实例选择所有的sqlserver/XX——》确定!



选择高亮,点击最高的线条,或者逐行查看sqlserver 线程的% Processor Time,确定为 51?



找到 ID Thread 为?51的,查看其值为2252,即为线程ID。


到数据库中查看系统表?sys.sysprocesses ,kpid为2252的连接,可以看多执行的状态和对象信息。

SELECT spid,kpid,dbid,cpu,lastwaittype,status,loginame
FROM sys.sysprocesses WHERE spid=55


查看执行语句:

DBCC INPUTBUFFER(55)


可以确定执行了什么语句,即可进行相关优化。或者对该登录连接进行相关操作。

本人一般直接查看当前请求的连接:

SELECT 
sp.[kpid],der.[session_id],der.[request_id],der.[start_time],der.[status],der.[command],dest.[text],DB_NAME(der.[database_id]) [database],der.[blocking_session_id],der.[wait_type],der.[wait_time],der.[wait_resource],der.[reads],der.[writes],der.[logical_reads],der.[row_count],sp.lastwaittype,sp.hostname,sp.program_name,sp.loginame,sp.cmd
FROM sys.[dm_exec_requests] AS der 
INNER JOIN master.dbo.sysprocesses AS sp on der.session_id=sp.spid
CROSS APPLY  sys.[dm_exec_sql_text](der.[sql_handle]) AS dest 
WHERE [session_id]>50 AND session_id<>@@SPID AND der.[database_id]=DB_ID()
ORDER BY [cpu_time] DESC

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读