Qual é a melhor maneira de determinar o que está bloqueando o SQL Server usando uma consulta?

2

Recentemente, nosso SQL Server está se atolando com algo. Eu queria saber qual é a melhor maneira de verificar o que poderia estar causando o problema, consultando o banco de dados. Este é o melhor que eu encontrei até agora:

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
    
por Aplato 24.02.2011 / 17:01

1 resposta

4

Esse é um bom lugar para começar. Você também deve estar observando as esperas usando o DMV sys.dm_os_waiting_tasks, que informará qual recurso está fazendo com que cada processo aguarde.

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
    
por 24.02.2011 / 18:48