четверг, 14 марта 2013 г.

AUTO TASK

Oracle 11g включает три задачи автоматического обслуживания базы данных:

Автоматическая сборка статистики оптимизатора - собирает устаревшие или отсутствующие статистические данные для всех объектов схемы.
Имя задачи - это 'auto optimizer stats collection'

Автоматический советник по сегментам - определяет сегменты, которые могут быть реорганизованы для экономии места.
Имя задачи - 'auto space advisor'.

Автоматический советник по настройке SQL - определяет и пытается настроить SQL с высокой нагрузкой.
Имя задачи - 'sql tuning advisor'

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

auto optimizer stats collection
auto space advisor
sql tuning advisor



select operation_name, status from dba_autotask_operation;

OPERATION_NAME              STATUS  
------------------------------------------------
auto optimizer stats job        ENABLED   
auto space advisor job          ENABLED  
automatic sql tuning task      ENABLED   

 

select window_name,
       window_active,
       autotask_status,
       to_char(window_next_time,'dd/mm/yyyy hh24:mi:ss') next_time
  from DBA_AUTOTASK_WINDOW_CLIENTS
 order by window_next_time;


WINDOW_NAME        WINDOW_ACTIVE   AUTOTASK_STATUS   NEXT_TIME 
---------------------------------------------------------------------------------------------------------        
MONDAY_WINDOW          FALSE           DISABLED          01/10/2018 22:00:00  
TUESDAY_WINDOW         FALSE           DISABLED          02/10/2018 22:00:00  
WEDNESDAY_WINDOW   FALSE           DISABLED          03/10/2018 22:00:00  
THURSDAY_WINDOW      FALSE           DISABLED          04/10/2018 22:00:00  
FRIDAY_WINDOW             FALSE           DISABLED          05/10/2018 22:00:00  
SATURDAY_WINDOW       FALSE           DISABLED          06/10/2018 06:00:00  
SUNDAY_WINDOW            FALSE           DISABLED          07/10/2018 06:00:00  

 
                                 
Отключить или включить отдельные автоматические задачи из всех окон обслуживания:

BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

select operation_name, status from dba_autotask_operation;

BEGIN
  DBMS_AUTO_TASK_ADMIN.enable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

select operation_name, status from dba_autotask_operation;


Изменение приоритетов.

BEGIN
  DBMS_AUTO_TASK_ADMIN.override_priority(
    client_name => 'auto optimizer stats collection',
    priority => dbms_auto_task_admin.priority_high);
END;
/


select client_name, priority_override from dba_autotask_client;

begin
   dbms_auto_task_admin.override_priority(
      client_name => 'auto space advisor',
      priority => dbms_auto_task_admin.priority_urgent);
end;
/


begin
   dbms_auto_task_admin.override_priority(
      client_name => 'auto space advisor',
      priority => dbms_auto_task_admin.priority_medium);
end;
/

select client_name, priority_override from dba_autotask_client;



Настроим так:


BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

BEGIN
  DBMS_AUTO_TASK_ADMIN.enable(
    client_name => 'auto optimizer stats collection',
    operation   => 'auto optimizer stats job',
    window_name => NULL);
END;
/


Просмотр журнала сбора статистики:

select client_name,
       job_status,
       job_start_time,
       job_duration,
       job_info
  from dba_autotask_job_history
where client_name like '%stats%'
order by job_start_time;



Удалять или добавлять задачи в отдельные окна обслуживания:

BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto optimizer stats collection',
    operation   => NULL,
    window_name => 'MONDAY_WINDOW');

  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => 'MONDAY_WINDOW');

  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'sql tuning advisor',
    operation => NULL,
    window_name => 'MONDAY_WINDOW');
END;
/




Глобальные параметры сбора статистики могут быть изменены с помощью процедуры
SET_GLOBAL_PREFS в пакете DBMS_STATS:



EXEC DBMS_STATS.alter_stats_history_retention(90);
EXEC DBMS_STATS.set_global_prefs('estimate_percent', '5');


Включить инкрементальный сбор статистики:

BEGIN
 DBMS_STATS.SET_GLOBAL_PREFS('INCREMENTAL', 'TRUE');
END;
/

Включить сбор статистики только по системному словарю:

BEGIN
 DBMS_STATS.SET_GLOBAL_PREFS('AUTOSTATS_TARGET','ORACLE');
END;
/

Автоматический режим сбора статистики:

BEGIN
 DBMS_STATS.SET_GLOBAL_PREFS('AUTOSTATS_TARGET','AUTO');
END;
/


Проверить в каком режиме идет сбор статистики:

select DBMS_STATS.GET_PREFS ('AUTOSTATS_TARGET') as AUTOSTATS_TARGET from dual;


Глобальные настройки режима сбора статистики:



select 'CASCADE = '||dbms_stats.GET_PREFS('CASCADE') as global_stats from dual
union all
select 'DEGREE = '||dbms_stats.GET_PREFS('DEGREE') from dual
union all
select 'ESTIMATE_PERCENT = '||dbms_stats.GET_PREFS('ESTIMATE_PERCENT') from dual
union all
select 'METHOD_OPT = '||dbms_stats.GET_PREFS('METHOD_OPT') from dual
union all
select 'NO_INVALIDATE = '||dbms_stats.GET_PREFS('NO_INVALIDATE') from dual
union all
select 'GRANULARITY = '||dbms_stats.GET_PREFS('GRANULARITY') from dual
union all
select 'PUBLISH = '||dbms_stats.GET_PREFS('PUBLISH') from dual
union all
select 'INCREMENTAL = '||dbms_stats.GET_PREFS('INCREMENTAL') from dual
union all
select 'STALE_PERCENT = '||dbms_stats.GET_PREFS('STALE_PERCENT') from dual
union all
select 'AUTOSTATS_TARGET = '||DBMS_STATS.GET_PREFS ('AUTOSTATS_TARGET') as AUTOSTATS_TARGET from dual;

GLOBAL_STATS                                    
-----------------------------------------------
CASCADE = DBMS_STATS.AUTO_CASCADE               
DEGREE = NULL                                   
ESTIMATE_PERCENT = DBMS_STATS.AUTO_SAMPLE_SIZE  
METHOD_OPT = FOR ALL COLUMNS SIZE AUTO          
NO_INVALIDATE = DBMS_STATS.AUTO_INVALIDATE      
GRANULARITY = AUTO                              
PUBLISH = TRUE                                  
INCREMENTAL = FALSE                             
STALE_PERCENT = 10                              
AUTOSTATS_TARGET = AUTO                         




Параметры sql tuning advisor могут быть изменены с помощью процедуры SET_TUNING_TASK_PARAMETER в пакете DBMS_SQLTUNE.

BEGIN
  DBMS_SQLTUNE.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'LOCAL_TIME_LIMIT', 1200);
  DBMS_SQLTUNE.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'ACCEPT_SQL_PROFILES', 'FALSE');
  DBMS_SQLTUNE.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'MAX_SQL_PROFILES_PER_EXEC', 20);
  DBMS_SQLTUNE.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK', 'MAX_AUTO_SQL_PROFILES', 10000);
END;
/


Вся группа окон MAINTENANCE_WINDOW_GROUP может быть включена или отключена с помощью процедур ENABLE и DISABLE в пакете DBMS_SCHEDULER.

MAINTENANCE_WINDOW_GROUP

BEGIN
  DBMS_SCHEDULER.disable(
    name  => 'SYS.MAINTENANCE_WINDOW_GROUP',
    force => TRUE);

  DBMS_SCHEDULER.enable(
    name  => 'SYS.MAINTENANCE_WINDOW_GROUP');
END;
/


Изменить атрибуты окна можно с использованием процедуры SET_ATTRIBUTE пакета DBMS_SCHEDULER.

BEGIN
  DBMS_SCHEDULER.disable(name => 'SYS.MONDAY_WINDOW', force => TRUE);

  DBMS_SCHEDULER.set_attribute(
    name      => 'SYS.MONDAY_WINDOW',
    attribute => 'DURATION',
    value     => numtodsinterval(180, 'minute'));

  DBMS_SCHEDULER.enable(name=>'SYS.MONDAY_WINDOW');
END;
/


Если создали дополнительные окна обслуживания, назначьте их группе MAINTENANCE_WINDOW_GROUP,
и по умолчанию они будут назначены плану ресурсов DEFAULT_MAINTENANCE_PLAN.
При необходимости вы можете отредактировать этот план или создать новый план.



Если вы создаете новый план ресурсов, вы можете назначить его соответствующим окнам обслуживания с помощью пакета DBMS_SCHEDULER.

BEGIN
  DBMS_SCHEDULER.disable(name => 'SYS.MONDAY_WINDOW', force => TRUE);

  DBMS_SCHEDULER.set_attribute(
    name      => 'SYS.MONDAY_WINDOW',
    attribute => 'RESOURCE_PLAN',
    value     => 'MY_NEW_PLAN');

  DBMS_SCHEDULER.enable(name=>'SYS.MONDAY_WINDOW');
END;
/


Чтобы очистить план ресурса, выполните следующую команду. 

BEGIN
  DBMS_SCHEDULER.set_attribute(
    name      => 'SYS.MONDAY_WINDOW',
    attribute => 'RESOURCE_PLAN',
    value     => '');
END;
/


Следующие представления отображают информацию,
связанную с задачами автоматического обслуживания базы данных:



select * from dba_scheduler_wingroup_members;
select * from dba_scheduler_windows;
select * from dba_scheduler_window_groups;
select * from DBA_AUTOTASK_CLIENT;
select * from DBA_AUTOTASK_CLIENT_HISTORY;
select * from DBA_AUTOTASK_JOB_HISTORY;
select * from DBA_AUTOTASK_CLIENT_JOB;
select * from DBA_AUTOTASK_OPERATION;
select * from DBA_AUTOTASK_TASK;
select * from DBA_AUTOTASK_WINDOW_CLIENTS;
select * from DBA_AUTOTASK_WINDOW_HISTORY;
select * from DBA_AUTOTASK_SCHEDULE;


select * from dba_rsrc_plans;
select * from dba_rsrc_plan_directives;
select * from dba_rsrc_consumer_groups;
select * from dba_rsrc_consumer_group_privs;
select * from dba_rsrc_mapping_priority;
select * from dba_rsrc_group_mappings;
select * from dba_rsrc_manager_system_privs;
select initial_rsrc_consumer_group from dba_users;
select resource_consumer_group, current_queue_duration from v$session;
select * from v$rsrc_plan;
select * from v$rsrc_consumer_group;