Предупреждение SQL, когда хранимая процедура выполняется слишком долго

Вот исправленная версия вашего скрипта. Было две проблемы

  • Как уже упоминалось Сквошманом, уберите пробелы в команде set
  • Дисбаланс в скобках

@echo off
set /p age="enter your age:"
if %age% leq 50 ( 
    if %age% geq 20 (
        echo "You are %age% years old in the 21st century."
    ) else (
        echo "You are not in range."
    ) 
) else (
    echo "You are not in range."
)
pause
5
задан Cade Roux 2 March 2009 в 18:02
поделиться

4 ответа

нет нет никаких уведомлений для этого. необходимо будет настроить трассировку и опросить ее время от времени.

3
ответ дан 14 December 2019 в 01:18
поделиться

Если Вы не ищете бесплатное решение, Вы могли бы смотреть на Часового SQL. Это делает то, что Вы просите и т.д.

0
ответ дан 14 December 2019 в 01:18
поделиться

Можно зарегистрироваться, медленные рабочие запросы используют SQL Profiler, но это не поможет Вам с предупреждением, конкретно. (Я предполагаю, что Вы могли зарегистрироваться в Файл или в таблицу базы данных и иметь что-то еще, "слушают" и выдают предупреждение).

В случае, если Вы не знакомы с SQL Profiler, вот шаги:

Необходимо выполнить SQL Profiler на чем-то другом, чем сам сервер.

Запустите с шаблона SQLProfilerTSQL_Duration

Установите фильтр: продолжительность: "Больше, чем" к 1 000 (milliseonds)

В фильтрах можно ограничить Базу данных, Вход в систему, или подобный при необходимости.

В Событиях можно ограничить просто SProcs (значение по умолчанию также включает SQL-операторы),

0
ответ дан 14 December 2019 в 01:18
поделиться

Если найдено это на sqlservercentral (это, вероятно, для более старой версии SQL Server, но все еще могло бы относиться к 2008),

Аварийная процедура продолжительного задания http://www.sqlservercentral.com/scripts/Lock+and+Connection+Management/30144/

Текст ниже, если Вы наклоняете доступ это.

Для заданий, которые периодически работают и должны занять только короткое время для выполнения, DBA может хотеть знать, когда задание работало в течение чрезмерного времени. В этом случае просто проверка, чтобы видеть, РАБОТАЕТ ЛИ задание, не сделает; способность удостовериться, что это не работало в течение длительного периода, необходима. Соответствие идентификатору задания к идентификатору процесса в sysprocesses требует, чтобы некоторая реконструкция идентификатора задания сделала соответствие. Этот сценарий создает хранимую процедуру, которая примет, что имя задания, максимальное время выполнения, позволенное, и адрес электронной почты, уведомляет. Это будет затем использовать имя задания, чтобы перетянуть число задания и проверить sysprocesses (на основе идентификатора процесса, являющегося частью названия программы) для определения количества времени, которое задание выполняло, затем предупреждает, если то время за "время, позволенное" параметр.

CREATE proc sp_check_job_running
    @job_name       char(50),
    @minutes_allowed    int,
    @person_to_notify   varchar(50)
AS  

DECLARE @var1           char(1),
    @process_id     char(8),
    @job_id_char        char(8),
    @minutes_running    int,
    @message_text       varchar(255)

select @job_id_char = substring(CAST(job_id AS char(50)),1,8) 
from  msdb..sysjobs
where name = @job_name

select @process_id =    substring(@job_id_char,7,2) + 
            substring(@job_id_char,5,2) +
            substring(@job_id_char,3,2) +
            substring(@job_id_char,1,2)


select @minutes_running = DATEDIFF(minute,last_batch, getdate())
from master..sysprocesses
where program_name LIKE ('%0x' + @process_id +'%')

if @minutes_running > @minutes_allowed
  BEGIN
    select @message_text = ('Job ' 
    + UPPER(SUBSTRING(@job_name,1,LEN(@job_name)))
    + ' has been running for '
    + SUBSTRING(CAST(@minutes_running AS char(5)),1,LEN(CAST(@minutes_running AS char(5))))
    + ' minutes, which is over the allowed run time of '
    + SUBSTRING(CAST(@minutes_allowed AS char(5)),1,LEN(CAST(@minutes_allowed AS char(5)))) 
    + ' minutes.')
    EXEC master..xp_sendmail 
    @recipients = @person_to_notify, 
    @message = @message_text,
        @subject = 'Long-Running Job to Check'
  END

--  Typical job step syntax for job to do the checking

execute sp_check_job_running
      'JobThatSHouldBeDoneIn5Minutes', 
       5, 
       'DBAdmin@mycompany.com'
2
ответ дан 14 December 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: