Oracle Databaseの運用中、「システムのレスポンスが急に遅くなった」「CPU使用率が高止まりしている」といったパフォーマンス問題に直面したことはありませんか?
そんな時に最も頼りになる公式ツールが AWR(Automatic Workload Repository) です。AWRは、定期的にデータベースの性能情報を自動で収集・保存し、ボトルネックの特定やチューニングに活用できる強力な機能です。本記事では、AWRの基礎知識から設定確認、レポートの取得手順、実務での分析ポイントまで初心者〜中級者向けに分かりやすく解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. 結論・最短手順(AWRレポート取得のクイックリスト)
AWRレポートを最短で取得して分析を開始する手順は以下の通りです。
- 権限の確認:
SYSDBA特権を持つユーザー(SYSなど)でSQL*Plusに接続します。 - スナップショットIDの確認:性能悪化が発生した時間帯をカバーする「開始ID」と「終了ID」を特定します。
- 専用スクリプトの実行:
@?/rdbms/admin/awrrpt.sqlを実行します。 - 対話型ナビゲーションへの回答:出力形式(HTML推奨)、インスタンス番号、対象の開始・終了ID、ファイル名を入力してレポートを出力します。
2. 背景と基礎:AWRの仕組みと保存条件
AWR(Automatic Workload Repository)とは?
AWRとは、Oracle Databaseの稼働統計やパフォーマンスメトリックを自動的に収集、処理、維持する組み込み機能です。主に以下のような重要情報が蓄積されます。
- インスタンスの負荷状況(CPU使用率、待機イベント、メモリ使用量など)
- 高負荷なSQL文の統計情報(実行回数、パース時間、バッファ読み込み数など)
- セグメント統計(どの表や索引に対してI/Oが集中しているか)
- 初期化パラメータの変更履歴
AWRの全体イメージ図
[Oracle Database]
│
▼ (デフォルト1時間ごとに自動収集)
┌──────────────────────────┐
│ AWRスナップショット │ ──> SYSAUX表領域へ保存(デフォルト8日間)
└──────────────────────────┘
│
▼ (トラブル発生時の開始・終了IDを指定)
┌──────────────────────────┐
│ AWRレポート出力実行 │ ──> スクリプト: awrrpt.sql
└──────────────────────────┘
│
▼
┌──────────────────────────┐
│ HTML / TEXT レポート │ ──> 正常時との比較でボトルネックを特定
└──────────────────────────┘
保存場所・収集間隔・保存期間
AWRが収集したデータは、システム管理用のSYSAUX表領域に保管されます。デフォルトの制御基準は以下の通りです。
- 収集間隔:1時間(60分)ごと
- 保存期間:8日間(192時間)
これらの設定値は、データ・ディクショナリ・ビュー DBA_HIST_WR_CONTROL を検索することでいつでも確認できます。

3. 手順・実装:AWRの有効化と設定確認
AWR機能を利用するためには、データベース全体の統計収集レベルを制御する初期化パラメータ STATISTICS_LEVEL が適切に設定されている必要があります。
STATISTICS_LEVEL の設定値と影響
| 設定値 | AWR機能への影響 | 概要 |
BASIC | 無効 | AWRを含む多くの自動チューニング・アドバイザ機能が停止します(非推奨)。 |
TYPICAL | 有効(デフォルト) | データベースのパフォーマンス監視に必要な通常レベルの統計を収集します。 |
ALL | 有効(詳細表示) | TYPICAL の情報に加え、OSの実行計画実行統計などより詳細な情報を含めます。 |
ステップ1:現在の設定状態を確認する
SQL*Plusに管理者としてログインし、パラメータの状態と現在のAWR設定を確認します。
現在の統計収集レベルを確認するには、次のコマンドを実行します。
SHOW PARAMETER STATISTICS_LEVEL;
現在のスナップショット取得間隔と保存期間を確認するには、次のクエリを実行します。
SELECT snap_interval, retention FROM dba_hist_wr_control;
SQLの意図と結果:
SNAP_INTERVALに+00 01:00:00(1時間)、RETENTIONに+08 00:00:00(8日間)と表示されれば、標準設定の状態でAWRが正常稼働しています。
ステップ2:必要に応じてパラメータを変更する
もし STATISTICS_LEVEL が BASIC になっている場合は、AWRが動作しないため、以下のコマンドで TYPICAL に変更します。
統計収集レベルを推奨値である TYPICAL に変更し、即時かつ再起動後も適用します。
ALTER SYSTEM SET STATISTICS_LEVEL = TYPICAL SCOPE=BOTH;
運用の注意点・戻し方:
STATISTICS_LEVELの変更は即座に反映されます。元の状態(例:BASIC)に戻す場合は、再度SET STATISTICS_LEVEL = BASIC SCOPE=BOTH;を実行しますが、トラブルシューティング目的以外でBASICに下げることは推奨されません。また、SYSAUX表領域の空き容量が逼迫している場合は、保存期間(RETENTION)を短くするなどの調整を検討してください。
4. 実行例:スナップショット確認とAWRレポートの取得
1. 対象となるスナップショットIDの特定
レポートを出力する前に、パフォーマンス低下が発生した時間帯の SNAP_ID を特定します。
過去のスナップショットの取得日時とIDを一覧表示します。
SELECT snap_id, begin_interval_time, end_interval_time
FROM dba_hist_snapshot
ORDER BY snap_id;
- 実行結果イメージ:
SQL> SELECT SNAP_ID, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME
2 FROM DBA_HIST_SNAPSHOT
3 ORDER BY SNAP_ID;
SNAP_ID BEGIN_INTERVAL_TIME END_INTERVAL_TIME
---------- ---------------------------------------- -------------------------------
1 25-04-04 14:12:46.000 25-04-04 14:23:47.061
2 25-04-04 14:23:47.061 25-04-04 15:00:07.267
3 25-04-04 15:00:07.267 25-04-04 16:00:35.029
4 25-04-04 16:00:35.029 25-04-04 17:00:49.228
5 25-04-04 17:00:49.228 25-04-04 18:00:03.047
6 25-04-04 18:00:03.047 25-04-04 19:00:17.300
6行が選択されました。
結果の解説:
例えば「16:30頃にシステムが重くなった」という事象であれば、16:00(SNAP_ID = 4)から 17:00(SNAP_ID = 5)の間、あるいは前後を含めた範囲(ID: 3〜5など)を指定してレポートを作成します。
2. AWRレポート作成スクリプトの実行
SQL*Plus上で、Oracleが提供している標準スクリプトを呼び出します。
AWRレポート作成用のインタラクティブスクリプトを起動します。
@?/rdbms/admin/awrrpt.sql
スクリプト実行時のインタラクティブな流れ
enter value for report_type: 出力形式を指定します。ブラウザでグラフやリンクが確認しやすいhtml(推奨)またはtextを入力します。enter value for num_days: 選択肢として表示したい過去何日分のスナップショット履歴を表示するか(例:1)を入力します。enter value for begin_snap: 調査したい時間帯の開始スナップショットID(例:4)を入力します。enter value for end_snap: 調査したい時間帯の終了スナップショットID(例:5)を入力します。enter value for report_name: 生成するファイル名を入力します。デフォルトでよければそのままEnterを押します。
5. 運用・実践:レポートの注目セクションと比較分析
AWRレポートは非常に膨大ですが、実務でボトルネックを素早く見抜くために以下の5つのセクションに焦点を絞ります。
AWRレポートの重要セクション一覧
| セクション名 | 監視・確認すべき観点 |
Load Profile | システム全体の負荷度合い(1秒あたりのトランザクション数、論理読込数、Redo生成量など)を確認。 |
Instance Efficiency | パース率やバッファキャッシュヒット率など、メモリや解析処理の効率指標を確認(通常は90%以上が理想)。 |
Top 5 Timed Events | システム全体で最も時間を消費している上位5つの待機イベント(DB time)。ボトルネック特定の最重要項目。 |
SQL Statistics | 実行回数が異常に多いSQL、CPU時間やI/O(ディスク読み込み)を大量に消費している不適切なSQLの特定。 |
Segment Statistics | 大量の読み書きが発生している特定のテーブルやインデックス。物理配置やパーティション化の検討材料。 |
効果的な分析テクニック:正常時と異常時の比較
単一のAWRレポートだけを見ても、その待機イベントの数値が「そのシステムにとって許容範囲内なのか」を判断することは困難です。「問題が発生していない通常稼働時のAWRレポート」と「問題発生時のAWRレポート」を並べて比較することで、初めて本当のボトルネックの変化が浮き彫りになります。
- 負荷急増時の兆候:
Load ProfileセクションにおけるRedo sizeやExecutes(実行回数)の急激な増加。 - レスポンス遅延時の兆候:
Top 5 Timed Eventsにて、普段は見られない待機イベント(例:ログ書き込み待ちのlog file syncや、バッファ競合のbuffer busy waits)が上位を占めている。 - I/Oパフォーマンス悪化の兆候:
Segment Statisticsで特定のオブジェクトに対するLogical ReadsやPhysical Readsが突出し、SQLのアクセス経路(フルスキャン等)に問題が生じている。
6. トラブルシューティング
AWRの運用やデータ取得時に発生しやすい問題と、その解決ステップです。
| 現象・エラー | 主な原因 | 対処手順 |
| スナップショットが一覧に表示されない | STATISTICS_LEVEL が BASIC に設定されていたため、自動収集が停止していた。 | パラメータを TYPICAL に変更し、手動で EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT; を実行して即時収集を確認する。 |
| SYSAUX表領域の容量不足 | スナップショットの保存期間(RETENTION)が長すぎる、または収集間隔が短すぎる。 | DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS プロシージャを使用して、保存期間を短く(例:7日間に)調整する。 |
7. ライセンス・注意点
AWRは非常に便利なツールですが、使用にあたってはOracleライセンスの規約を厳守する必要があります。
- 対象エディション:Enterprise Edition(EE)のみ利用可能です。Standard Edition 2(SE2)環境ではAWR機能自体がサポート対象外、または制限されています。
- 追加ライセンス要件:AWRのデータを参照・抽出してレポートを作成・利用するためには、Enterprise Editionのライセンスに加えて 「Oracle Diagnostics Pack」 という有償オプションライセンスの契約が必須です。
- 代替手段(SE2環境など):Diagnostics Packライセンスを保有していない環境や、Standard Edition 2環境で同等のパフォーマンス分析を行う場合は、標準機能として無償で提供されている Statspack(スタッツパック) を構築・利用することが推奨されます。

8. FAQ:よくある質問
Q. AWRスナップショットを、次の1時間まで待たずに今すぐ手動で取得することはできますか?
A. はい、可能です。管理者権限(SYSDBA)を持つユーザーで、以下のPL/SQLパッケージを実行することで、任意のタイミングで即座にスナップショットを生成できます。
EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;
Q. Diagnostics Packライセンスを持っていないのに誤ってスクリプトを実行してしまいました。データベースの動作に問題はありますか?
A. スクリプトの実行によってデータベース自体が停止したりデータが破損したりするような技術的悪影響はありません。ただし、ライセンス違反(コンプライアンス違反)とみなされるリスクがあるため、ライセンス未保有環境では awrrpt.sql などの関連スクリプトの実行や、DBA_HIST_ で始まるAWR関連ビューへの直接アクセスは避けてください。
Q. AWRのデータが溜まりすぎて SYSAUX 表領域が溢れそうなのですが、古いデータを手動で削除できますか?
A. はい、DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE プロシージャを使用することで、指定した範囲のスナップショットIDのデータを手動で一括削除できます。ただし、通常は保存期間(RETENTION)の設定に基づいて古いものから自動的にパージされるため、まずは自動設定の見直しをおすすめします。
9. まとめ:要点チェックリスト
- AWR(Automatic Workload Repository)は、Oracle Databaseのパフォーマンス情報を自動で収集・蓄積するEE向け標準機能である。
- デフォルトの設定では、データは
SYSAUX表領域に保存され、収集間隔は1時間、保存期間は8日間である。 - 正常に稼働させるためには、初期化パラメータ
STATISTICS_LEVELがTYPICALまたはALLである必要がある。 - レポートの出力は、専用スクリプト
@?/rdbms/admin/awrrpt.sqlをSQL*Plus等から実行することで対話形式で行える。 - パフォーマンス低下の原因を正確に突き止めるためには、トラブル発生時のレポートだけでなく、正常稼働時のレポート(比較対象)をあらかじめ保管しておく運用が極めて重要である。
本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。


💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


コメント