Как определить, выполняется ли конкретная процедура в SQL server
Мы столкнулись с некоторыми проблемами при запуске заданий ETL (вручную и/или в отладке) во время выполнения задания интеграции. Поэтому меня попросили выяснить, как наши задания ETL определяют, является ли он "безопасным" для запуска.
Среди выдвинутых идей есть идея о том, что конечно система SQL Server знает, выполняется ли процедура интеграции, и мы можем запросить различные таблицы и представления, которые предоставляются.
Быстрый поиск выдал многообещающий запрос, но он оказался ненадежным-он дает много ложных отрицательных результатов, т. е. он не обнаруживает, что процедура выполняется, даже если это так. Многие (но не все) ложные негативы связаны с тем, что процесс находится в подвешенном состоянии, а иногда он восстанавливает статистику и тому подобное.
Скорее всего, я просто проверю наши журналы, но если это можно сделать надежно, то это будет лучше всего.
Я призываю великих гуру SQL Server среди нас:
У кого здесь есть надежный запрос для определения того, что конкретная процедура выполняется в SQL Server (в частности, 2014).
Что я уже пробовал:
Запрос, который я нашел (на другом сайте), в основном таков:
SELECT * FROM [sys].[dm_exec_requests] A CROSS APPLY [sys].[dm_exec_sql_text] ( A.[sql_handle] ) B WHERE B.[objectid] = OBJECT_ID ( '[dbo].[uspJobControl]' )
Я тоже попробовал это сделать:
SELECT * FROM [sys].[dm_exec_cached_plans] A CROSS APPLY [sys].[dm_exec_sql_text] ( A.[plan_handle] ) B WHERE B.[objectid] = OBJECT_ID ( '[dbo].[uspJobControl]' )
Что, по крайней мере, дает ложные положительные результаты, а не ложные отрицательные.
И для полноты картины я также объединил эти два понятия:
SELECT * FROM [sys].[dm_exec_cached_plans] A CROSS APPLY [sys].[dm_exec_sql_text] ( A.[plan_handle] ) B LEFT OUTER JOIN [sys].[dm_exec_requests] C ON A.[plan_handle] = C.[plan_handle] WHERE B.[objectid] = OBJECT_ID ( '[dbo].[uspJobControl]' )
Что, конечно, дает ложные негативы.
[no name]
SQL profiler даст вам правильный статус для мониторинга состояния экземпляра SQL, но иногда он немного ухудшит производительность..
Maciej Los
Кажется, sp_help_job (Transact-SQL) | Microsoft Docs[^ это то, что вы ищете...
PIEBALDconsult
Нет, это касается только заданий агента SQL Server, а не процессов на сервере, которые могут выполняться через SSMS, SSIS, SQLCMD, ADO.net-неважно.
Maciej Los
ОК