OracleDatabaseの「自動メンテナンスタスク」の確認方法について紹介します。
自動メンテナンスタスクはデータベースのメンテナンス操作を一定間隔毎に自動的に行う機能です。
デフォルトでは有効化されており、システムの負荷が軽いと予測される時間帯に実行されますが、
個々のメンテナンスタスクをいつ動いているか確認してみましょう。
OracleDBの自動メンテナンスタスクの有効・無効・スケジュール・実行履歴の確認方法
OracleDatabaseの「自動メンテナンスタスク」の確認方法について紹介します。 自動メンテナンスタスクはデータベースのメンテナンス操作を一定間隔毎に自動的に行う機能...
目次
自動メンテナンスタスクとは?
自動メンテナンスタスクには3つの機能があり、それぞれの役割は以下になります。
タスク名 | 説明 |
---|---|
自動オプティマイザ統計収集 | データベースオブジェクトに対する統計情報を自動的に収集する機能。 |
自動セグメント・アドバイザ | 再生可能な領域が存在しているセグメントを識別し、それらのセグメントの断片化を解消する方法について推奨する機能 |
自動SQLチューニング・アドバイザ | 高負荷のSQL文のパフォーマンスを調査し、それらの文のチューニング方法について推奨する機能 |
なお自動メンテナンスタスクを使用するためには別途追加ライセンスが発生します。
自動メンテナンスタスクの有効・無効化手順
メンテナンスタスクを有効化は「DBMS_AUTO_TASK_ADMIN.ENABLE」を使用します。
-- すべてのメンテナンスタスクを有効化
BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE;
END;
/
-- 個別にメンテナンスタスクを有効化
BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'auto optimizer stats collection'
,operation => NULL
,window_name => NULL
);
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'AUTO SPACE ADVISOR'
,operation => NULL
,window_name => NULL
);
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'AUTO SPACE ADVISOR'
,operation => NULL
,window_name => NULL
);
END;
/
メンテナンスタスクを無効化は「DBMS_AUTO_TASK_ADMIN.DISABLE」を使用します。
BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE;
END;
/
BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'auto optimizer stats collection'
,operation => NULL
,window_name => NULL
);
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'AUTO SPACE ADVISOR'
,operation => NULL
,window_name => NULL
);
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'AUTO SPACE ADVISOR'
,operation => NULL
,window_name => NULL
);
END;
/
自動メンテナンスタスクのスケジュール変更
メンテナンスタスクのスケジュールを変更するには「DBMS_SCHEDULER.SET_ATTRIBUTE」を使用します。
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
NAME =>'<ウィンドウ名>'
,ATTRIBUTE =>'<ジョブ属性>'
,VALUE =>'<設定値>'
);
END;
/
「ジョブ属性」や「カレンダー構文」などは記載内容が多いのでマニュアルを参照にしてください。
マニュアル:ジョブ属性
マニュアル:カレンダー構文
以下、日曜日のメンテナンスタスクを2:00から6時間動作するように変更します。
-- 開始時刻を変更
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
NAME =>'SUNDAY_WINDOW'
,ATTRIBUTE =>'REPEAT_INTERVAL'
,VALUE =>'FREQ=DAILY;BYDAY=SUN;BYHOUR=2;BYMINUTE=0; BYSECOND=0'
);
END;
/
-- ウィンドウサイズを変更
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
NAME =>'SUNDAY_WINDOW'
,ATTRIBUTE =>'DURATION'
,VALUE => NUMTODSINTERVAL(6, 'HOUR')
);
END;
/
-- 変更確認
> set line 300
> col WINDOW_NAME for a20
> col REPEAT_INTERVAL for a70
> col DURATION for a15
> col ENABLED for a7
> col AUTOTASK_STATUS for a15
> col OPTIMIZER_STATS for a15
> col SEGMENT_ADVISOR for a15
> col SQL_TUNE_ADVISOR for a16
> select s.WINDOW_NAME
2 ,s.REPEAT_INTERVAL
3 ,s.DURATION
4 ,s.ENABLED
5 ,a.AUTOTASK_STATUS
6 ,a.OPTIMIZER_STATS
7 ,a.SEGMENT_ADVISOR
8 ,a.SQL_TUNE_ADVISOR
9 from DBA_SCHEDULER_WINDOWS s,
10 DBA_AUTOTASK_WINDOW_CLIENTS a
11 where s.WINDOW_NAME = a.WINDOW_NAME(+)
12 and s.WINDOW_NAME = 'SUNDAY_WINDOW';
WINDOW_NAME REPEAT_INTERVAL DURATION ENABLED AUTOTASK_STATUS OPTIMIZER_STATS SEGMENT_ADVISOR SQL_TUNE_ADVISOR
-------------------- ---------------------------------------------------------------------- --------------- ------- --------------- --------------- --------------- ----------------
SUNDAY_WINDOW FREQ=DAILY;BYDAY=SUN;BYHOUR=2;BYMINUTE=0; BYSECOND=0 +000 06:00:00 TRUE ENABLED ENABLED ENABLED ENABLED
Oracleの基本 ~データベース入門から設計/運用の初歩までposted with ヨメレバ
渡部 亮太,相川 潔,日比野 峻佑,岡野 平八郎,宮川 大地 技術評論社 2017-09-22