В связи с периодическими вылетами службы MS SQL Server на одном из серверов компании решил написать SQL-скрипт, с помощью которого можно будет понять, какой именно запрос (прошу прощения за тавтологию) вызывает отказ службы, поскольку из журналов самого MS SQL нам известен только spid.
Поиск по интернетам натолкнул на sp_who и spwho2, отуда же вспомнил и про sys.dm. Уже после написания запроса увидел топик на хабре по аналогичной теме, где предлагается скачать и использовать sp_WhoIsActive вместо/в сочетании с ActivityMonitor. Однако зачастую предлагаемый скрипт целиком не нужен, поэтому хочу поделиться своим запросом.
Ну и напомнить, что и в MS SQLServer 2005 и в MS SQLServer 2008 монитор активности позволяет фильтровать выводимые ими результаты
Поиск по интернетам натолкнул на sp_who и spwho2, отуда же вспомнил и про sys.dm. Уже после написания запроса увидел топик на хабре по аналогичной теме, где предлагается скачать и использовать sp_WhoIsActive вместо/в сочетании с ActivityMonitor. Однако зачастую предлагаемый скрипт целиком не нужен, поэтому хочу поделиться своим запросом.
SELECT der.session_id -- фактически spid
, der.start_time -- дата и время начала выполнения запроса
, der.command -- тип запроса
, DB_NAME(der.database_id) AS[Database] -- имя БД
, [DES].[host_name] -- хост, с которого произошло подключение
, [DES].[program_name] -- программа, из которой был запрос
, [DES].client_interface_name -- название интерфейса, с помощью которого произошло подключение
, [DES].login_name -- логин, от имени которого выполнялся запрос
, [des].original_login_name -- реальное имя входа (поскольку вход может осуществляться с использованием Credentials)
, blocking_session_id -- spid блокирующей сессии
,(
SELECT [text]
FROM sys.dm_exec_sql_text(der.[sql_handle])
) AS [Query] -- собственно текст запроса
FROM sys.dm_exec_requests der
JOIN sys.dm_exec_sessions [DES]
ON
[DES].session_id = der.session_id
WHERE der.[status] = 'running'
AND [DES].is_user_process = 1
Ну и напомнить, что и в MS SQLServer 2005 и в MS SQLServer 2008 монитор активности позволяет фильтровать выводимые ими результаты