Oracle的窗口和自動任務


Oracle數據庫自己會例行做一些定時任務,比如會自動進行統計信息收集等作業任務。如果統計信息收集的時間正好趕上業務的高峰期,那就有可能由此引發一系列性能故障。
那么,我們該如何查看這些數據庫自動去做的任務執行計划和執行情況呢?

1.計划窗口調整

首先,通過查詢dba_scheduler_windows,可以看到有關窗口的定義詳情。

SQL>
col window_name for a30
col REPEAT_INTERVAL for a60
set lines 180
select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;

如果數據庫是10g版本,結果如下:

SQL> select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;

WINDOW_NAME                    REPEAT_INTERVAL                                              DURATION                                                                    ENABL
------------------------------ ------------------------------------------------------------ --------------------------------------------------------------------------- -----
WEEKNIGHT_WINDOW               freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; b +000 08:00:00                                                               TRUE
                               ysecond=0

WEEKEND_WINDOW                 freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0          +002 00:00:00                                                               TRUE

如果數據庫是11g和12c版本,則是類似這樣的結果:

SQL> select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;

WINDOW_NAME                    REPEAT_INTERVAL                                              DURATION                                                                    ENABL
------------------------------ ------------------------------------------------------------ --------------------------------------------------------------------------- -----
WEEKEND_WINDOW                 freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0          +002 00:00:00                                                               FALSE
WEEKNIGHT_WINDOW               freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; b +000 08:00:00                                                               FALSE
                               ysecond=0

SUNDAY_WINDOW                  freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0         +000 20:00:00                                                               TRUE
SATURDAY_WINDOW                freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0         +000 20:00:00                                                               TRUE
FRIDAY_WINDOW                  freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0        +000 04:00:00                                                               TRUE
THURSDAY_WINDOW                freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0        +000 04:00:00                                                               TRUE
WEDNESDAY_WINDOW               freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0        +000 04:00:00                                                               TRUE
TUESDAY_WINDOW                 freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0        +000 04:00:00                                                               TRUE
MONDAY_WINDOW                  freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0        +000 04:00:00                                                               TRUE

可以看到,在11g之后,oracle將之前只區分工作日和休息日的分類,細化到一周中的每一天。而且默認值的收集時間也比10g有大幅度的減少。

修改窗口啟動時間和duration:

--修改窗口啟動時間
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('MONDAY_WINDOW','repeat_interval','freq=daily;byday=MON;byhour=22;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('TUESDAY_WINDOW','repeat_interval','freq=daily;byday=TUE;byhour=22;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('WEDNESDAY_WINDOW','repeat_interval','freq=daily;byday=WED;byhour=22;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('THURSDAY_WINDOW','repeat_interval','freq=daily;byday=THU;byhour=22;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('FRIDAY_WINDOW','repeat_interval','freq=daily;byday=FRI;byhour=22;byminute=0;bysecond=0');

EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SATURDAY_WINDOW','repeat_interval','freq=daily;byday=SAT;byhour=6;byminute=0;bysecond=0');
EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SUNDAY_WINDOW','repeat_interval','freq=daily;byday=SUN;byhour=6;byminute=0;bysecond=0');

--修改窗口duration
exec dbms_scheduler.set_attribute('MONDAY_WINDOW','duration',numtodsinterval(240,'minute'));
exec dbms_scheduler.set_attribute('TUESDAY_WINDOW','duration',numtodsinterval(240,'minute'));
exec dbms_scheduler.set_attribute('WEDNESDAY_WINDOW','duration',numtodsinterval(240,'minute'));
exec dbms_scheduler.set_attribute('THURSDAY_WINDOW','duration',numtodsinterval(240,'minute'));
exec dbms_scheduler.set_attribute('FRIDAY_WINDOW','duration',numtodsinterval(240,'minute'));

exec dbms_scheduler.set_attribute('SATURDAY_WINDOW','duration',numtodsinterval(1200,'minute'));
exec dbms_scheduler.set_attribute('SUNDAY_WINDOW','duration',numtodsinterval(1200,'minute'));

以上實際都是Oracle默認的值(周一到周五每晚10點開始收集統計信息,duration是4h;周六周日早上6點開始收集統計信息,duration是20h),可以根據實際業務需求進行調整。
很多周六日業務量也很大的企業,一定要注意調整這個默認值。

2.自動任務調整

10g版本沒有這些自動維護任務,以下都是以11g以上版本為例,主要介紹如何關閉/啟用自動任務(默認是關閉的。)。

查詢: select client_name,status from dba_autotask_client;

SQL> select client_name,status from dba_autotask_client;

CLIENT_NAME                                                      STATUS
---------------------------------------------------------------- --------
auto optimizer stats collection                                  ENABLED
auto space advisor                                               ENABLED
sql tuning advisor                                               ENABLED

關閉自動維護任務:

--關閉sql tuning advisor,避免消耗過多的資源
BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

--關閉auto space advisor,避免消耗過多的IO,還有避免出現這個任務引起的library cache lock
BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto space advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

--光閉自動統計信息收集,(慎用,除非有其他手工收集統計信息的完整方案,否則不建議關閉)
BEGIN
  DBMS_AUTO_TASK_ADMIN.disable(
    client_name => 'auto optimizer stats collection',
    operation => NULL,
    window_name => NULL);
END;
/

啟動自動維護任務:

--啟動sql tuning advisor
BEGIN
  DBMS_AUTO_TASK_ADMIN.enable(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

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

--啟動自動統計信息收集
BEGIN
  DBMS_AUTO_TASK_ADMIN.enable(
    client_name => 'auto optimizer stats collection',
    operation => NULL,
    window_name => NULL);
END;
/

3.任務執行情況

主要查詢這個視圖:dba_scheduler_job_run_details SQL> col job_name for a30 col ACTUAL_START_DATE for a40 col RUN_DURATION for a30 set lines 180 pages 100 --10g select owner, job_name, status, ACTUAL_START_DATE, RUN_DURATION from dba_scheduler_job_run_details where job_name = 'GATHER_STATS_JOB' order by 4;

10g版本查詢結果類似如下:

OWNER                          JOB_NAME                       STATUS                         ACTUAL_START_DATE                        RUN_DURATION
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- ------------------------------
SYS                            GATHER_STATS_JOB               SUCCEEDED                      31-OCT-17 10.00.02.512503 AM +08:00      +000 00:00:41
SYS                            GATHER_STATS_JOB               SUCCEEDED                      01-NOV-17 10.00.03.102893 AM +08:00      +000 00:00:53
SYS                            GATHER_STATS_JOB               SUCCEEDED                      02-NOV-17 10.00.02.822735 AM +08:00      +000 00:02:19
SYS                            GATHER_STATS_JOB               SUCCEEDED                      03-NOV-17 10.00.03.635398 AM +08:00      +000 00:00:54
SYS                            GATHER_STATS_JOB               SUCCEEDED                      04-NOV-17 10.00.04.819712 AM +08:00      +000 00:01:25
SYS                            GATHER_STATS_JOB               SUCCEEDED                      04-NOV-17 06.00.03.443851 PM +08:00      +000 00:00:16
SYS                            GATHER_STATS_JOB               STOPPED                        09-NOV-17 11.00.03.008706 AM +08:00      +005 01:30:12
SYS                            GATHER_STATS_JOB               SUCCEEDED                      15-NOV-17 11.00.01.423370 AM +08:00      +000 00:01:39
SYS                            GATHER_STATS_JOB               SUCCEEDED                      16-NOV-17 11.00.03.842124 AM +08:00      +000 00:00:43
SYS                            GATHER_STATS_JOB               SUCCEEDED                      17-NOV-17 11.00.01.535534 AM +08:00      +000 00:00:43
SYS                            GATHER_STATS_JOB               SUCCEEDED                      21-NOV-17 11.00.02.590796 AM +08:00      +000 00:01:04
SYS                            GATHER_STATS_JOB               SUCCEEDED                      24-NOV-17 11.00.02.291902 AM +08:00      +000 00:00:44
SYS                            GATHER_STATS_JOB               SUCCEEDED                      25-NOV-17 11.00.02.660842 AM +08:00      +000 00:01:04
SYS                            GATHER_STATS_JOB               SUCCEEDED                      25-NOV-17 07.00.02.587985 PM +08:00      +000 00:00:40
SYS                            GATHER_STATS_JOB               SUCCEEDED                      28-NOV-17 11.00.01.916662 AM +08:00      +000 00:01:08
SYS                            GATHER_STATS_JOB               SUCCEEDED                      29-NOV-17 11.00.03.060642 AM +08:00      +000 00:00:38
SYS                            GATHER_STATS_JOB               SUCCEEDED                      30-NOV-17 11.00.00.737144 AM +08:00      +000 00:01:45

--11g
select owner, job_name, status, ACTUAL_START_DATE, RUN_DURATION from dba_scheduler_job_run_details where job_name like 'ORA$AT_OS_OPT_S%' order by 4;

11g版本查詢結果類似如下:

OWNER                          JOB_NAME                       STATUS                         ACTUAL_START_DATE                        RUN_DURATION
------------------------------ ------------------------------ ------------------------------ ---------------------------------------- ------------------------------
SYS                            ORA$AT_OS_OPT_SY_3926          SUCCEEDED                      22-NOV-17 10.00.02.384206 PM EST5EDT     +000 00:01:41
SYS                            ORA$AT_OS_OPT_SY_3946          SUCCEEDED                      23-NOV-17 10.00.02.078143 PM EST5EDT     +000 00:01:54
SYS                            ORA$AT_OS_OPT_SY_3966          SUCCEEDED                      24-NOV-17 10.00.02.684644 PM EST5EDT     +000 00:02:03
SYS                            ORA$AT_OS_OPT_SY_3986          SUCCEEDED                      25-NOV-17 06.00.02.592675 AM EST5EDT     +000 00:01:54
SYS                            ORA$AT_OS_OPT_SY_4006          SUCCEEDED                      25-NOV-17 10.02.37.976591 AM EST5EDT     +000 00:00:39
SYS                            ORA$AT_OS_OPT_SY_4026          SUCCEEDED                      25-NOV-17 02.02.55.191309 PM EST5EDT     +000 00:00:36
SYS                            ORA$AT_OS_OPT_SY_4046          SUCCEEDED                      25-NOV-17 06.03.08.913991 PM EST5EDT     +000 00:00:36
SYS                            ORA$AT_OS_OPT_SY_4066          SUCCEEDED                      25-NOV-17 10.03.22.624319 PM EST5EDT     +000 00:01:12
SYS                            ORA$AT_OS_OPT_SY_4086          SUCCEEDED                      26-NOV-17 06.00.08.274082 AM EST5EDT     +000 00:01:14
SYS                            ORA$AT_OS_OPT_SY_4106          SUCCEEDED                      26-NOV-17 10.04.06.172856 AM EST5EDT     +000 00:00:46
SYS                            ORA$AT_OS_OPT_SY_4126          SUCCEEDED                      26-NOV-17 02.04.23.754379 PM EST5EDT     +000 00:01:04
SYS                            ORA$AT_OS_OPT_SY_4146          SUCCEEDED                      26-NOV-17 06.04.40.989803 PM EST5EDT     +000 00:00:54
SYS                            ORA$AT_OS_OPT_SY_4166          SUCCEEDED                      26-NOV-17 10.04.55.633700 PM EST5EDT     +000 00:00:56
SYS                            ORA$AT_OS_OPT_SY_4186          SUCCEEDED                      27-NOV-17 10.00.08.203510 PM EST5EDT     +000 00:02:25
SYS                            ORA$AT_OS_OPT_SY_4206          SUCCEEDED                      28-NOV-17 10.00.01.365122 PM EST5EDT     +000 00:02:16
SYS                            ORA$AT_OS_OPT_SY_4226          SUCCEEDED                      29-NOV-17 11.05.57.084541 PM EST5EDT     +000 00:01:58

可以看到,以統計信息收集的JOB_NAME為例,11g版本之后不再是固定的一個名字,而是以ORA$AT_OS_OPT_SY開頭的命名。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM