获取 Sql Server 中 CPU 占用及产生锁的 SQL 通常需要通过观察系统状态和运行 SQL 的表现来进行,下面将介绍通过 SQL 命令来实现这一目标的完整攻略。
查找 CPU 占用
查询系统进程
可以使用以下的 SQL 命令查询 Sql Server 的相关进程信息,从而获得 CPU 占用情况:
SELECT * FROM sys.sysprocesses WHERE spid > 50 ORDER BY CPU DESC
该命令中,sys.sysprocesses 是 SQL Server 中的系统表,其中包含有关运行在 SQL Server 实例上的用户和系统进程的信息。通过查看此表中的 CPU 列即可获得当前正在消耗 CPU 的运行进程。上述代码查询的是 spid 大于 50 的进程(因为小于或等于 50 的是系统进程),并按 CPU 占用降序排列。
查看 SQL 执行计划
另一个查找 CPU 占用的方式是使用 SQL Server Profiler 或 SQL Server Management Studio 的查询执行计划选项。执行计划可以显示各个 SQL 查询在执行过程中消耗 CPU 和 IO 的情况,从而帮助排查性能瓶颈。
例如,在 SQL Server Management Studio (SSMS) 中,可以打开查询窗口,输入需要分析的 SQL,然后在执行前选择“查询”菜单下的“执行选项”,在弹出窗口中勾选“显示实际执行计划”,执行 SQL 后即可查看到执行计划和相关性能数据。
查找产生锁的 SQL
查看锁等待信息
可以使用以下的 SQL 命令查看 Sql Server 上当前正在等待的锁的信息:
SELECT
L.request_session_id AS SPID,
DB_NAME(L.resource_database_id) AS DatabaseName,
NOTES.last_wait_type AS WaitType,
L.resource_type AS ResourceType,
L.resource_description AS ResourceDescription,
L.request_mode AS RequestMode,
L.request_status AS RequestStatus,
L.request_owner_type AS RequestOwnerType,
L.request_owner_id AS RequestOwnerID,
L.request_mode AS RequestMode,
L.request_time AS RequestTime,
Q.text AS QueryText
FROM sys.dm_tran_locks L
LEFT JOIN sys.dm_exec_sessions S ON L.request_session_id = S.session_id
OUTER APPLY sys.dm_exec_sql_text(S.sql_handle) AS Q
OUTER APPLY sys.dm_exec_input_buffer(S.session_id, NULL) AS NOTES
WHERE L.request_status = 'WAIT' AND S.session_id > 50
该命令使用了 sys.dm_tran_locks 等锁定相关系统表,将正在等待的锁的信息和相关的查询语句一起输出,以便于进一步分析锁等待的具体原因。
查看被锁的资源信息
除了上述的锁等待查询命令外,还可以使用以下的 SQL 命令查看 Sql Server 上被某个进程所锁定的资源对象:
SELECT SystemProcesses.spid,
SystemProcesses.program_name,
SystemProcesses.loginame,
SystemProcesses.waittype,
SystemProcesses.lastwaittype,
SystemLocks.ResourceType,
SystemLocks.ResourceDescription,
SystemLocks.Mode,
SystemLocks.Status
FROM MASTER.dbo.syslockinfo SystemLocks
LEFT JOIN MASTER.dbo.sysprocesses SystemProcesses ON SystemProcesses.spid = SystemLocks.req_spid
WHERE SystemProcesses.spid > 50
ORDER BY SystemProcesses.spid
该命令中,syslockinfo 是 Sql Server 的系统表,用于记录被锁住的资源信息。该命令通过连表输出了被锁住的资源和相关进程的信息。
通过上述两个 SQL 命令,造成 SQL Server 性能瓶颈的锁等待问题可以得到有效的排查。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Sql Server中通过sql命令获取cpu占用及产生锁的sql - Python技术站