AWRレポートを初めて開いたとき、情報量の多さに圧倒されてどこから読めばいいのか分からなかった記憶があります。まずは全体の構成と、レポートが何をもとに作られているのかから押さえていきます。

AWRレポートとは

AWRスナップショット収集フロー図

図1: AWRスナップショット収集フロー(MMONプロセス→AWRリポジトリ→レポート生成)

AWR(Automatic Workload Repository)は、Oracle データベースが自動収集するパフォーマンス統計情報をまとめたレポートです。Oracle 10g から導入され、DBA がシステムのパフォーマンスを診断するための中核的なツールとなっています。

  • Oracle データベースが自動収集するパフォーマンス統計情報をまとめたレポート
  • デフォルトで1時間ごとにスナップショットが取得される
  • DBA がボトルネックや問題の根本原因を特定するために使用する
AWRはOracleの「総合健康診断書」とも呼ばれ、定期的な確認がパフォーマンス維持の鍵になります。

なぜAWRが必要か

本番データベースで性能問題が発生したとき、「あのとき何が起きていたか」を事後的に調査できるのがAWRの最大の価値です。問題が発生した瞬間にDBAが張り付いている保証はなく、障害は夜間・週末など人がいないタイミングで発生することも多い。AWRはそうした場面での事後調査を可能にします。

一般的なパフォーマンス問題の調査フローは次のようになります。まず「いつ・どのくらい遅かったか」を特定し、その時間帯のAWRレポートを生成します。次にTop 5 Timed Eventsで主要な待機イベントを特定し、SQL Statisticsで原因となったSQL文を絞り込む。最後にインデックス追加やSQL書き換えなどの対処を施す、という流れです。

AWRがなければ、遅かった時間帯のスロークエリログや断片的なメトリクスを手動でかき集める必要があり、調査に何倍もの時間がかかります。

スナップショットと保持期間

  • スナップショット間隔: デフォルト 60分(変更可能)
  • 保持期間: デフォルト 8日間(AWR設定による)

スナップショットはAWRが定期的に取得する「その瞬間のスナップ」で、レポートはこの「2つのスナップショット間」の統計を集計したものになります。例えばスナップショット番号 1000(08:00取得)から 1001(09:00取得)のAWRレポートを生成すると、その1時間のデータベース動作を分析できます。

スナップショット間隔が短いほど細かい粒度で問題を特定できますが、AWR自体のディスク使用量と管理オーバーヘッドが増加します。通常は60分で十分ですが、高頻度に問題が発生する本番環境では30分に縮めることもあります。

スナップショット設定の変更

スナップショット間隔と保持期間は DBMS_WORKLOAD_REPOSITORY パッケージで変更できます。

-- スナップショット間隔を30分・保持期間を30日に変更
BEGIN
  DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
    retention => 43200,   -- 30日(分単位)
    interval  => 30       -- 30分
  );
END;
/

-- 現在の設定を確認
SELECT snap_interval, retention
FROM   dba_hist_wr_control;

なお、手動でスナップショットを取得したい場合(バッチ実行前後など)は次のコマンドを使います。

-- 手動スナップショット取得
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
-- スナップショット番号を確認
SELECT snap_id, begin_interval_time, end_interval_time
FROM   dba_hist_snapshot
ORDER  BY snap_id DESC
FETCH  FIRST 5 ROWS ONLY;

生成コマンドと出力形式

SQL*Plusから以下のスクリプトを実行してレポートを生成します。実行するとインスタンス名・スナップショット番号・出力形式の入力を求められます。

-- AWRレポート生成スクリプト
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
  • 形式: HTML / テキストどちらも選択可能
  • HTML形式: SQL_IDのリンクから詳細へジャンプできて便利。調査用途ではこちらを推奨。
  • テキスト形式: メールで送ったりgrepしたいときに便利。自動スクリプトに組み込む場合にも向いている。

RAC(Real Application Clusters)環境では awrgrpt.sql を使用してグローバルレポートを生成します。特定インスタンスのレポートは awrrpti.sql で取得できます。

-- RAC全インスタンスのグローバルAWRレポート
@$ORACLE_HOME/rdbms/admin/awrgrpt.sql

-- RAC特定インスタンスのAWRレポート
@$ORACLE_HOME/rdbms/admin/awrrpti.sql

AWR vs Statspack

AWR の前身となるツールが Statspack です。Oracle 8i 以前から存在し、現在も Standard Edition や Diagnostics Pack 非契約の環境で使われています。主な違いを以下にまとめます。

比較項目 AWR Statspack
必要ライセンスEE + Diagnostics PackSE・EE どちらも可
自動収集○(MMON プロセスが自動取得)△(cronやDBジョブで設定が必要)
レポート出力HTML / テキスト(SQL_IDリンクあり)テキストのみ
収集データ量豊富(ASH・SQL計画履歴なども含む)AWR より少ない
EM Cloud Control 連携×

ライセンスの注意

AWRは Enterprise Edition + Diagnostics Pack ライセンスが必要です。
Standard Editionや、Diagnostics Packを契約していないEnterprise Editionでは利用できません(Statspackを代用)。

Diagnostics Pack はOracle Enterprise Editionの有償オプションであり、単体でライセンス費用が発生します。契約状況が不明な場合は、DBA_FEATURE_USAGE_STATISTICS を確認するか、Oracle サポートに問い合わせてください。Diagnostics Pack なしで AWR 関連のビュー(DBA_HIST_* 等)にアクセスすると、ライセンス違反となる可能性があります。

AWR設定・運用でよくある誤り

誤り何が起きるか対処
スナップショット間隔を変更せずにバッチ調査 デフォルト60分では1時間分を一括集計してしまいバッチの山が埋もれる バッチ前後に手動スナップショットを取得するか、間隔を15〜30分に縮める
保持期間8日で古い問題を調査しようとする デフォルト8日を超えたスナップショットは自動削除されており、レポートが生成できない 保持期間をretention=43200(30日)に変更するか、AWR Export(awrextr.sql)で別途保管する
Diagnostics Pack 未契約の環境でAWRを使用 DBA_HIST_* ビューのアクセスがライセンス違反になる可能性がある Statspackを代替として使用する。DBA_FEATURE_USAGE_STATISTICSでライセンス状況を確認する