oracle

自動統計情報取得の確認

夜間バッチの特徴に合わせて統計情報の取得時間を見直す事にしました。とりあえず現状の確認をしたので以下手順残します。

統計情報の取得が日々計画的に行われているか確認する

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 

スポンサーリンク
コピペで使う