Oracle AWRレポートの見方と解析ポイントを徹底解説|パフォーマンス改善・トラブル調査に必須

はじめに

Oracleデータベースの運用において、AWR(Automatic Workload Repository)レポートやStatspackから取得したパフォーマンス情報を定期的に分析することは、トラブル予兆の早期検知や安定稼働の実現に欠かせません。さらに、障害発生時の原因究明においても、これらのレポートは極めて有効です。
本記事では、Oracle初心者でも理解しやすいAWRレポートの基本的な見方や解析のポイントを解説します。これからOracle性能診断に取り組む方はぜひ参考にしてください。

AWRとは?

AWR(Automatic Workload Repository、自動ワークロードリポジトリ) とは、Oracle Databaseの性能情報を自動的に収集・保存する仕組みです。CPU使用率、メモリ使用率、I/O待ち時間など、Oracleインスタンス全体のワークロード統計をレポートとして出力します。
AWRレポートを活用することで、

  • データベースが正常に稼働しているかの確認
  • 性能劣化の兆候把握
  • 障害発生時の原因解析

といった用途に役立ちます。ただし、AWRを利用するには Oracle Enterprise EditionのDiagnostics Packライセンス が必要な点に注意しましょう。

AWRによる情報取得は、MMON(Manageability Monitor)プロセス が SGA(System Global Area) から統計情報を収集・フィルタリングし、SYSAUX表領域 に スナップショット として保存することで行われます。

デフォルト設定:

  • スナップショット間隔:60分 ※最小間隔は10分
  • 保管期間:8日間 ※上限値はないが、SYSAUX表領域に格納されるため容量に注意

AWRレポート取得方法

AWRレポートの取得方法についてはここでは詳細を割愛しますが、AWRはスナップショット取得間隔(デフォルト60分)で収集した統計情報を、レポートとして出力できます。出力形式には HTMLやテキストがあり、用途に応じて使い分け可能です。
また、Oracleではレポート生成用のスクリプトが複数提供されており、SQL*Plusから簡単に実行できます。私は複数のAWRレポートをまとめて確認することが多いため、get_awr_base.sqlを利用しています。
AWRレポート取得に関する具体的な手順やスクリプト例は、以下の参考サイトが分かりやすいので、必要に応じて確認してみてください。
https://blogs.oracle.com/otnjp/post/kusakabe-014-awr-report-pdb
https://bismarc256.hateblo.jp/entry/2019/11/13/200000

AWRレポートの解析観点

AWRレポートには多くの性能情報が記載されていますが、すべてを詳細に理解する必要はありません。まずは「どのような情報が含まれているか」を把握しておくことが重要です。AWRレポートは大きく以下の3つのセクションに分かれています。

  • 基本情報:データベース名、インスタンス名、稼働時間などの環境情報
  • レポートサマリ:主要な統計情報の概要
  • メインレポート:CPU、メモリ、I/O、SQLごとの詳細な性能統計

これらのセクションを押さえておくことで、AWRレポート全体の構造を理解しやすくなります。

少し補足すると、性能問題が発生したときにAWRレポートを取得しても、それ単体では「どの値が異常なのか」を判断するのは難しい場合があります。
そのため、正常時のAWRレポートを事前に取得し、比較できる環境を整えておくことが重要です。定期的にAWRレポートを保存しておくことで、問題発生時の原因分析を迅速に進められます。

AWRレポートの解析フロー

AWRレポートには多数の統計情報が含まれていますが、最初からすべてを確認する必要はありません。効率よく性能問題を特定するためには、全体像を把握してから原因を掘り下げていくことが重要です。

私が障害調査でAWRレポートを確認する際は、概ね以下の流れで解析を進めています。

① DB Time・Load Profileでデータベース全体の負荷を確認
② Top 10 Foreground Eventsでボトルネックを特定
③ 負荷の原因となっているSQLを確認
④ OSメトリクス(CPU・メモリ・I/O)と照らし合わせて総合的に判断

① DB Time・Load Profileで全体の負荷を確認

まずはデータベース全体の負荷状況を確認します。

特に DB Time は性能分析で最も重要な指標の一つです。通常時と比較してDB Timeが大きく増加している場合は、データベース内部で何らかの処理が滞留している可能性があります。

また、Load Profileでは以下のような項目を確認します。

  • DB CPU
  • Logical Reads
  • Physical Reads
  • Redo Size
  • Hard Parses
  • Transactions

これらの値が通常時と比較して大きく変化していないかを確認します。

② Top 10 Foreground Eventsでボトルネックを特定

次に、どの待機イベントに時間を費やしているかを確認します。

例えば、

  • db file sequential read が増加している場合はストレージI/OやSQL実行計画
  • log file sync が多い場合はREDO書き込み
  • gc current block busy が多い場合はOracle RACのブロック競合

など、待機イベントからボトルネックの方向性を把握できます。

③ 負荷の原因となっているSQLを確認

ボトルネックが見えてきたら、その原因となっているSQLを確認します。

AWRレポートには、

  • Elapsed Time
  • CPU Time
  • Buffer Gets
  • Disk Reads
  • Executions

などのSQL統計が掲載されています。

特定のSQLがCPUやI/Oを大量に消費していないかを確認し、必要に応じて実行計画や索引設計を見直します。

④ OSの性能情報とあわせて総合的に判断

最後に、OSレベルの性能情報と照らし合わせます。

例えば、

  • CPU使用率(sar、vmstat)
  • メモリ使用率
  • ディスクI/O(iostat)
  • ネットワーク帯域

などを確認することで、Oracle内部だけでは判断できない要因を特定できる場合があります。

Oracleの待機イベントとOSメトリクスを組み合わせて分析することで、より正確にボトルネックを特定できます。

AWRレポートの詳細説明

それでは、AWRレポートに記載されている主要な項目を説明していきます。

基本情報

AWRレポートの冒頭には、データベースおよび環境に関する基本情報が記載されています。ここでは、データベースサーバの CPU数、メモリ容量、インスタンス数 などを確認できます。

主な項目説明備考
RACOracle RACの適用有無
CPUsCPU数
Coresコア数
Memory (GB)メモリ搭載容量
Begin SnapAWRスナップショット取得開始時間。Sessionsに開始時のセッション数が記録されます。
End SnapAWRスナップショット取得終了時間。Sessionsに終了時のセッション数が記録されます。開始時と終了時でSession数が大きく変わっていない、つまり負荷が一定であったかどうかを確認しましょう。
ElapsedAWRレポート取得期間。デフォルトでは60分。
DB Timeざっくりいうと、Oracleが実際に処理していた時間です。正確には、AWRレポート取得期間中のOracleサーバプロセスのCPU時間と待機イベント時間の合計となります。CPUコア数が2以上の場合はDB TimeはそれぞれのCPUに対して加算されていくので、Elapsed×CPUsが最大の負荷可能時間となります。ただしバックグラウンドプロセスの情報は含まれません。
計算式:DB Time = DB CPU + non idle wait time
通常時と比較して、極端にDB Timeが大きくなっていないことを確認しましょう。

Report Summary

Top ADDM Findings by average Active Sessions

ADDM(Automatic Database Diagnostic Monitor)の上位診断結果となります。Topに来ているTaskの傾向が通常時と大きく変わっていないことを確認します。

主な項目説明備考
Avg active sessions of the taskタスクのセッションに要した時間セッションに要した時間が増えていないかどうかを確認しましょう。
Percent active sessions of findingsDB timeを占める割合が多い処理ごとの割合DBタイムを占めているタスクが正常時と異なっていないことを確認しましょう。

Load Profile

Load ProfileはAWRレポート内でもデータベース負荷の傾向を把握するための重要セクションです。ここには DB Time、DB CPU、Logical/Physical Reads、Redoサイズ、トランザクション数、パース数 といった負荷指標がまとまって掲載されます。これらの数値を注意深く確認することで、性能劣化やI/Oボトルネック、CPU飽和などの兆候を早期に検出できます。次節では「Load Profileでまず見るべき主要項目」を具体的に解説します。

主な項目説明備考
DB TimeAWRレポート取得期間中にOracleサーバプロセスのCPU時間と待機イベント時間の合計。
DB CPUAWRレポート取得期間中にOracleサーバプロセスのCPU時間。つまりDB Timeから待機イベント時間を差し引いた値となります。
Redo sizeDML(INSERT, UPDATE, DELETE)実行によって生成されたREDOログのサイズを示しています。正常時より値が大きくなっていた場合、不要なDMLが発行されていないか確認しましょう。
Logical read論理読み込みに成功したブロック数SGAのバッファキャッシュにデータが残っている場合はそのデータを読み込むことで物理ディスクからの読み込みを低減させます。
Physical reads物理ディスクから直接読み込みしたブロック数物理ディスクからの読み込みが多くなると性能劣化する可能性がありますので確認してみて下さい。
Physical writesデータファイルへ書き込まれたブロック数(DBWRなどによる書き込みを含む)物理ディスクからの書き込みが多くなると性能劣化する可能性がありますので確認してみて下さい。
User callsユーザからのコール数急激に値が上がっていた場合は、ユーザ操作で何が起こっているかを確認しましょう。
Parses(SQL)ハードパースとソフトパースの回数パースとは解析を意味しており、SQL文の構文チェックが実施されます。
Hard Parsesハードパースの回数ハードパースでは、SQL文の構文チェック、テーブルや列の定義および権限チェック、そして実行計画の作成が行われます。ハードパースの割合が増えると、性能に影響を及ぼす可能性があります。CPUの種類やコア数によって異なるため一概には言えませんが、1秒間に100回以上のハードパースが発生している場合は、実行しているSQL文を確認することを推奨します。
なお、ソフトパースの回数は直接表示されませんが、「Parses – Hard Parses」の差分で算出することが可能です。
ExecutesSQL実行数ユーザが発行したSQLだけではなく、Oracle内部処理のSQL実行数も含まれます。
Transactionsトランザクション数

Instance Efficiency Percentages (Target 100%)

このセクションでは、バッファキャッシュやライブラリキャッシュがどの程度効率的に利用されているかが示されます。キャッシュヒット率が低下したり、ソフトパースの割合が減少すると、性能劣化の要因となる可能性があります。そのため、アプリケーションのリリースやOracleパッチの適用など、システムに変更を加えた際には特に注意して確認することを推奨します。

このセクションの各種Hit Ratioは、キャッシュ利用効率を把握するための参考指標です。ただし、Hit Ratioが高いからといって性能に問題がないとは限りません。たとえば、Buffer Hit %が100%近くでデータの読み込み効率が高くても、SQLの実行計画が再利用されずにハードパースが頻発している場合は、CPU負荷の増加によって性能問題が発生することがあります。性能分析では、まずDB TimeやTop Foreground Eventsなどでボトルネックを特定し、そのうえでHit Ratioを補助的な情報として確認することが重要です。

主な項目説明備考
Buffer Nowait %待ち時間なくバッファキャッシュにアクセスできた処理の割合一般的に95%以上が正常値。
Buffer Hit %バッファキャッシュにヒットした処理の割合一般的に90%以上が正常値。
Library Hit%実行可能なSQLが共有プールに存在していた割合一般的に95%以上が正常値。95%を切っている場合は共有プールの拡張を検討してみて下さい。
Execute to Parse %パースを再実行せずに再利用できた割合
Parse CPU to Parse Elapsed %CPU TimeのうちSQLのパースに消費した割合
Redo NoWait %REDOログをすぐに使用するための十分なバッファがあった処理の割合一般的に90%以上が正常値。
In-memory Sort %ソート処理がメモリ上で実施された割合一般的に90%以上が正常値。
Soft Parse %ソフトパースの割合一般的に90%以上が正常値

参考までにSQLのパース処理(ハードパース、ソフトパース)のフローを図示します。

Top 10 Foreground Events

データベースで発生したイベントのうち、Total Wait Time が大きい順に並べた情報です。性能問題が発生した際には、ボトルネックとなっているイベントを特定できる可能性があるため、注意して確認することをおすすめします。

ここでは、よく見かける Top 10 イベントを記載しますので、参考にしてください。

主な項目説明備考
DB CPUCPUが動作しているイベント。
Total Wait Time(sec) = 各CPUコアのCPU動作の時間の総和
DB CPUが上位で、待機イベントが極端に増えていない場合はCPUが主体となって正常に処理できている状態と考えられます。DB CPU以外のイベントがTopに来ている場合にはボトルネックとなっている可能性がありますので確認してみて下さい。
db file sequential readシングルブロック読み取りが発生した際に発生する待機イベント非効率なインデックススキャン、行連鎖、行移行によって無駄なI/Oが発生する場合に待機が発生します。
db file scattered readマルチブロック読み取りが発生した際に発生する待機イベント本待機イベントが発生する要因はdb file sequential readと同様です。
log file syncCommitを要求してからLGWRプロセスによるREDOのストレージへの書き込みが発生する際の待機イベント主に過度なコミット発行、あるいはLGWRのI/O処理によって待機が発生します。頻繁なREDOログファイルスイッチにより待機が発生することもあります。
enq: SV – contention要求されたシーケンス番号を取得する待機イベント
gc current/cr block busyRAC構成において、currentブロックまたはcrブロックが転送される過程で競合が発生したことによる待機イベント競合が発生する要因としては、要求されたブロックがローカルプロセスによって使用されていることや、REDOログの記録処理が遅延したことが挙げられます。

まとめ

本記事では、Oracleデータベース運用で重要な AWRレポート の基本と解析ポイントを解説しました。

  • AWRとは
    CPU使用率、メモリ使用率、I/O待ちなどの性能情報を自動収集する仕組みで、性能劣化の兆候把握や障害原因の特定に有効です。
  • 主な解析ポイント
    • 基本情報:CPU数、メモリ、インスタンス数、スナップショット期間
    • Load Profile:DB Time、DB CPU、Logical/Physical Reads、Redoサイズ
    • Instance Efficiency Percentages:キャッシュ効率やパース割合
    • Top 10 Foreground Events:ボトルネックとなる待機イベントの確認
  • 実務での活用
    正常時レポートとの比較や、アプリ・パッチ適用後の確認を習慣化することで、トラブルの早期検知と迅速な原因分析が可能です。

AWRレポートは膨大な情報を含んでいますが、すべてを一度に理解する必要はありません。まずはDB Time、Load Profile、待機イベントという主要なポイントを押さえ、正常時との比較を習慣化することが性能問題の早期発見につながります。

参考文献

AWRを基本からおさらいしよう
https://speakerdeck.com/oracle4engineer/awrwoji-ben-karaosaraisiyou

基本からわかる!高性能×高可用性データベースシステムの作り方 第13回 AWRレポート作成とAWRスナップショット取得(CDB全体)

https://blogs.oracle.com/otnjp/post/kusakabe-013-awr-report

Performance Tuning Basics 15 : AWR Report Analysis

Performance Tuning Basics 15 : AWR Report Analysis
The Oracle's Automatic Workload Repository (AWR) collects, processes, and maintains performance statistics for problem d...

DBA NET

DBANet
Offers DBAs the ability to interpret AWR reports for Oracle database performance tuning

Oracle待機イベント情報

Oracle待機イベント情報

引用:https://community.sap.com/t5/technology-blogs-by-sap/awr-reports-part-i-10-most-important-bits/ba-p/13125127
引用:https://jazz.net/wiki/bin/view/Deployment/RequirementsManagement70Performance
引用:https://www.dbanet.co.za/Summary/awr_load_profile.html
引用:https://www.dbanet.co.za/Summary/awr_top10_foreground_events.html

コメント