确定使用查询锁定 SQL Server 的最佳方法是什么?

确定使用查询锁定 SQL Server 的最佳方法是什么?

最近我们的 SQL Server 因某种原因陷入了困境。我想知道通过查询数据库来检查问题原因的最佳方法是什么。这是我迄今为止发现的最佳方法:

SELECT
    SPID            = s.spid
,   BlockingSPID    = s.blocked
,   DatabaseName    = DB_NAME(s.dbid)
,   ProgramName     = s.program_name
,   [Status]        = s.[status]
,   LoginName       = s.loginame
,   ObjectName      = OBJECT_NAME(objectid, s.dbid)
,   [Definition]    = CAST([text] AS VARCHAR(MAX))
FROM      sys.sysprocesses s
CROSS APPLY sys.dm_exec_sql_text (sql_handle)
WHERE 
 s.spid > 50
ORDER BY
    DatabaseName
,   loginName

答案1

这是一个很好的起点。您还应该使用 sys.dm_os_waiting_tasks DMV 查看等待情况,它将告诉您哪个资源导致每个进程等待。

select wait_type, sum(wait_duration_ms) sum_wait_duration_ms, avg(wait_duration_ms) avg_wait_duration_ms, count(*) waits
from sys.dm_os_waiting_tasks
group by wait_type

相关内容