忘れかけのIT備忘録

今まで学んできた知識や小技、なるほど!と思ったことをメモするブログです。

OracleのAWR(概要)

今回はOracleのAWRについて調査、検証しました。

AWR(Automatic Workload Repository:自動ワークロードリポジトリ)とは
Oracle 10gから登場した機能で、データベースの統計情報とワークロード(処理の負荷)情報をスナップショットとして定期的(デフォルト60分間隔)に自動で収集、管理する機能です。
データベースのCPU使用率やREDOログ生成量、実行SQLなどが収集されます。
収集した情報は性能分析やチューニング、障害発生時の原因調査などに使用できます。
AWRを使用する場合、Enterprise EditionのOracle Diagnostics Packライセンスが必要です。
類似機能としてSTATSPACKという機能がありますが、こちらは無償で使用できる機能です。
AWRに比べ、機能が少ないですがStandard EditionなどEnterprise Edition以外のエディションで稼働統計情報を収集、管理する場合に有効です。

AWRスナップショット(スナップショット)
AWRで収集された特定の時点の統計情報とワークロード情報です。
AWRレポートやADDM、アドバイザなどで使用されます。
SYSAUX表領域に格納されます。
スナップショットは自動で収集する方法と手動で収集する方法があります。
自動で収集する場合、デフォルト60分間隔で収集され、8日間保存されます。(保存期間を過ぎたスナップショットは自動削除)
手動で収集する場合、DBMS_WORKLOAD_REPOSITORYパッケージのCREATE_SNAPSHOT(スナップショット取得)を使用します。

【補足】
ADDM(Automatic Database Diagnostic Monitor:自動データベース診断モニター)
直近の2点のスナップショット間の稼働統計情報を基にデータベース全体の分析(自己診断)を実施し、問題の特定や解決のための推奨事項を提示する機能
スナップショットが取得される都度(デフォルト60分間隔)、自動的に実行され、分析結果はAWRに格納される
たとえば下記のような問題、推奨事項が提示される
・H/W関連:CPU追加、ストレージ構成変更
・DB関連:初期化パラメータ設定変更
スキーマ関連:表、索引のハッシュパーティション化、手動セグメント管理方式から自動セグメント管理方式への変更
・アプリケーション関連:シーケンスのキャッシュの使用、バインド変数の使用
・その他:負荷の高いSQLに対するSQLチューニング・アドバイザの実行、頻繁に変更が加えられるオブジェクトに対するセグメント・アドバイザの実行
分析結果はEnterprise Managerなどから確認できる
なお、自動で実行する方法と手動で実行する方法があり、手動で実行する場合は下記のような方法がある
・Enterprise Manager
・$ORACLE_HOME/rdbms/admin/addmrpt.sql
DBMS_ADDMパッケージ

AWRレポート
特定の2点のスナップショット間の稼働統計情報をファイル(HTML形式またはテキスト形式)としてレポートに出力したものです。
ただし、指定した2点のスナップショット間にインスタンス再起動している場合、稼働統計情報がリセットされるため、AWRレポートは出力できません。(ORA-20200: The instance was shutdown between snapshots <開始SNAP_ID> and <終了SNAP_ID> が発生します)
なお、AWRレポートの出力方法は下記のような方法があります。
・Enterprise Manager
・$ORACLE_HOME/rdbms/admin/awrrpt.sql
DBMS_WORKLOAD_REPOSITORYパッケージ

AWR期間比較レポート
特定の2点のスナップショット間と別の期間の特定の2点のスナップショット間の稼働統計情報を比較してレポート出力したものです。
たとえば異常(性能劣化など)が発生した場合、異常時のAWRレポートだけ見ても問題の特定が難しい可能性が高いです。(出力されている数値の妥当性の判断が難しい)
そのような場合、平常時のスナップショットと異常時のスナップショットの比較が有効です。
なお、AWR期間比較レポートの出力方法は下記のような方法があります。
・Enterprise Manager
・$ORACLE_HOME/rdbms/admin/awrddrpt.sql

AWRベースライン
特定の時点のスナップショットのペアに名前を付けて保存したもの(スナップショットセット)です。
AWRベースラインのスナップショットは自動パージ対象外のため、保存期間を経過してもスナップショットの比較に使用できます。
たとえば正常時のスナップショットをベースラインとして登録しておき、通常のスナップショットの保存期間を過ぎたあとに異常(性能劣化など)が発生しても正常時と異常時のスナップショットの比較に使用できます。
なお、正常時に取得したAWRベースラインを適応しきい値として設定しておけばデータベースの状態に異常が発生した場合(ベースライン値と現在の値が大きく異なる場合)、アラートを受け取ることもできます。
ベースラインには3種類あります。
・固定ベースライン
過去の特定の期間のスナップショットから作成するベースライン
・変動ウィンドウベースライン
スナップショットの保存期間内で自動で作成・保存されるベースライン(デフォルトSYSTEM_MOVING_WINDOW)
・ベースラインテンプレート
過去ではなく、将来の任意の期間で作成されるベースライン
たとえば「1年を通して毎週月曜日の朝に自動でベースラインを作成する」という設定ができる
なお、AWRベースラインの取得方法は下記のような方法があります。
・Enterprise Manager
DBMS_WORKLOAD_REPOSITORYパッケージ

私が今まで経験した現場でもAWRの使用、AWRレポート出力はどの現場でも必ず要件になっていました。
手動のAWRレポート出力は経験がありますが、手動のAWR期間比較レポートやADDMは経験が無いため検証してみました。

■前提
・CONTROL_MANAGEMENT_PACK_ACCESS初期化パラメータはDIAGNOSTIC+TUNING
・STATISTICS_LEVEL初期化パラメータ初期化パラメータはTYPICAL
・スナップショットの取得間隔は10分、保存期間は8日間(デフォルト) ※検証用に取得間隔を変更
・2ノードRACのうち、レポートはインスタンス1分のみ出力

■検証環境
OS:Oracle Linux 6.5
DB/GI:Oracle Database 12c Release 1 (12.1.0.2.0) Enterprise Edition
※2ノードRAC(管理者管理型DB)

■検証パターン
①AWRレポート出力
②AWRレポート期間比較
③ADDMレポート出力
④AWRベースライン作成

■検証
①AWRレポート出力
手動によるAWRレポート出力(スクリプト使用)を検証します。

【検証手順】
1. AWRスナップショット確認
2. AWRレポート出力スクリプト実行
3. AWRレポート確認

【作業ログ】

1. AWRスナップショット確認
SQL> SELECT SNAP_ID, INSTANCE_NUMBER, TO_CHAR(BEGIN_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') BEGIN_TM, TO_CHAR(END_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') END_TM FROM DBA_HIST_SNAPSHOT ORDER BY SNAP_ID, INSTANCE_NUMBER;

   SNAP_ID INSTANCE_NUMBER BEGIN_TM                       END_TM
---------- --------------- ------------------------------ ------------------------------
        45               1 2023/04/07 09:43               2023/04/07 09:53
(略)
        47               1 2023/04/07 10:40               2023/04/07 10:50
        47               2 2023/04/07 10:40               2023/04/07 10:50
        48               1 2023/04/07 10:50               2023/04/07 11:00
        48               2 2023/04/07 10:50               2023/04/07 11:00
(略)
        50               2 2023/04/07 11:10               2023/04/07 11:20
★今回はSNAP_ID47と48のAWRレポートを出力します
★2ノードRACのため同一SNAP_IDが2つありますが、今回はインスタンス1のAWRレポートを出力します

2. AWRレポート出力スクリプト実行
SQL> --レポート出力前
SQL> !ls -l /home/oracle
合計 4
drwxrwx--- 6 oracle oinstall 4096  1月  3 10:41 2023 tmp

SQL> --レポート出力 「★」はユーザが入力する箇所です
SQL> @?/rdbms/admin/awrrpt.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
 1652947528 ORCL                1 orcl1


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に値を入力してください: html ★レポートの出力形式(HTML/TEXT)

Type Specified:                                  html


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
  1652947528        2 ORCL         orcl2        node2.oracle
                                                12c.jp
* 1652947528        1 ORCL         orcl1        node1.oracle
                                                12c.jp

Using 1652947528 for database Id
Using          1 for instance number


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing <return> without
specifying a number lists all completed snapshots.


num_daysに値を入力してください: 1 ★出力するスナップショット日数(1の場合、現在から過去1日分出力)

Listing the last day's Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
orcl1        ORCL                45 07 4月  2023 09:53     1
                                 46 07 4月  2023 10:40     1
                                 47 07 4月  2023 10:50     1
                                 48 07 4月  2023 11:00     1
                                 49 07 4月  2023 11:10     1

 

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin_snapに値を入力してください: 47 ★開始SNAP_ID
Begin Snapshot Id specified: 47

end_snapに値を入力してください: 48 ★終了SNAP_ID
End   Snapshot Id specified: 48

 

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrrpt_1_47_48.html.  To use this name,
press <return> to continue, otherwise enter an alternative.

report_nameに値を入力してください: test1_awrrpt_47_48.html ★レポート名(省略時はデフォルトのレポート名)

Using the report name test1_awrrpt.html

<html lang="en"><head><title>AWR Report for DB: ORCL, Inst: orcl1, Snaps: 47-48</title>
(略)
End of Report
</body></html>
Report written to test1_awrrpt.html

SQL> --レポート出力後
SQL> !ls -l /home/oracle
合計 660
-rw-r--r-- 1 oracle oinstall 669931  4月  7 11:18 2023 test1_awrrpt_47_48.html
drwxrwx--- 6 oracle oinstall   4096  1月  3 10:41 2023 tmp

 

3. AWRレポート確認
・HTML形式

・TEXT形式

RAC(全ノード分を取得する)の場合、$ORACLE_HOME/rdbms/admin/awrgrpt.sqlを使用します

②AWRレポート期間比較
出力した2つのAWRレポートを使用して、AWRレポート期間比較(スクリプト使用)を検証します。

【検証手順】
1. AWRスナップショット確認
2. AWR期間比較レポート出力スクリプト実行
3. AWR期間比較レポート確認

【作業ログ】

1. AWRスナップショット確認
SQL> SELECT SNAP_ID, INSTANCE_NUMBER, TO_CHAR(BEGIN_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') BEGIN_TM, TO_CHAR(END_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') END_TM FROM DBA_HIST_SNAPSHOT ORDER BY SNAP_ID, INSTANCE_NUMBER;

   SNAP_ID INSTANCE_NUMBER BEGIN_TM                       END_TM
---------- --------------- ------------------------------ ------------------------------
        45               1 2023/04/07 09:43               2023/04/07 09:53
(略)
        47               1 2023/04/07 10:40               2023/04/07 10:50
        47               2 2023/04/07 10:40               2023/04/07 10:50
        48               1 2023/04/07 10:50               2023/04/07 11:00
        48               2 2023/04/07 10:50               2023/04/07 11:00
(略)
        50               1 2023/04/07 11:10               2023/04/07 11:20
        50               2 2023/04/07 11:10               2023/04/07 11:20
        51               1 2023/04/07 11:20               2023/04/07 11:30
        51               2 2023/04/07 11:20               2023/04/07 11:30
(略)
        52               2 2023/04/07 11:30               2023/04/07 11:40
★今回はSNAP_ID47~48と50~51のスナップショットを比較します

2. AWR期間比較レポート出力スクリプト($ORACLE_HOME/rdbms/admin/awrddrpt.sql)実行
SQL> --レポート出力前
SQL> !ls -l /home/oracle
合計 1524
-rw-r--r-- 1 oracle oinstall 669931  4月  7 11:18 2023 test1_awrrpt_47_48.html
-rw-r--r-- 1 oracle oinstall 235701  4月  7 11:30 2023 test1_awrrpt_47_48.txt
drwxrwx--- 6 oracle oinstall   4096  1月  3 10:41 2023 tmp

SQL> --レポート出力 「★」はユーザが入力する箇所です
SQL> @?/rdbms/admin/awrddrpt.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id       DB Id    DB Name      Inst Num Inst Num Instance
----------- ----------- ------------ -------- -------- ------------
 1652947528  1652947528 ORCL                1        1 orcl1


Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Would you like an HTML report, or a plain text report?
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
report_typeに値を入力してください: html ★レポートの出力形式(HTML/TEXT)

Type Specified:                                  html


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
  1652947528        2 ORCL         orcl2        node2.oracle
                                                12c.jp
* 1652947528        1 ORCL         orcl1        node1.oracle
                                                12c.jp

Database Id and Instance Number for the First Pair of Snapshots
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Using 1652947528 for Database Id for the first pair of snapshots
Using          1 for Instance Number for the first pair of snapshots


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing <return> without
specifying a number lists all completed snapshots.


num_daysに値を入力してください: 1 ★出力するスナップショット日数(比較元)

Listing the last day's Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
orcl1        ORCL                45 07 4月  2023 09:53     1
                                 46 07 4月  2023 10:40     1
                                 47 07 4月  2023 10:50     1
                                 48 07 4月  2023 11:00     1
                                 49 07 4月  2023 11:10     1
                                 50 07 4月  2023 11:20     1
                                 51 07 4月  2023 11:30     1
                                 52 07 4月  2023 11:40     1

 

Specify the First Pair of Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin_snapに値を入力してください: 47 ★開始SNAP_ID(比較元)
First Begin Snapshot Id specified: 47

end_snapに値を入力してください: 48 ★終了SNAP_ID(比較元)
First End   Snapshot Id specified: 48

 


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
  1652947528        2 ORCL         orcl2        node2.oracle
                                                12c.jp
* 1652947528        1 ORCL         orcl1        node1.oracle
                                                12c.jp

 


Database Id and Instance Number for the Second Pair of Snapshots
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Using 1652947528 for Database Id for the second pair of snapshots
Using          1 for Instance Number for the second pair of snapshots


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing <return> without
specifying a number lists all completed snapshots.


num_days2に値を入力してください: 1 ★出力するスナップショット日数(比較先)

Listing the last day's Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
orcl1        ORCL                45 07 4月  2023 09:53     1
                                 46 07 4月  2023 10:40     1
                                 47 07 4月  2023 10:50     1
                                 48 07 4月  2023 11:00     1
                                 49 07 4月  2023 11:10     1
                                 50 07 4月  2023 11:20     1
                                 51 07 4月  2023 11:30     1
                                 52 07 4月  2023 11:40     1

 

Specify the Second Pair of Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin_snap2に値を入力してください: 50 ★開始SNAP_ID(比較先)
Second Begin Snapshot Id specified: 50

end_snap2に値を入力してください: 51 ★終了SNAP_ID(比較先)
Second End   Snapshot Id specified: 51

 

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is awrdiff_1_47_1_50.html  To use this name,
press <return> to continue, otherwise enter an alternative.

report_nameに値を入力してください: test2_awrdiff_47_48vs50_51.html ★レポート名(省略時はデフォルトのレポート名)

Using the report name test2_awrdiff_47_48vs50_51.html


<html lang="en"><head><title>AWR Compare Period Report for (1) DB: ORCL, Inst: orcl1, Snaps: 47-48 (2) DB: ORCL, Inst: orcl1, Snaps: 50-51</title>
(略)
<p />
</body></html>
Report written to test2_awrdiff_47_48vs50_51.html

SQL> --レポート出力後
SQL> !ls -l /home/oracle
合計 2832
-rw-r--r-- 1 oracle oinstall  669931  4月  7 11:18 2023 test1_awrrpt_47_48.html
-rw-r--r-- 1 oracle oinstall  235701  4月  7 11:30 2023 test1_awrrpt_47_48.txt
-rw-r--r-- 1 oracle oinstall 1338043  4月  7 12:31 2023 test2_awrdiff_47_48vs50_51.html
drwxrwx--- 6 oracle oinstall    4096  1月  3 10:41 2023 tmp

 

3. AWR期間比較レポート確認

※AWR期間比較レポートのサンプルはHTML形式のみ
RAC(全ノード分を取得する)の場合、$ORACLE_HOME/rdbms/admin/awrgdrpt.sqlを使用します

③ADDMレポート出力
手動によるADDMレポート出力(スクリプト使用)を検証します。

【検証手順】
1. AWRスナップショット確認
2. ADDMレポート出力スクリプト実行
3. ADDMレポート確認

【作業ログ】

1. AWRスナップショット確認
SQL> SELECT SNAP_ID, INSTANCE_NUMBER, TO_CHAR(BEGIN_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') BEGIN_TM, TO_CHAR(END_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') END_TM FROM DBA_HIST_SNAPSHOT ORDER BY SNAP_ID, INSTANCE_NUMBER;

   SNAP_ID INSTANCE_NUMBER BEGIN_TM                       END_TM
---------- --------------- ------------------------------ ------------------------------
        45               1 2023/04/07 09:43               2023/04/07 09:53
(略)
        47               1 2023/04/07 10:40               2023/04/07 10:50
        47               2 2023/04/07 10:40               2023/04/07 10:50
        48               1 2023/04/07 10:50               2023/04/07 11:00
        48               2 2023/04/07 10:50               2023/04/07 11:00
(略)
        52               2 2023/04/07 11:30               2023/04/07 11:40
★今回はSNAP_ID47と48のADDMレポートを出力します

2. ADDMレポート出力スクリプト実行
SQL> --レポート出力前
SQL> !ls -l /home/oracle
合計 4236
-rw-r--r-- 1 oracle oinstall  669931  4月  7 11:18 2023 test1_awrrpt_47_48.html
-rw-r--r-- 1 oracle oinstall  235701  4月  7 11:30 2023 test1_awrrpt_47_48.txt
-rw-r--r-- 1 oracle oinstall 1338043  4月  7 12:31 2023 test2_awrdiff_47_48vs50_51.html
drwxrwx--- 6 oracle oinstall    4096  1月  3 10:41 2023 tmp

SQL> --レポート出力 「★」はユーザが入力する箇所です
SQL> @?/rdbms/admin/addmrpt.sql

Current Instance
~~~~~~~~~~~~~~~~

   DB Id    DB Name      Inst Num Instance
----------- ------------ -------- ------------
 1652947528 ORCL                1 orcl1


Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   DB Id     Inst Num DB Name      Instance     Host
------------ -------- ------------ ------------ ------------
  1652947528        2 ORCL         orcl2        node2.oracle
                                                12c.jp
* 1652947528        1 ORCL         orcl1        node1.oracle
                                                12c.jp

Using 1652947528 for database Id
Using          1 for instance number


Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed.  Pressing <return> without
specifying a number lists all completed snapshots.

 

Listing the last 3 days of Completed Snapshots

                                                        Snap
Instance     DB Name        Snap Id    Snap Started    Level
------------ ------------ --------- ------------------ -----
orcl1        ORCL                45 07 4月  2023 09:53     1
                                 46 07 4月  2023 10:40     1
                                 47 07 4月  2023 10:50     1
                                 48 07 4月  2023 11:00     1
                                 49 07 4月  2023 11:10     1
                                 50 07 4月  2023 11:20     1
                                 51 07 4月  2023 11:30     1
                                 52 07 4月  2023 11:40     1

 

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin_snapに値を入力してください: 47 ★開始SNAP_ID
Begin Snapshot Id specified: 47

end_snapに値を入力してください: 48 ★終了SNAP_ID
End   Snapshot Id specified: 48

 

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is addmrpt_1_47_48.txt.  To use this name,
press <return> to continue, otherwise enter an alternative.

report_nameに値を入力してください: test3_addmrpt_47_48.txt ★レポート名(省略時はデフォルトのレポート名)

Using the report name test3_addmrpt_47_48.txt


Running the ADDM analysis on the specified pair of snapshots ...
(略)
End of Report
Report written to test3_addmrpt_47_48.txt

SQL> --レポート出力後
SQL> !ls -l /home/oracle
合計 4240
-rw-r--r-- 1 oracle oinstall  669931  4月  7 11:18 2023 test1_awrrpt_47_48.html
-rw-r--r-- 1 oracle oinstall  235701  4月  7 11:30 2023 test1_awrrpt_47_48.txt
-rw-r--r-- 1 oracle oinstall 1338043  4月  7 12:31 2023 test2_awrdiff_47_48vs50_51.html
-rw-r--r-- 1 oracle oinstall    1312  4月  7 14:06 2023 test3_addmrpt_47_48.txt
drwxrwx--- 6 oracle oinstall    4096  1月  3 10:41 2023 tmp

 

3. ADDMレポート確認

※ADDMレポートはHTML形式は指定できませんでした

④AWRベースライン作成
手動によるAWRベースライン作成を検証します。

【検証手順】
1. AWRスナップショット確認
2. AWRベースライン確認(ベースライン作成前)
3. AWRベースライン作成
4. AWRベースライン確認(ベースライン作成後)
5. AWRベースライン確認(保存期間経過後)
6. AWRスナップショット確認(保存期間経過後)

【作業ログ】

1. AWRスナップショット確認
SQL> SELECT SNAP_ID, INSTANCE_NUMBER, TO_CHAR(BEGIN_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') BEGIN_TM, TO_CHAR(END_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') END_TM FROM DBA_HIST_SNAPSHOT ORDER BY SNAP_ID, INSTANCE_NUMBER;

   SNAP_ID INSTANCE_NUMBER BEGIN_TM                       END_TM
---------- --------------- ------------------------------ ------------------------------
        45               1 2023/04/07 09:43               2023/04/07 09:53
        45               2 2023/04/07 09:42               2023/04/07 09:53
        46               1 2023/04/07 09:53               2023/04/07 10:40
(略)
        51               2 2023/04/07 11:20               2023/04/07 11:30
        52               1 2023/04/07 11:30               2023/04/07 11:40
        52               2 2023/04/07 11:30               2023/04/07 11:40

2. AWRベースライン確認(ベースライン作成前)
SQL> SELECT BASELINE_ID, BASELINE_NAME, BASELINE_TYPE, START_SNAP_ID, END_SNAP_ID, CREATION_TIME FROM DBA_HIST_BASELINE ORDER BY BASELINE_ID;

BASELINE_ID BASELINE_NAME                  BASELINE_TYPE        START_SNAP_ID END_SNAP_ID CREATION_TIME
----------- ------------------------------ -------------------- ------------- ----------- -------------------
          0 SYSTEM_MOVING_WINDOW           MOVING_WINDOW                   45          58 2023-01-03 18:19:59
※MOVING_WINDOW:Oracleで自動で取得されている開始SNAP_IDと終了SNAP_IDのスナップショットを含むベースライン

3. AWRベースライン作成
SQL> BEGIN
  2    DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (start_snap_id => 47,
  3                                              end_snap_id   => 48,
  4                                              baseline_name => 'TEST_BASELINE_47_48');
  5  END;
  6  /

PL/SQLプロシージャが正常に完了しました。

4. AWRベースライン確認(ベースライン作成後)
SQL> SELECT BASELINE_ID, BASELINE_NAME, BASELINE_TYPE, START_SNAP_ID, END_SNAP_ID, CREATION_TIME FROM DBA_HIST_BASELINE ORDER BY BASELINE_ID;

BASELINE_ID BASELINE_NAME                  BASELINE_TYPE        START_SNAP_ID END_SNAP_ID CREATION_TIME
----------- ------------------------------ -------------------- ------------- ----------- -------------------
          0 SYSTEM_MOVING_WINDOW           MOVING_WINDOW                   45          58 2023-01-03 18:19:59
          1 TEST_BASELINE_47_48            STATIC                          47          48 2023-04-07 14:25:53
※STATIC:ユーザが手動で作成したベースライン

5. AWRベースライン確認(保存期間経過後)
ベースライン作成日:2023/4/7
ベースライン確認日:2023/4/30

SQL> SELECT BASELINE_ID, BASELINE_NAME, BASELINE_TYPE, START_SNAP_ID, END_SNAP_ID, CREATION_TIME FROM DBA_HIST_BASELINE ORDER BY BASELINE_ID;

BASELINE_ID BASELINE_NAME                  BASELINE_TYPE        START_SNAP_ID END_SNAP_ID CREATION_TIME
----------- ------------------------------ -------------------- ------------- ----------- -------------------
          0 SYSTEM_MOVING_WINDOW           MOVING_WINDOW                   60          60 2023-01-03 18:19:59
          1 TEST_BASELINE_47_48            STATIC                          47          48 2023-04-07 14:25:53
★保存期間経過後も作成したベースライン(TEST_BASELINE_47_48)は残っている

6. AWRスナップショット確認(保存期間経過後)
SQL> SELECT SNAP_ID, INSTANCE_NUMBER, TO_CHAR(BEGIN_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') BEGIN_TM, TO_CHAR(END_INTERVAL_TIME, 'YYYY/MM/DD HH24:MI') END_TM FROM DBA_HIST_SNAPSHOT ORDER BY SNAP_ID, INSTANCE_NUMBER;

   SNAP_ID INSTANCE_NUMBER BEGIN_TM                       END_TM
---------- --------------- ------------------------------ ------------------------------
        47               1 2023/04/07 10:40               2023/04/07 10:50
        47               2 2023/04/07 10:40               2023/04/07 10:50
        48               1 2023/04/07 10:50               2023/04/07 11:00
        48               2 2023/04/07 10:50               2023/04/07 11:00
★保存期間経過後もベースラインに登録したスナップショット(開始SNAP_ID47、終了SNAP_ID48)は残っている

 

■参考資料
AWRを基本からおさらいしよう - Speaker Deck
オラクルマスター教科書 Gold DBA Oracle Database AdministrationⅡ
オラクルマスター教科書 ORACLE MASTER Expert パフォーマンス・チューニング編
ORACLE MASTER Oracle Database 11g Gold(Gold DBA11g)(試験番号:1Z0-053)完全詳解+精選問題集(オラクルマスタースタディガイド)
Oracleの現場を効率化する100の技

■おわりに
性能問題が発生した場合、AWRレポートを確認するというのが定石の1つだと思いますが、AWRレポートでは調査が難しい状況もあります。
たとえば下記のような状況です。
・AWRレポートは定期的に取得される稼働統計情報をもとに過去の性能を分析するためのものであり、現在のデータベースの性能状況は確認できない
・AWRレポートは2点の差分をもとにデータをサマリして出力するため、「1分程度の間パフォーマンスが悪かった」、「数十秒の間、CPUが高騰していた」など細かい情報はAWRレポートに目立った数値として現れない可能性がある
スナップショット間隔を短くするという対応も考えられますが、スナップショット取得の負荷の増加やAWRスナップショット量が増加(SYSAUX表領域の肥大化)するなど影響があるため、お勧めできません。
このような細かい情報を確認する場合、ASH(Active Session History)が有効です。(Oracle Diagnostics Packライセンスが必要)
ASHは1秒間隔でアクティブなセッションに関わる稼働統計情報を自動で取得します。
ASHやAWRレポートの詳しい読み方は別の機会に調査してみようと思います。