У нас есть работа по очистке, которая вызывает хранимую процедуру, которая, в свою очередь, удаляет записи за журнал за один день. Это задание выполняется каждые пять минут и обычно заканчивается менее чем за 10 секунд. Иногда это занимает гораздо больше времени, до 15 минут. В таких случаях таблица журналов получает блокировку и последующий тайм-аут транзакций, пока работа не завершится.Статус вызова хранимой процедуры из задания агента, когда задание остановлено
Для решения этой проблемы, мы пришли к этому решению -
1) Удалить планирование существующей работы
2) Создать новую работу, чтобы вызвать исходное задание
3) Запланировать новое задание для запуска каждые 5 минут
4) ниже код новой работы
DECLARE @JobToRun NVARCHAR(128) = N'OM_EDU_Purge logs'
EXEC msdb.dbo.sp_start_job @JobToRun
WAITFOR DELAY '00:00:20'
IF EXISTS(SELECT 1
FROM msdb.dbo.sysjobs J
JOIN msdb.dbo.sysjobactivity A
ON A.job_id=J.job_id
WHERE [email protected]
AND A.run_requested_date IS NOT NULL
AND A.stop_execution_date IS NULL
)
BEGIN -- job is running or finishing (not idle)
EXEC msdb.dbo.sp_stop_job @[email protected]
-- could log info, raise error, send email etc here
END
Кажется, что он работает нормально и прекращает работу, если он все еще работает через 20 секунд. Однако, поскольку работа вызывает хранимую процедуру, вот мой вопрос:
Когда задание остановлено, оно также прекратит выполнение хранимой процедуры?
Независимо от того, как я пытаюсь, я не могу отформатировать код. Интересно, что не так? – Raj