У нас есть задание очистки, которое вызывает хранимую процедуру, которая, в свою очередь, удаляет записи за один день для таблицы журнала. Это задание выполняется каждые пять минут и обычно завершается менее чем за 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 J.name=@JobToRun
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 @job_name=@JobToRun
-- could log info, raise error, send email etc here
END
Кажется, это работает нормально и останавливает работу, если она все еще выполняется через 20 секунд. Однако, поскольку задание вызывает хранимую процедуру, вот мой вопрос:
Когда задание остановлено, будет ли оно также завершать выполняемую хранимую процедуру?