夜間バッチの特徴に合わせて統計情報の取得時間を見直す事にしました。とりあえず現状の確認をしたので以下手順残します。
統計情報の取得が日々計画的に行われているか確認する
dba_autotask_clientディクショナリビューを参照する事で「自動取得しているか否か」の確認はできますが、いつスケジュールされているのかを確認するには dba_scheduler_wingroup_members -> dba_scheduler_windows と参照する必要があります。
自動取得しているのか確認するSQL
select client_name, status,WINDOW_GROUP ,to_char(MEAN_JOB_DURATION) MEAN_JOB_DURATION ,to_char(MEAN_JOB_CPU) MEAN_JOB_CPU from dba_autotask_client ;
確認例
以下例では、auto optimizer stats collectionがENABLEDになっているので統計情報の自動取得が有効となっている事がわかります。ちなみにMEAN_JOB_DURATIONがこのジョブの平均経過時間、MEAN_JOB_CPUがジョブの平均CPU使用時間となっています。
CLIENT_NAME STATUS WINDOW_GROUP MEAN_JOB_DURATION MEAN_JOB_CPU
---------------------------------- -------- ---------------- ------------------------------ ------------------------------
sql tuning advisor ENABLED ORA$AT_WGRP_SQ +000000000 00:00:57.063694268 +000000000 00:00:44.707261146
auto optimizer stats collection ENABLED ORA$AT_WGRP_OS +000000000 00:00:42.356890459 +000000000 00:00:29.352650177
auto space advisor ENABLED ORA$AT_WGRP_SA +000000000 00:00:18.500000000 +000000000 00:00:10.226161972
SQL>
スケジューラ・ウィンドウ・グループのメンバー一覧確認SQL
次にORA$AT_WGRP_OSをキーにdba_scheduler_wingroup_membersを検索します
select window_group_name,window_name from dba_scheduler_wingroup_members t where t.window_group_name = 'ORA$AT_WGRP_OS' ;
確認例
SQL> select window_group_name,window_name from dba_scheduler_wingroup_members t
2 where t.window_group_name = 'ORA$AT_WGRP_OS'
3 ;
WINDOW_GROUP_NAME WINDOW_NAME
-------------------- --------------------
ORA$AT_WGRP_OS SUNDAY_WINDOW
ORA$AT_WGRP_OS SATURDAY_WINDOW
ORA$AT_WGRP_OS FRIDAY_WINDOW
ORA$AT_WGRP_OS THURSDAY_WINDOW
ORA$AT_WGRP_OS WEDNESDAY_WINDOW
ORA$AT_WGRP_OS TUESDAY_WINDOW
ORA$AT_WGRP_OS MONDAY_WINDOW
7行が選択されました。
SQL>
スケジューラ・ウィンドウ・グループのメンバー一覧確認SQL
最後に WINDOW_NAME をキーにdba_scheduler_windowsを参照するといつスケジュールされているか確認する事ができます。
select window_name ,repeat_interval ,to_char(duration) duration, enabled from dba_scheduler_windows ;
確認例
SQL> col window_name for a20
SQL> col repeat_interval for a72
SQL> col duration for a16
SQL> col enabled for a8
SQL> select window_name ,repeat_interval ,to_char(duration) duration, enabled from dba_scheduler_windows
2 ;
WINDOW_NAME REPEAT_INTERVAL DURATION ENABLED
-------------------- ------------------------------------------------------------------------ ---------------- --------
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; bysecond=0 +000 08:00:00 FALSE
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
9行が選択されました。
SQL>
確認SQL
select WINDOW_NAME ,to_char(WINDOW_NEXT_TIME,'yyyy/mm/dd hh24:mm;ss') WINDOW_NEXT_TIME ,WINDOW_ACTIVE,AUTOTASK_STATUS ,OPTIMIZER_STATS,SEGMENT_ADVISOR,SQL_TUNE_ADVISOR,HEALTH_MONITOR from DBA_AUTOTASK_WINDOW_CLIENTS order by 1;
確認例
SQL> select
2 WINDOW_NAME,to_char(WINDOW_NEXT_TIME,'yyyy/mm/dd hh24:mm;ss') WINDOW_NEXT_TIME
3 ,WINDOW_ACTIVE,AUTOTASK_STATUS
4 ,OPTIMIZER_STATS,SEGMENT_ADVISOR,SQL_TUNE_ADVISOR,HEALTH_MONITOR
5 from DBA_AUTOTASK_WINDOW_CLIENTS order by 1;
WINDOW_NAME WINDOW_NEXT_TIME WINDOW_ACT AUTOTASK_STATUS OPTIMIZER_STATS SEGMENT_ADVISOR SQL_TUNE_ADVISOR HEALTH_MONITOR
-------------------- -------------------- ---------- ---------------- ---------------- ---------------- ---------------- ----------------
FRIDAY_WINDOW 2021/11/12 22:11;00 FALSE ENABLED DISABLED DISABLED DISABLED DISABLED
MONDAY_WINDOW 2021/11/08 22:11;00 FALSE ENABLED DISABLED DISABLED DISABLED DISABLED
SATURDAY_WINDOW 2021/11/13 06:11;00 FALSE ENABLED DISABLED DISABLED DISABLED DISABLED
SUNDAY_WINDOW 2021/11/14 06:11;00 FALSE ENABLED DISABLED DISABLED DISABLED DISABLED
THURSDAY_WINDOW 2021/11/11 22:11;00 FALSE ENABLED DISABLED DISABLED DISABLED DISABLED
TUESDAY_WINDOW 2021/11/09 22:11;00 FALSE ENABLED DISABLED DISABLED DISABLED DISABLED
WEDNESDAY_WINDOW 2021/11/10 22:11;00 FALSE ENABLED DISABLED DISABLED DISABLED DISABLED
7行が選択されました。
SQL>
計画の無効化、有効化をやってみます
無効化、有効化それぞれ別のプロシージャが用意されています。
SQL> set lin 100
SQL> col client_name format a40
SQL> select client_name, status from dba_autotask_client
2 ;
---全て無効にしてあります
CLIENT_NAME STATUS
---------------------------------------- ----------------
auto space advisor DISABLED
sql tuning advisor DISABLED
auto optimizer stats collection DISABLED
-- 自動統計情報収集を有効化します
SQL> BEGIN
2 dbms_auto_task_admin.enable(
3 client_name => 'auto optimizer stats collection',
4 operation => NULL,
5 window_name => NULL
6 );
7 END;
8 /
PL/SQLプロシージャが正常に完了しました。
SQL> select client_name, status from dba_autotask_client
2 ;
CLIENT_NAME STATUS
---------------------------------------- ----------------
auto space advisor DISABLED
sql tuning advisor DISABLED
auto optimizer stats collection ENABLED
-- 再度無効化します
SQL> BEGIN
2 dbms_auto_task_admin.disable(
3 client_name => 'auto optimizer stats collection'
4 ,operation => NULL
5 ,window_name => NULL
6 );
7 END;
8 /
PL/SQLプロシージャが正常に完了しました。
SQL> select client_name, status from dba_autotask_client
2 ;
CLIENT_NAME STATUS
---------------------------------------- ----------------
auto space advisor DISABLED
sql tuning advisor DISABLED
auto optimizer stats collection DISABLED
SQL>
このページで使っているSQLのフォーマット情報です。
set line 200 col client_name for a34 col status for a8 col window_group for a16 col mean_job_duration for a30 col mean_job_cpu for a30 col window_group_name for a20 col window_name for a20 col repeat_interval for a72 col duration for a16 col enabled for a8 col WINDOW_NAME for a20 col WINDOW_NEXT_TIME for a40 col REPEAT_INTERVAL for a80 col DURATION for a20