PDB 単位の AWR レポートを出力する（Oracle Database 23c）

# AWR レポート
AWR レポートは Oracle Database Enterprise Edition の機能で、特定の期間のパフォーマンス情報を出力します。AWR レポートは保存されたスナップショットから差分を作成し、レポートとして出力します。スナップショットの情報は主に DBA_HIST_* ビューに格納されています。
　CDB で DBA_HIST_SNAPSHOT ビューを検索すると、CDB を示す単一の DBID が格納されています。

```SQL: CDB から DBA_HIST_SNAPSHOT ビューに格納された DBID を検索
SQL> SELECT DISTINCT dbid FROM dba_hist_snapshot;

      DBID
----------
1421343865
```

DBA_HIST_SNAPSHOT ビューは実体として WRM$_SNAPSHOT テーブルを検索していることがわかります。

```SQL: CDB から DBA_HIST_SNAPSHOT ビュー検索の実行計画を確認
SQL> SET AUTOTRACE ON
SQL> SELECT COUNT(*) FROM dba_hist_snapshot;

  COUNT(*)
----------
        21

実行計画
----------------------------------------------------------
Plan hash value: 2615486218

------------------------------------------------------------------------------------------------------
| Id  | Operation            | Name          | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |               |     1 |     2 |     4   (0)| 00:00:01 |       |      |
|   1 |  SORT AGGREGATE      |               |     1 |     2 |            |     |       |       |
|   2 |   PARTITION RANGE ALL|               |    19 |    38 |     4   (0)| 00:00:01 |     1 |     9 |
|*  3 |    TABLE ACCESS FULL | WRM$_SNAPSHOT |    19 |    38 |     4   (0)| 00:00:01 |     1 |     9 |
------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   3 - filter("STATUS"=0)

統計
----------------------------------------------------------
         72  recursive calls
          0  db block gets
        138  consistent gets
          5  physical reads
          0  redo size
        579  bytes sent via SQL*Net to client
        108  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          5  sorts (memory)
          0  sorts (disk)
          1  rows processed
```


# PDB 単位の AWR スナップショット
PDB 単位の AWR レポートを作成する場合は、PDB の初期化パラメーター AWR_PDB_AUTOFLUSH_ENABLED を TRUE に設定します。この初期化パラメーターのデフォルト値は Oracle Database 21c までは False でしたが、Oracle Database 23c では True になっています。

```SQL:
SQL> ALTER SESSION SET CONTAINER=FREEPDB1;

セッションが変更されました。

SQL> SHOW PARAMETER AWR_PDB_AUTOFLUSH_ENABLED

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
awr_pdb_autoflush_enabled            boolean     TRUE
```


参考１： Oracle Database 21c の[デフォルト値](https://docs.oracle.com/en/database/oracle/oracle-database/21/refrn/AWR_PDB_AUTOFLUSH_ENABLED.html#GUID-08FA21BC-8FB1-4C51-BEEA-139C734D17A7)
参考２： Oracle Database 23c の[デフォルト値](https://docs.oracle.com/en/database/oracle/oracle-database/23/refrn/AWR_PDB_AUTOFLUSH_ENABLED.html#GUID-08FA21BC-8FB1-4C51-BEEA-139C734D17A7)

DBA_HIST_SNAPSHOTビューを検索すると、CDBのデータベースIDとPDBのデータベースID両方の情報が格納されていることがわかります。

```SQL:　PDB から DBA_HIST_SNAPSHOT ビューに格納された DBID を検索
SQL> SHOW CON_NAME

CON_NAME
------------------------------
CDB$ROOT
SQL> SELECT DBID FROM V$DATABASE;

      DBID
----------
1421343865

SQL> ALTER SESSION SET CONTAINER=FREEPDB1;

セッションが変更されました。

SQL> SELECT DBID FROM V$DATABASE;

      DBID
----------
1421343865

SQL> SELECT DISTINCT DBID FROM DBA_HIST_SNAPSHOT;

      DBID
----------
1421343865
 685453293
```

DBA_HIST_SNAPSHOTビューの実行計画を確認すると、

```SQL: PDB から DBA_HIST_SNAPSHOT ビュー検索の実行計画を確認
SQL> SET AUTOTRACE ON
SQL> SELECT COUNT(*) FROM DBA_HIST_SNAPSHOT;

  COUNT(*)
----------
        35

実行計画
----------------------------------------------------------
Plan hash value: 3430984285

--------------------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name             | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
--------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |                  |     1 |    13 |     0   (0)| 00:00:01 |       |       |
|   1 |  SORT AGGREGATE           |                  |     1 |    13 |  |          |       |       |
|   2 |   PARTITION LIST ALL      |                  |  1190 | 15470 |     0   (0)| 00:00:01 |     1 |     2 |
|*  3 |    EXTENDED DATA LINK FULL| AWR_CDB_SNAPSHOT |  1190 | 15470 |     0   (0)| 00:00:01 |       |       |
--------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
   3 - access("CON_ID" IS NULL OR "CON_ID"=0 OR "CON_ID"=3)
       filter("CON_ID" IS NULL OR "CON_ID"=0 OR "CON_ID"=3)

統計
----------------------------------------------------------
         26  recursive calls
          0  db block gets
         33  consistent gets
          0  physical reads
          0  redo size
        603  bytes sent via SQL*Net to client
        108  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed
```

AWR_CDB_SNAPSHOT ビューに対する実行計画 EXTENDED DATA LINK FULL を確認することができます。PDB の AWR_CDB_SNAPSHOT ビューでは PDB 内の SYSAUX 表領域と、CDB のスナップショットの両方を参照することができます。このため PDB 内から awarpt.sql スクリプトを実行すると、レポートを作成するスナップショットに CDB / PDB どちらを使うかを指定する必要があります。「awr_location に値を入力してください：」という質問に対して以下の値を指定します。

|入力値|説明|備考|
|:---|:---|:---|
|AWR_PDB|PDB の AWR レポートを出力する|デフォルト|
|AWR_ROOT|CDB の AWR レポートを出力する||

```SQL: awrrpt.sql スクリプト実行例
SQL> ALTER SESSION SET CONTAINER=FREEPDB1;

セッションが変更されました。

SQL> @?/rdbms/admin/awrrpt.sql

Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
AWR reports can be generated in the following formats.  Please enter the
name of the format at the prompt.  Default value is 'html'.

'html'          HTML format (default)
'text'          Text format
'active-html'   Includes Performance Hub active report

report_typeに値を入力してください: text

Type Specified:  text



Specify the location of AWR Data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AWR PDB reports can be generated using data stored in this PDB or ROOT.
Please enter the desired location at the prompt. Default value is 'AWR_PDB'.

    AWR_PDB  - Use AWR data from PDB
    AWR_ROOT - Use AWR data from ROOT
awr_locationに値を入力してください: AWR_PDB

Current Instance
~~~~~~~~~~~~~~~~
DB Id          DB Name        Inst Num       Instance       Container Name
-------------- -------------- -------------- -------------- --------------
  685453293     FREE                        1 FREE           FREEPDB1
<<略>>
```

Author: Noriyoshi Shinoda / Date: January 19, 2024