Базы данных Oracle - статьи

         

Создание и использование ресурсного окошка СУБД для задания


Очередной запуск внутреннего задания может прийтись на время активного использования ресурсов СУБД другими процессами. Это может замедлить выполнение планового задания, обесценить его выполнение и даже поставить его выполнение под угрозу. Справиться с этой проблемой призвано ресурсное окошко. Суть его состоит в одновременном с очередным запуском задания автоматическом переключении СУБД на работу по требуемому ресурсному плану (план поведения для распределителя ресурсов СУБД, resource manager). Сами ресурсные окошки (windows) принадлежат схеме SYS, но создавать их разрешено и другим пользователям при наличии соответствующей привилегии:

CONNECT / AS SYSDBA GRANT MANAGE SCHEDULER TO scott;

Ресурсный план построить несложно, но, чтобы не отвлекаться, воспользуемся встроенным в любую БД планом SYSTEM_PLAN (см. таблицу DBA_RSRC_PLANS). Тогда создание окошка может выглядеть так:

CONNECT scott/tiger

BEGIN DBMS_SCHEDULER.CREATE_WINDOW ( window_name => 'my_job_window' , resource_plan => 'SYSTEM_PLAN' , start_date => SYSTIMESTAMP , repeat_interval => 'FREQ=MINUTELY; INTERVAL=3' , duration => INTERVAL 4' MINUTE END; /

EXECUTE DBMS_SCHEDULER.ENABLE ( 'sys.my_job_window' )

Теперь каждые три минуты на минуту будет включаться ресурсный план SYSTEM_PLAN. Это легко наблюдать, выдав несколько раз от имени SYS:

COL window_name FORMAT A20 COL log_date FORMAT A4 0 SELECT * FROM ( SELECT log_date, window_name, operation FROM dba_scheduler_window_log ORDER BY log_date DESC ) WHERE ROWNUM

Если подгадать момент, когда значение OPERATION для окошка MY_JOB_WINDOW станет OPEN, от имени SYS можно будет удостовериться, что план включен:

SYS> SHOW PARAMETER resource

NAME TYPE VALUE -------------------------------------------------------------------------- resource_limit boolean FALSE resource_manager_plan string SCHEDULER[0xD5A4]:SYSTEM_PLAN

Чтобы связать с этим периодически открывающимся ресурсным окошком задание, пользователю SCOTT достаточно указать его вместо расписания:


BEGIN DBMS_SCHEDULER.CREATE_JOB ( jobname => 'my_window_job' , program_name => 'simple_program' , schedule_name => 'sys.my_job_window' , enabled => FALSE ) ; END; /

EXECUTE DBMS_SCHEDULER.ENABLE ( 'my_window_job' )

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

Так как СУБД в каждый момент времени умеет работать только по одному ресурсному плану, окошки «не умеют» перекрываться, а могут только переопределять своим планом другой, ранее установленный и пришедшийся на то же время.

В качестве развития этой темы Oracle позволяет создавать именованный список существующих окошек и под маркой «группы» (window group) указывать его заданию значением параметра SCHEDULE_NAME, то есть там, где у нас было указано имя окошка.


Содержание раздела