Dashboard > СУБД > Home > Oracle, выявление долгоиграющих задач > Просмотр
  СУБД Вход | Зарегистрироваться   Вариант для печати.  
  Oracle, выявление долгоиграющих задач
Добавил(а) shixaro, последний раз редактировал(а) shixaro Jul 02, 2012  (посмотреть изменения)
Метки: 

В принципе, можно считать внештатной ситуацией, если джоба по шедулеру отрабатывает дольше, чем заданный для ее выполнения интервал. Может быть это даже поможет отловить аварийную ситуацию еще на ранних этапах

Работа с шедулером идет с помощью методов, вызываемых из системного пакета dbms_scheduler (по сути это запуск хранимых процедур из пакета). Журнал выполнения задач можно поглядеть в dba_scheduler_job_log, а все параметры по задачам хранятся в dba_scheduler_jobs и именно этой таблицей оперирует пакет dbms_scheduler.

Интервал выполнения хранится в поле repeat_interval, который неудобен для приведения к числу. Поэтому, мне кажется, есть все основания использовать для вычисления интервала разницу между next_run_date и last_start_date.

Время выполнения задачи хранится в этой же таблице. Таким образом, вычислить актуальные на данный момент задачи, время выполнения которых превышает интервал запуска, можно так:

SELECT d.* 
FROM dba_scheduler_jobs d 
WHERE 
enabled='TRUE' AND
-- фактическое время выполнения в секундах
(to_number(extract(second from last_run_duration)) + to_number(extract(minute from last_run_duration)) * 60 + to_number(extract(hour from last_run_duration))   * 60 * 60 +  to_number(extract(day from last_run_duration))  * 60 * 60* 24)
>
-- интервал запуска в секундах
(to_number(extract(second from next_run_date-last_start_date)) + to_number(extract(minute from next_run_date-last_start_date)) * 60 + to_number(extract(hour from next_run_date-last_start_date))   * 60 * 60 +  to_number(extract(day from next_run_date-last_start_date))  * 60 * 60* 24)

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5 Build:#805 Apr 26, 2007) - Запрос Bug/feature - Связаться с администраторами