Oracle Databaseのパフォーマンス分析に不可欠なAWR(Automatic Workload Repository)。
本記事では、マルチテナント(CDB構成)環境におけるAWRの取得場所・保存構造・CDB$ROOTとPDBでの出力方法の違いを徹底解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
✅ この記事でわかること
- AWRの基本構造と収集対象
- CDB$ROOTとPDBにおける保存先の違い
- Oracle 12.2以降のPDB単位でのAWR出力方法
- CDB$ROOTでのAWRレポートの重要性
- トラブル時の確認ポイント
🔍 AWRとは?
AWR(Automatic Workload Repository)は、Oracleが1時間ごとなどの一定間隔で取得する統計情報のスナップショットです。
以下の情報が含まれ、SQLのチューニングやパフォーマンス問題の分析に利用されます。
- アクティブセッション情報
- 実行されたSQLの統計
- 待機イベント(Wait Events)
- I/OやCPUリソースの使用量 など
🏗 マルチテナント環境におけるAWRの保存構造
図:CDB構成におけるAWRの保存構造(12.2以降)
+-----------------------------+
| CDB$ROOT |
| - DBA_HIST_* (CON_ID = 1) | ← 全体のAWR保存領域(全コンテナ統括)
+-------------+--------------+
|
+-------------+-------------+-------------+
| PDB01 PDB02 PDB03 |
| - DBA_HIST_* (各CON_ID) | ← PDBごとのAWR保存領域
+-------------+-------------+-------------+
| コンテナ | 保存先 | 備考 |
|---|---|---|
| CDB$ROOT | SYS.WRI$_* in CDB$ROOT | 全インスタンス統計をカバー |
| 各PDB | SYS.WRI$_* in 各PDB | PDBローカル統計のみ保存 |
📘 CDB$ROOTでのAWRレポート出力の意味と用途
CDB$ROOTから出力されるAWRレポートは、インスタンス全体(CDB+すべてのPDBを含む)のパフォーマンス傾向を把握するのに最も重要です。
✅ 利用シーン
| シーン | 出力元 |
|---|---|
| 全体的なリソース消費傾向の分析 | CDB$ROOT(AWR_ROOT) |
| 特定のSQLや待機イベントの確認 | CDB$ROOT または PDB |
| 1つのPDBだけが重いと感じる時の切り分け | CDB$ROOT + 各PDBを比較 |
🧪 実行手順:CDB$ROOTでAWRレポートを出力する
-- CDB$ROOTにて接続
@?/rdbms/admin/awrrpt.sql
プロンプトで以下を選択:
Specify the location of AWR Data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AWR_ROOT - Use AWR data from root (default)
AWR_PDB - Use AWR data from PDB
awr_locationに値を入力してください: AWR_ROOT
出力対象はCON_ID = 1(CDB$ROOT)にある全スナップショットになります。
🧪 PDB単位でAWRレポートを出力する手順
① PDBに接続
ALTER SESSION SET CONTAINER = PDB01;
またはSQL*PlusでPDBに直接接続:
sqlplus system/oracle@//hostname:1521/pdb01
② レポートスクリプト実行
@?/rdbms/admin/awrrpt.sql
プロンプトで AWR_PDB を選択:
Specify the location of AWR Data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AWR_ROOT - Use AWR data from root (default)
AWR_PDB - Use AWR data from PDB
awr_locationに値を入力してください: AWR_PDB
🔎 スナップショットの存在確認
PDBにスナップショットが存在するかは以下で確認:
SELECT con_id, snap_id, begin_interval_time
FROM dba_hist_snapshot
ORDER BY con_id, snap_id DESC;
⚠ スナップショットが存在しないときは?
初期状態ではPDBのAWRスナップショットが無効化されている可能性があります。
CDB$ROOTで以下の設定を実行して有効化してください:
EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS (
retention => 14400, -- 保持時間(分)
interval => 60 -- 取得間隔(分)
);
✅ まとめ
| 項目 | 内容 |
|---|---|
| AWR出力の場所 | CDB$ROOT(全体) or PDB(個別) |
| 保存先 | SYS.WRI$_*:CDB$ROOT + 各PDBに分散 |
| バージョン対応 | 12.2以降でPDB対応、12.1はCDB$ROOTのみ |
| ライセンス | Diagnostics Packが必要 |
| 実務的な使い分け | 全体傾向:CDB$ROOT、局所的分析:PDB単位 |
[参考]
基本からわかる!高性能×高可用性データベースシステムの作り方 第14回 AWRレポート作成とAWRスナップショット取得(PDB単位)




コメント