Dashboard > СУБД > Home > Oracle, выявление долгоиграющих задач > Information > Сравнение Страницы
  СУБД Вход | Зарегистрироваться   Вариант для печати.  
  Oracle, выявление долгоиграющих задач
Ключ
Эти линии были удалены. Это слово было удалено.
Эти линии были добавлены. Это слово было добавлено.

Просмотреть историю страницы


there.are.num.changes

 В принципе, можно считать внештатной ситуацией, если джоба по шедулеру отрабатывает дольше, чем заданный для ее выполнения интервал. Может быть это даже поможет отловить аварийную ситуацию еще на ранних этапах ;)
  
 Работа с шедулером идет с помощью методов, вызываемых из системного пакета dbms_scheduler (по сути это запуск хранимых процедур из пакета). Журнал выполнения задач можно поглядеть в dba_scheduler_job_log, а все параметры по задачам хранятся в dba_scheduler_jobs и именно этой таблицей оперирует пакет dbms_scheduler.
  
 Интервал выполнения хранится в поле repeat_interval, который неудобен для приведения к числу. Поэтому, мне кажется, есть все основания использовать для вычисления интервала разницу между next_run_date и last_start_date.
  
 Время выполнения задачи хранится в этой же таблице. Таким образом, вычислить актуальные на данный момент задачи, время выполнения которых превышает интервал запуска, можно так:
 {noformat}
 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 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)
  -- интервал запуска в секундах
 (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)
 {noformat}
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: 2.5 Build:#805 Apr 26, 2007) - Запрос Bug/feature - Связаться с администраторами