10gではGATHER_STATS_JOBという自動アナライズ機能がデフォルトでONになっています。
とはいえ、たびたびアナライズをするとパフォーマンスダウンにつながるため、 GATHER_STATS_JOBは次のオブジェクトに対して実施します。
私の担当Webサイトでは、ジョブスケジューリングの設定変更をしています。統計情報を取得していないオブジェクト 統計情報が失効(レコードが10%が変更された)オブジェクト
というのは、デフォルト設定のままだと平日22時および土曜日0時にしか実行されないためです。
担当サイトの高負荷時間帯は毎日22~25時なので、負荷の低い毎日14時に実行しています。
まず、GATHER_STATS_JOBがMAINTENANCE_WINDOW_GROUPというジョブグループで動いていることを確認します。
次に、MAINTENANCE_WINDOW_GROUPのスケジュール内容を確認します。col JOB_NAME for a30 col SCHEDULE_NAME for a40 select JOB_NAME ,SCHEDULE_NAME from DBA_SCHEDULER_JOBS; JOB_NAME SCHEDULE_NAME ------------------------------ ---------------------------------------- AUTO_SPACE_ADVISOR_JOB MAINTENANCE_WINDOW_GROUP GATHER_STATS_JOB MAINTENANCE_WINDOW_GROUP FGR$AUTOPURGE_JOB PURGE_LOG DAILY_PURGE_SCHEDULE MGMT_STATS_CONFIG_JOB MGMT_CONFIG_JOB MAINTENANCE_WINDOW_GROUP
設定は次のようにします。set pages 10000 set lines 120 col WINDOW_NAME for a20 col REPEAT_INTERVAL for a80 col DURATION for a30 select WINDOW_NAME ,REPEAT_INTERVAL ,DURATION from DBA_SCHEDULER_WINDOWS; WINDOW_NAME REPEAT_INTERVAL -------------------- -------------------------------------------------------------------------------- DURATION ------------------------------ WEEKNIGHT_WINDOW freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0 +000 08:00:00 WEEKEND_WINDOW freq=daily;byday=SAT,SUN;byhour=0;byminute=0;bysecond=0 +000 48:00:00
実行されたかどうかは、スケジューラの履歴で確認できます。exec DBMS_SCHEDULER.SET_ATTRIBUTE('WEEKNIGHT_WINDOW','repeat_interval','freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=15;byminute=0; bysecond=0'); exec DBMS_SCHEDULER.SET_ATTRIBUTE('WEEKNIGHT_WINDOW','duration','+000 05:00:00'); exec DBMS_SCHEDULER.SET_ATTRIBUTE('WEEKEND_WINDOW','repeat_interval','freq=daily;byday=SAT,SUN;byhour=15;byminute=0;bysecond=0'); exec DBMS_SCHEDULER.SET_ATTRIBUTE('WEEKEND_WINDOW','duration','+000 05:00:00');
なお、この例はRAC環境なのでインスタンス単位で表示されます。
set pages 10000 set lines 120 col job_name for a25 col status for a10 col START_DATE for a20 col END_DATE for a20 SELECT TO_CHAR(ACTUAL_START_DATE, 'YYYY/MM/DD HH24:MI:SS') AS "START_DATE", TO_CHAR(LOG_DATE, 'YYYY/MM/DD HH24:MI:SS') AS "END_DATE", JOB_NAME,STATUS,INSTANCE_ID FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE JOB_NAME in ('AUTO_SPACE_ADVISOR_JOB','GATHER_STATS_JOB') ORDER BY ACTUAL_START_DATE,JOB_NAME; START_DATE END_DATE JOB_NAME STATUS INSTANCE_ID -------------------- -------------------- ------------------------- ---------- ----------- 2011/02/23 14:00:02 2011/02/23 14:05:19 AUTO_SPACE_ADVISOR_JOB SUCCEEDED 2 2011/02/23 14:00:02 2011/02/23 14:09:55 GATHER_STATS_JOB SUCCEEDED 2 2011/02/24 14:00:02 2011/02/24 14:05:39 AUTO_SPACE_ADVISOR_JOB SUCCEEDED 2 2011/02/24 14:00:02 2011/02/24 14:10:30 GATHER_STATS_JOB SUCCEEDED 2 2011/02/25 14:00:01 2011/02/25 14:11:04 GATHER_STATS_JOB SUCCEEDED 1 2011/02/25 14:00:02 2011/02/25 14:05:38 AUTO_SPACE_ADVISOR_JOB SUCCEEDED 2 2011/02/26 14:00:00 2011/02/26 14:09:39 GATHER_STATS_JOB SUCCEEDED 1 2011/02/26 14:00:00 2011/02/26 14:05:40 AUTO_SPACE_ADVISOR_JOB SUCCEEDED 1
0 件のコメント:
コメントを投稿