Oracle CDB構成におけるAWR徹底解説:PDB単位の取得・保存構造・CDB$ROOTでの出力まで網羅!

AWR/statspack

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$ROOTSYS.WRI$_* in CDB$ROOT全インスタンス統計をカバー
各PDBSYS.WRI$_* in 各PDBPDBローカル統計のみ保存

📘 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単位)

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

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

コメント

タイトルとURLをコピーしました