В последнее время наш 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
Это хорошее место для начала. Вы также должны смотреть на ожидания, используя DMV sys.dm_os_waiting_tasks, который сообщит вам, какой ресурс заставляет каждый процесс ждать.
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