oracle数据库优化-11G自动维护任务autotask

通过自动创建job来自动维护任务。

SQL> select client_name,window_group ,a.status from dba_autotask_client a;
CLIENT_NAME                        WINDOW_GROUP              STATUS
--------------------------------- ------------------------- --------
auto optimizer stats collection     ORA$AT_WGRP_OS           ENABLED
auto space advisor                  ORA$AT_WGRP_SA           DISABLED
sql tuning advisor                  ORA$AT_WGRP_SQ           DISABLED

新的管理包
SQL> desc sys.dbms_auto_task_admin
Element               Type      
--------------------- --------- 
OPTFLG_DEFERRED       CONSTANT  
OPTFLG_IMMEDIATE      CONSTANT  
PRIORITY_MEDIUM       CONSTANT  
PRIORITY_HIGH         CONSTANT  
PRIORITY_URGENT       CONSTANT  
PRIORITY_CLEAR        CONSTANT  
LIGHTWEIGHT           CONSTANT  
HEAVYWEIGHT           CONSTANT  
VOLATILE              CONSTANT  
STABLE                CONSTANT  
SAFE_TO_KILL          CONSTANT  
DO_NOT_KILL           CONSTANT  
ATTRVAL_TRUE          CONSTANT  
ATTRVAL_FALSE         CONSTANT  
GET_P1_RESOURCES      PROCEDURE 
SET_P1_RESOURCES      PROCEDURE 
SET_CLIENT_SERVICE    PROCEDURE 
GET_CLIENT_ATTRIBUTES PROCEDURE 
DISABLE               PROCEDURE 
ENABLE                PROCEDURE 
OVERRIDE_PRIORITY     PROCEDURE 
SET_ATTRIBUTE         PROCEDURE 

SQL> 

窗口组包含的窗口如下:

SQL> select * From dba_scheduler_wingroup_members c where c.WINDOW_GROUP_NAME='ORA$AT_WGRP_SA';
WINDOW_GROUP_NAME              WINDOW_NAME
------------------------------ ------------------------------
ORA$AT_WGRP_SA                 WEEKNIGHT_WINDOW
ORA$AT_WGRP_SA                 WEEKEND_WINDOW
ORA$AT_WGRP_SA                 MONDAY_WINDOW
ORA$AT_WGRP_SA                 TUESDAY_WINDOW
ORA$AT_WGRP_SA                 WEDNESDAY_WINDOW
ORA$AT_WGRP_SA                 THURSDAY_WINDOW
ORA$AT_WGRP_SA                 FRIDAY_WINDOW
ORA$AT_WGRP_SA                 SATURDAY_WINDOW
ORA$AT_WGRP_SA                 SUNDAY_WINDOW
9 rows selected


select  client_name,window_name,to_char(e.WINDOW_START_TIME,'yyyy-mm-dd hh24:mi:ss') stime,job_name,job_status from dba_autotask_job_history e
order by stime desc 

1. ORACLE 11G自动维护任务

相关查询:

 

select window_name,

       a1.RESOURCE_PLAN,

       a1.start_date,

       a1.end_date,

       a1.duration,

       a1.ENABLED

  From dba_scheduler_windows a1;

select a2.CLIENT_NAME, a2.STATUS, a2.CONSUMER_GROUP

  From dba_autotask_client a2;

select a3.WINDOW_name,

       a3.WINDOW_NEXT_TIME,

       a3.AUTOTASK_STATUS,

       a3.OPTIMIZER_STATS,

       a3.SEGMENT_ADVISOR,

       a3.SQL_TUNE_ADVISOR

  From dba_autotask_window_clients a3;

select *

  From dba_rsrc_plan_directives

 where plan = 'DEFAULT_MAINTENANCE_PLAN'

    or plan like '%AUTOTASK%'

 

REASON="Stop job called because associated window was closed"

 

SQL> SELECT CLIENT_NAME,JOB_STATUS,JOB_DURATION FROM DBA_AUTOTASK_JOB_HISTORY WHERE CLIENT_NAME='auto optimizer stats collection';

 

CLIENT_NAME

----------------------------------------------------------------

JOB_STATUS

------------------------------

JOB_DURATION

---------------------------------------------------------------------------

auto optimizer stats collection

SUCCEEDED

+000 02:02:28

1  ORACLE 11G 自动维护任务:

自动维护任务是一种按规则自动启动的数据库维护操作任务。比如自动收集为查询优化器使用的统计信息。自动维护任务按维护窗口自动运

行。所谓自动维护窗口是按照预定义的间隔时间窗口。

oracle11g数据库有三种预定义的自动维护任务:

■ Automatic Optimizer Statistics Collection:

■ Automatic Segment Advisor

■ Automatic SQL Tuning Advisor(这个是oracle 11g新添加的自动维护任务)

缺省情况下,这三个任务配置为在所有维护窗口运行。

维护窗口:维护窗口是一个连续的时间间隔,用于管理自动维护任务所用。维护窗口是oracle 调度窗口,属于窗口组MAINTENANCE_WINDOW_GROUP。

1.2 配置自动维护任务:

1:启用和禁止维护任务:

使用DBMS_AUTO_ADMIN pl/sql包来启用或禁用任务:

禁用任务:

BEGIN

dbms_auto_task_admin.disable(

    client_name => 'sql tuning advisor',

    operation   => NULL,

    window_name => NULL);

END;

启用任务:

BEGIN

dbms_auto_task_admin.enable(

    client_name => 'sql tuning advisor',

    operation   => NULL,

    window_name => NULL);

END;

这里client_name参数可以通过数据字典视图DBA_AUTOTASK_CLIENT来查询。

sys@ORCL11> select client_name from dba_autotask_client;

CLIENT_NAME

------------------------------------------------------------

auto optimizer stats collection

auto space advisor

sql tuning advisor

如果想启用或禁用所有窗口自动维护任务,调用ENABLE或DISABLE过程:

EXECUTE DBMS_AUTO_TASK_ADMIN.DISABLE;

1.3 为某一个维护窗口启用或禁用维护TASK

缺省情况下,所有维护任务在所有预定义的维护窗口都运行。可以对某一个维护窗口启用或禁用自动化任务。

BEGIN

dbms_auto_task_admin.disable(

client_name => 'sql tuning advisor', 

operation   => NULL, 

window_name => 'MONDAY_WINDOW');

END;

上面的例子是对维护窗口monday_window进行禁用sql tuning advisor。

1.4 配置维护窗口:

对于当前打开的窗口,你需要首先禁用,然后修改再启用,配置立即生效,如果你不通过这三个过程来修改属性,属性是不会生效的,直到下一次窗口打开。

1.4.1 修改维护窗口

可是使用DBMS_SCHEDULER 包来修改窗口属性。

--先禁用维护窗口

BEGIN

dbms_scheduler.disable(

    name  => 'SATURDAY_WINDOW');

--修改维护窗口属性:

dbms_scheduler.set_attribute(

    name      => 'SATURDAY_WINDOW',

    attribute => 'DURATION',

    value     => numtodsinterval(4, 'hour'));

--启用维护窗口

dbms_scheduler.enable(

    name => 'SATURDAY_WINDOW');

END;

/

1.4.2 创建新窗口:

BEGIN

dbms_scheduler.create_window(

    window_name     => 'EARLY_MORNING_WINDOW',

    duration        =>  numtodsinterval(1, 'hour'),

    resource_plan   => 'DEFAULT_MAINTENANCE_PLAN',

    repeat_interval => 'FREQ=DAILY;BYHOUR=5;BYMINUTE=0;BYSECOND=0');

dbms_scheduler.add_window_group_member(

    group_name  => 'MAINTENANCE_WINDOW_GROUP',

    window_list => 'EARLY_MORNING_WINDOW');

END;

/

1.4.3 删除窗口

BEGIN

DBMS_SCHEDULER.REMOVE_WINDOW_GROUP_MEMBER(

    group_name  => 'MAINTENANCE_WINDOW_GROUP',

    window_list => 'EARLY_MORNING_WINDOW');

END;

/

1.4.4 跟踪job运行情况

可以通过查询视图DBA_AUTOTASK_HISTORY追踪job运行情况:

SQL> select client_name,job_name,job_start_time

     from dba_autotask_job_history;

CLIENT_NAME          JOB_NAME             JOB_START_TIME

-------------------- -------------------- ------------------------------------

auto optimizer stats ORA$AT_OS_OPT_SY_1   09-APR-12 10.00.02.039000 PM +08:00

auto space advisor   ORA$AT_SA_SPC_SY_2   09-APR-12 10.00.02.050000 PM +08:00

sql tuning advisor   ORA$AT_SQ_SQL_SW_3   09-APR-12 10.00.02.015000 PM +08:00

自动sql优化

Oracle 11g引入了自动SQL优化。这本书的许多章节都详细涵盖了这个主题,因此本节只作概述。Oracle 11g根据AWR(Automatic Workload Repository,自动负载信息库)的统计信息针对产生较大性能影响的SQL语句运行SQL 优化顾问(SQL Tuning Advisor)。AWR的统计信息用来生成一个SQL语句列表并根据它们过去一周对系统性能的影响进行排序,这个SQL列表会自动排除所有被断定为不太容易优化的SQL语句,比如并行查询、DML、DDL和任何由并发问题引起的性能问题。SQL优化顾问生成优化SQL的建议,这类建议中可能有SQL配置文件(Profile)(利用统计信息)。当建议使用SQL配置文件的时候,这些配置文件会进行性能测试,如果测试结果显示至少有三倍的改进,并且SQL优化任务参数ACCEPT_SQL_PROFILES设置为true,这个建议就会被接受;如果ACCEPT_SQL_PROFILES被设置为false,这个建议会被报告。您也可以针对任何查询单独执行这些步骤。
通过调用dbms_auto_task_admin程序包的enable和disable过程就可以控制自动SQL优化任务的执行。当启用时,SQL 优化顾问就在定义好的维护时间窗口里运行,默认的维护时间窗口参考下面的表1-2。
表1-2  Oracle 11g默认维护窗口

窗 口 名 称

描    述

MONDAY_WINDOW

星期一晚上10点开始到第二天临晨2点

TUESDAY_WINDOW

星期二晚上10点开始到第二天临晨2点

WEDNESDAY_WINDOW

星期三晚上10点开始到第二天临晨2点

THURSDAY_WINDOW

星期四晚上10点开始到第二天临晨2点

FRIDAY_WINDOW

星期五晚上10点开始到第二天临晨2点

SATURDAY_WINDOW

星期六晚上10点开始并持续20小时

SUNDAY_WINDOW

星期日晚上10点开始并持续20小时

 

 
启用和禁用自动SQL优化:
exec dbms_auto_task_admin.enable(client_name => 'sql tuning advisor',operation =>
NULL, window_name => NULL);
 
exec dbms_auto_task_admin.disable(client_name => 'sql tuning advisor', operation
=> NULL,window_name => NULL);
配置自动SQL优化:
exec dbms_sqltune.set_tuning_task_parameter (task_name =>
'SYS_AUTO_SQL_TUNING_TASK', parameter => 'ACCEPT_SQL_PROFILES', value => 'TRUE');

以下是控制自动SQL优化任务的dbms_sqltune选项:
●         INTERRUPT_TUNING_TASK:中断正在执行的任务,得到中间结果并正常退出。
●         RESUME_TUNING_TASK:恢复先前被中断的任务。
●         CANCEL_TUNING_TASK:取消正在执行的任务,清除任务的所有结果。
●         RESET_TUNING_TASK:重置正在执行的任务,清除任务的所有结果并返回到其初始状态。
●         DROP_TUNING_TASK:删除一个任务,清除所有与该任务相关的结果。
第5章将展示如何在企业管理器中通过简单的“点击运行”来使用自动SQL优化功能

可手工激活或禁止

BEGIN

  DBMS_AUTO_TASK_ADMIN.ENABLE(

    client_name => 'sql tuning advisor', 

    peration => NULL, 

    window_name => NULL);

END;

/

BEGIN

  DBMS_AUTO_TASK_ADMIN.DISABLE(

    client_name => 'sql tuning advisor', 

    peration => NULL, 

    window_name => NULL);

END;

/

有一系列参数可供定制,比如是否自动接受profile

Parameter

Description

ACCEPT_SQL_PROFILE

Specifies whether to accept SQL profiles automatically.

EXECUTION_DAYS_TO_EXPIRE

Specifies the number of days for which to save the task history in the advisor framework schema. By default, the task history is saved for 30 days before it expires.

MAX_SQL_PROFILES_PER_EXEC

Specifies the limit of SQL profiles that are accepted for each automatic SQL tuning task. Consider setting the limit of SQL profiles that are accepted for each automatic SQL tuning task based on the acceptable level of changes that can be made to the system on a daily basis.

MAX_AUTO_SQL_PROFILES

Specifies the limit of SQL profiles that are accepted in total.

BEGIN

  DBMS_AUTO_SQLTUNE.SET_AUTO_TUNING_TASK_PARAMETER(

    parameter => 'ACCEPT_SQL_PROFILES', value => 'TRUE');

END;

/

可通过DBMS_AUTO_SQLTUNE.REPORT_AUTO_TUNING_TASK查看报告

VARIABLE my_rept CLOB;

BEGIN

  :my_rept :=DBMS_AUTO_SQLTUNE.REPORT_AUTO_TUNING_TASK(

    begin_exec   => NULL,

    end_exec     => NULL,

    type         => 'TEXT',

    level        => 'TYPICAL',

    section      => 'ALL',

    object_id    => NULL,

    result_limit => NULL);

END;

/

 

 

 

案例1 SGEADV 锁表

今日应用反馈存在锁表的情况,锁表的信息为:WRi$SEGADV_OBJLIST.

select t2.username,
       t2.sid,
       t2.serial#,
       t3.object_name,
       t1.LOCKED_MODE
  from v$locked_object t1, v$session t2, dba_objects t3
 where t1.session_id = t2.sid
   and t1.object_id = t3.object_id
 order by t2.logon_time;

查询锁表对应的会话,查询会话正在等待的事件resmgr:cpu quantum;

等待事件 ‘resmgr:cpu quantum’ 是资源管理器用来控制 CPU 分配给进程的标准事件。当会话等待 ‘resmgr:cpu quantum’ 时,会话正在等待分配一个CPU时间额度 。

当启用资源管理器并限制CPU消耗时会发生此等待。为了减少此等待事件的发生,可以增加会话当前消费组的CPU分配,因此下边方法中的第三种不要一味去禁用该任务,要了解瓶颈是否是cpu足够只是被限制了才出现“resmgr:cpu quantum”事件的

 

Symptoms

High waits on event 'resmgr:cpu quantum' might be noticed even when resource manager is disabled.     You already have confirmed parameter RESOURCE_MANAGER_PLAN is set to null but still noticing the above wait events.

Top 5 Timed Foreground Events:

Event                    Waits   Time(s)  Avg wait(ms) % DB time Wait Class
resmgr:cpu quantum         1,596  346,281       216968          89.19 Scheduler
db file scattered read   171,071   14,778           86           3.81 User I/O
log file sync             28,575   10,810          378           2.78 Commit
db file sequential read  943,457   6,569             7           1.69 User I/O
DB CPU                     2,133   0.55

Cause

This could be due to DEFAULT_MAINTENANCE_PLAN. From 11g onwards every weekday window has a pre-defined Resource Plan called DEFAULT_MAINTENANCE_PLAN, which will become active once the related window opens.
Following entries can also be noted in alert log at the time of issue.
 

Wed Sep 16 02:00:00 2009
Clearing Resource Manager plan via parameter
Wed Sep 16 22:00:00 2009
Setting Resource Manager plan SCHEDULER[0x2C55]:DEFAULT_MAINTENANCE_PLAN via scheduler window
Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter
Wed Sep 16 22:00:05 2009
Begin automatic SQL Tuning Advisor run for special tuning task "SYS_AUTO_SQL_TUNING_TASK"

Solution

To disable the DEFAULT_MAINTENANCE_PLAN you can use the below steps as suggested inNote 786346.1
1. Set the current resource manager plan to null (or another plan that is not restrictive):
 

alter system set resource_manager_plan='';

2. Change the active windows to use the null resource manager plan (or other nonrestrictive plan)
using:3. Then, for each window_name (WINDOW_NAME from DBA_SCHEDULER_WINDOWS), run:

Execute dbms_scheduler.set_attribute('WEEKNIGHT_WINDOW','RESOURCE_PLAN','');

execute dbms_scheduler.set_attribute('WEEKEND_WINDOW','RESOURCE_PLAN','');

3. Then, for each window_name (WINDOW_NAME from DBA_SCHEDULER_WINDOWS), run:

execute dbms_scheduler.set_attribute('<window name>','RESOURCE_PLAN','');

execute dbms_scheduler.set_attribute('<window name>','RESOURCE_PLAN','');

References

NOTE:392037.1 - Database Hangs. Sessions wait for 'resmgr:cpu quantum'
NOTE:756734.1 - 11g: Scheduler Maintenance Tasks or Autotasks
NOTE:786346.1 - Resource Manager and Sql Tunning Advisory DEFAULT_MAINTENANCE_PLAN
NOTE:806893.1 - Large Waits With The Wait Event "Resmgr:Cpu Quantum"
注意:

但是很多用户会发现禁用资源计划很多时候没有作用.可以禁用Oracle缺省启用的资源调度,最后通过以下参数设置解决问题:
_resource_manager_always_on = false
关闭

ALTER system SET resource_manager_plan='';

EXECUTE dbms_scheduler.set_attribute('WEEKNIGHT_WINDOW','RESOURCE_PLAN','');

EXECUTE dbms_scheduler.set_attribute('WEEKEND_WINDOW','RESOURCE_PLAN','');

EXECUTE dbms_scheduler.set_attribute('MONDAY_WINDOW','RESOURCE_PLAN','');

EXECUTE dbms_scheduler.set_attribute('TUESDAY_WINDOW','RESOURCE_PLAN','');

EXECUTE dbms_scheduler.set_attribute('WEDNESDAY_WINDOW','RESOURCE_PLAN','');

EXECUTE dbms_scheduler.set_attribute('THURSDAY_WINDOW','RESOURCE_PLAN','');

EXECUTE dbms_scheduler.set_attribute('FRIDAY_WINDOW','RESOURCE_PLAN','');

EXECUTE dbms_scheduler.set_attribute('SATURDAY_WINDOW','RESOURCE_PLAN','');

EXECUTE dbms_scheduler.set_attribute('SUNDAY_WINDOW','RESOURCE_PLAN','');

 

修正跑脚本的时间

关闭指定的client 

BEGIN

  dbms_auto_task_admin.disable(

  client_name => 'sql tuning advisor',

  peration => NULL,

  window_name => NULL);

END;  

/

开启指定的client:

BEGIN

  dbms_auto_task_admin.enable(

  client_name => 'sql tuning advisor',

  peration => NULL,

  window_name => NULL);

END;  

/

更改运行时间:

BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE(

  'MONDAY_WINDOW',

  'repeat_interval',

  'freq=daily;byday=MON;byhour=1;byminute=0;bysecond=0');

end;

/

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值