DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Управление окнами

Окно - это заданный интервал времени, в рамках которого выполняется определенное задание. При помощи окон можно контролировать выделение ресурсов (таких как процессор, серверы параллельных запросов, размер пула отката) и управлять ими. При выполнении задания активизируется метод выделения ресурсов, определенный активным (на текущий момент) окном, который и управляет выделением ресурсов для данного задания.
Окно состоит из трех основных компонентов:
Расписание, которое определяет время начала действия окна.
Продолжительность - время, в течение которого окно остается открытым.
План выделения ресурсов, который применяется к заданию, связанному с окном.
Расписание может быть задано при помощи календарной строки или именованного расписания (оба эти способа были ранее рассмотрены для заданий). План выделения ресурсов можно задать через план диспетчера ресурсов, как это было описано в предыдущем разделе для
программ. В последующих разделах мы поговорим о втором компоненте окна - его продолжительности.
Создание окна
Для создания окна можно использовать процедуру CREATE_WINDOW пакета DBMS_SCHEDULER. Предположим, что необходимо создать окно LOW_LOAD, имеющее такие характеристики:
Начинается каждый день в 3 часа утра ровно.
Его продолжительность - 14 часов.
Оно использует ресурсный план OLTP_PLAN. Создадим такое окно.

Рассмотрим этот фрагмент кода подробно.
Строка
Описание
2
Имя окна.
3
Имя уже созданного плана диспетчера ресурсов, OLTP_PLAN.
4
Имя уже созданного расписания. Оно запускается ежедневно в 0:00.
5-8
Продолжительность окна. Значение для параметра duration должно иметь тип INTERVAL DAY TO SECOND. Четырнадцатичасовой интервал дол­жен быть задан именно так, как в примере.
9
Комментарии для окна.

Создав окно, вы можете создавать задание, использующее это окно. Вызывая процедуру CREATE_JOB, можно указать имя окна в параметре schedule_name, как это сделано в последующем примере. Ранее говорилось о том, как задавать этот параметр для определения расписания. Теперь используем этот же параметр для задания окна LOW_LOAD.


Окна всегда принадлежат пользователю SYS, поэтому имя окна предваряется префиксом SYS. Задание связано с этим окном, поэтому метод выделения ресурсов для данного задания управляется схемой выделения ресурсов данного окна.
Когда окно активно, говорят, что оно открыто. Соответственно, когда окно становится неактивным, говорят, что оно закрыто. Окно открывается согласно сопоставленному ему календарю или расписанию.
Что происходит с заданиями, работающими в момент закрытия окна? Существует две возможности: вы можете позволить им выполняться дальше или остановить их. В некоторых случаях бывает важно остановить задание при закрытии окна. Пусть, например, у вас есть задание, собирающее статистику оптимизатора для таблиц. Это задание обычно выполняется ночью (возможно, до 6 часов утра). Предположим, что однажды оно не будет завершено в 6 часов утра и продолжит выполняться до 8 часов утра. В течение этого времени оно может оказывать влияние на обычную работу базы данных. В таком случае разумно остановить задание до завершения при закрытии соответствующего ему окна. Это свойство окна задается параметром stop_on_window_close процедуры CREATE_JOB. Если параметр установлен в значение TRUE, то при закрытии окна задание будет остановлено.
Любой пользователь, обладающий системной привилегией MAN- AGE_SCHEDULER, может создавать окна. Однако окна не будут принадлежать этому пользователю. С технической точки зрения объекты-окна принадлежат пользователю SYS.
Приоритеты окон
Окна определяются в соответствии со шкалой времени, поэтому в каждый момент времени активно только одно окно. Предположим, что вы определили два окна следующим образом:
Окно W1 начинается в 7 часов утра и заканчивается в 9 часов вечера.
Окно W2 начинается в 7 часов вечера и заканчивается в 7 часов утра.
Окна накладываются друг на друга в промежутке от 7 до 9 часов вечера. Какое из окон будет активно в течение этого промежутка времени?
Планировщик решает этот вопрос, анализируя присвоенные окнам приоритеты. Приоритеты определяются в параметре window_priority процедуры CREATE_WINDOW. Возможны всего два значения параметра: low (по умолчанию) и high, например:
window_priority => 'high'
При наложении окон будет активировано то, которое имеет приоритет high. При наложении окон с одинаковыми приоритетами более высо-
кий приоритет имеет окно, которое раньше закончится, второму придется подождать.
Указание даты окончания для окна
DBMS_SCHEDULER позволяет указать дату окончания для окна. Что это значит?
Предположим, что ваша бухгалтерская база данных получает информацию от внешнего источника. Вы обнаруживаете, что внешний источник дискредитирован и поступающие от него данные не являются достоверными. Вы решаете написать хранимую процедуру, которая будет исправлять информацию в базе данных и, в соответствии с расписанием, выполняться ежедневно. Известно, что подлежащие исправлению данные будут поступать только до 2 августа, а сегодня - 5 июля. После 2 августа вы хотите прекратить выполнение задания. Вы определяете окно так, чтобы задание не потребляло все имеющиеся ресурсы. Так как после 2 августа проблема будет снята, вы хотите ограничить продолжительность действия окна. При создании окна можно указать дату окончания его действия, завершить окно в указанный день и сэкономить ресурсы. Для этого используйте параметр end_date процедуры CRE- ATE_WINDOW.
 









jAntivirus