OracleのAWRまとめ。設定方法からAWRレポート・SQLレポートの出力手順まで
AWR(Automatic Workload Repository)は、Oracle Databaseの稼働統計とワークロード情報のスナップショットを自動的に収集・管理する機能です。定期的にAWRレポートを確認して問題の兆候を早期に発見することで、データベースの障害を未然に防ぐことができます。
この記事では、AWRの設定からレポートの出力手順までを1本にまとめて解説します。
- AWRの有効化・無効化(CONTROL_MANAGEMENT_PACK_ACCESS)
- 取得レベルの設定(STATISTICS_LEVEL)
- スナップショットの取得間隔・保存期間(DBMS_WORKLOAD_REPOSITORY)
- AWRレポートの出力(awrrpt.sql)
- AWR SQLレポートの出力(awrsqrpt.sql)
AWRの利用には「Diagnostics Pack」のライセンスが追加で必要です(Enterprise Editionのオプション)。
AWRの有効化・無効化:CONTROL_MANAGEMENT_PACK_ACCESS
Diagnostics Packライセンスを制御する初期化パラメータが CONTROL_MANAGEMENT_PACK_ACCESS です。Tuning Packと共存して設定する点に注意してください。
-- Diagnostics Pack + Tuning Pack を有効化
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = DIAGNOSTIC+TUNING scope = SPFILE;
-- Diagnostics Pack のみ有効化
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = DIAGNOSTIC scope = SPFILE;
-- 無効化
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = NONE scope = SPFILE;
SQL実行後はデータベースの再起動を忘れずに行いましょう。
Enterprise EditionではデフォルトでAWRは有効ですが、ライセンス管理のために意識的に無効化しているデータベースも稀にあります。Diagnostics Packを無効にするとAWRが、Tuning Packを無効にするとSQLアドバイザーなどが使用できなくなります。
統計情報の取得レベル:STATISTICS_LEVEL
AWRが収集する統計情報のレベルは STATISTICS_LEVEL で制御します。
| 設定値 | 意味 |
|---|---|
| BASIC | 主要な統計収集を無効化(AWRのスナップショットも停止) |
| TYPICAL | 標準的な統計を収集(デフォルト・推奨) |
| ALL | TYPICALに加えOSやSQL実行の詳細統計も収集(オーバーヘッド大) |
基本的にはデフォルトの TYPICAL で十分な情報を取得できます。
alter system set STATISTICS_LEVEL = TYPICAL scope = BOTH;
スナップショットの取得間隔と保存期間:DBMS_WORKLOAD_REPOSITORY
取得間隔と保存期間は DBMS_WORKLOAD_REPOSITORY プロシージャで設定します。どちらも単位は「分」の整数で指定します。
begin
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
interval => <取得間隔(分)>,
retention => <保存期間(分)>);
end;
/
取得間隔30分・保存期間30日(60分×24時間×30日 = 43,200分)に設定する例:
begin
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
interval => 30,
retention => 43200);
end;
/
設定値は DBA_HIST_WR_CONTROL で確認できます。
select DBID, SNAP_INTERVAL, RETENTION from DBA_HIST_WR_CONTROL;
DBID SNAP_INTERVAL RETENTION
-------------- --------------------- ---------------------
1469414445 +00000 00:30:00.0 +00030 00:00:00.0
SNAP_INTERVAL・RETENTION は左側が日数、右側が時間です。
なお、保存期間を無期限にする場合、マニュアル上は「0」を設定するとありますが、検証時はうまく動作しませんでした。実質最大値の100年相当を大きな分数(例: 52,560,000分)で指定することをおすすめします。
AWRレポートの出力:awrrpt.sql
AWRレポートは、収集されたスナップショット2点間のデータベース全体の統計レポートです。形式は次の3種類があります。
- テキスト形式 — Unix/Linux上で直接確認する場合に
- HTML形式(デフォルト) — ブラウザで確認する場合に。タグ区切りでデータが整形されているため、PythonなどでCSVへ変換するのにも便利
- パフォーマンス・ハブ・アクティブ・レポート — 12.1.0.2以降で使用可能。EM ExpressでSQL監視なども可能
SQL*PlusにSYSユーザーでログインし、次のスクリプトを実行します。実行時のカレントディレクトリにレポートが保存される点に注意してください。
@?/rdbms/admin/awrrpt.sql
対話式で次の項目を順に指定していきます。
- report_type — レポート形式(html / text / active-html。デフォルトはhtml)
- num_days — 直近何日分のスナップショットから選ぶか(未入力なら全スナップショット)
- begin_snap / end_snap — レポート範囲の開始・終了スナップショットID
- report_name — 出力ファイル名(ディレクトリを付けなければカレントディレクトリに生成)
AWR SQLレポートの出力:awrsqrpt.sql
AWR SQLレポートは、AWRレポートのうち1つのSQLに特化したレポートです。使い方は次の流れになります。
- AWRレポート(データベース全体)を確認し、性能に悪影響を与えているSQLを特定する
- 特定したSQLのAWR SQLレポートを出力し、なぜ性能が悪化したかを調査する
いきなりAWR SQLレポートから取得することはせず、必ずAWRレポートで全体を確認してから絞り込みます。
出力はAWRレポートと同様にSQL*PlusにSYSユーザーでログインして実行します。
@?/rdbms/admin/awrsqrpt.sql
対話式の指定項目はAWRレポートとほぼ同じですが、スナップショット範囲の指定後に sql_id を入力する点が異なります。
- report_type — html / text(デフォルトはhtml)
- num_days — 対象期間
- begin_snap / end_snap — スナップショット範囲
- sql_id — 調査対象のSQL ID(AWRレポートの「SQL ordered by …」セクション等で確認)
- report_name — 出力ファイル名
まとめ
| やること | 方法 |
|---|---|
| AWRの有効化 | CONTROL_MANAGEMENT_PACK_ACCESS = DIAGNOSTIC+TUNING(要再起動) |
| 取得レベル設定 | STATISTICS_LEVEL = TYPICAL(デフォルト推奨) |
| 間隔・保存期間 | DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(分単位) |
| 全体レポート | @?/rdbms/admin/awrrpt.sql |
| SQL単体レポート | @?/rdbms/admin/awrsqrpt.sql(sql_idを指定) |
障害時のSQL単位の詳細調査にはSQLトレース(10046/10053)、実行計画の見方は実行計画の確認方法も合わせて参考にしてください。