X

A blog about Oracle Technology Network Japan

第13回 AWRレポート作成とAWRスナップショット取得(CDB全体)

基本からわかる!高性能×高可用性データベースシステムの作り方 indexページ

第12回では、Oracle Databaseの性能分析をするとき、何を調べるときにどんなツールがあるかを俯瞰しました。今回はその1つ、AWRレポートの作成とAWRスナップショットの取得に関するコマンドラインでの操作についてです。「AWRレポートを提供してください」と言われたときに最低限知っておくべきことに絞って説明します。

AWRレポートとは

Automatic Workload Repositoryとは、Oracle Database 10gで導入されたOracleインスタンス全体の実行統計を取得する仕組みです。AWRの機能を使用するためにはEnterprise EditionのDiagnostics Packのライセンスが必要です。Oracle初期化パラメータcontrol_management_pack_accessがDIAGNOSTICS+TUNING(デフォルト)もしくはDIAGNOSTICSである必要があります。

SQL> SHOW PARAMETERS control_management_pack_access

NAME                                 TYPE    VALUE
------------------------------------ ------- -------------------
control_management_pack_access       string  DIAGNOSTIC+TUNING

 

Oracleインスタンスは起動している間、使用したCPU時間やI/O量などの実行統計値を観測しています。AWRスナップショットとは、Oracleインスタンスが起動されてからの累積実行統計値を特定時刻で表にINSERTしたものです。CREATE DATABASEした時点で、デフォルトでAWRスナップショットが1時間に1回取得されるように設定されています。AWRレポートとは、指定した2点のAWRスナップショット間の実行統計を、人間が読むのに適した形に整形したHTMLもしくはテキスト形式のファイルです。
 
AWRレポートの作成に指定する2点は連続している必要はなく、離れていてもかまいません。例えば24時間離れた2点を指定すると、1日の平均アクティビティを調べることができます。ただし、Oracleインスタンスを停止してしまうと実行統計がリセットされてしまうため、Oracleインスタンス再起動をまたいだ2点を指定したAWRレポートは無効です。
一般的には、性能分析には24時間といった長時間の平均値はあまり役に立ちません。そのため、多くの場合は分析したい時間帯に絞った連続した2点間のAWRレポートを作成することになります。

AWRレポートの作成コマンド

AWRレポートの作成にはsqlplusでOracleインスタンスに接続し、AWRレポート作成のSQLスクリプトを実行します。AWRレポートはHTMLもしくはテキスト形式のファイルとして出力されますが、そのファイルはsqlplusを起動したカレント・ディレクトリに作成されるため、ファイルを出力させたいディレクトリに移動してからsqlplusを起動します。管理者権限(SYSまたはSYSTEMユーザー)でログインします。

$ sqlplus / as sysdba

コンテナ・データベース構成でこの方法でログインすると、CDB$ROOTにログインしたことになります。CDB$ROOTでAWRレポートを作成すると、Oracleインスタンス全体の、つまりこのコンテナ・データベース上のすべてのプラガブル・データベース(PDB)の統計が出力されます。Oracle Database 12c Release 2からPDBごとのAWRスナップショットの取得やAWRレポートの作成ができるようになっています。今回はPDBごとのAWRの説明はしません。以下の説明はすべてコンテナ・データベース全体の場合のものです。

AWRレポート作成のSQLスクリプトにはいくつかあるのですが、もっとも基本的なものがawrrpt.sqlです。awrrpt.sqlはログインしたデータベースのDBIDとOracleインスタンスでのAWRスナップショットからAWRレポートを作成します。クラスタ構成のOracle Real Application Clusters(RAC)は複数のOracleインスタンスが1つのデータベースをマウントしています。RACでawrrpt.sqlを実行すると、そのsqlplusが接続している1つのOracleインスタンスのAWRレポートを作成します。
sqlplusは@マークを付けたテキストファイルを読み取りそこに記述されているSQLスクリプトを実行します。awrrpt.sqlは$ORACLE_HOME/rdbms/admin/ディレクトリにあります。sqlplusは”?”の記号をORACLE_HOMEのディレクトリと解釈するため以下のように記述できます。

SQL> @?/rdbms/admin/awrrpt

awrrpt.sqlを実行するとまず出力するファイル形式を問われます。デフォルトはHTML形式です。

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ではなくデフォルトのhtmlをお勧めします。text形式はコピー&ペーストして報告書の作成などには便利ですが、長いSQL文が途中で省略されてしまいます。HTML形式はSQLが全文出力されます。「AWRレポートを提供してください」と言われたときは(デフォルトの)HTML形式のことだと思っておくとよいでしょう。

Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  DB Id      Inst Num   DB Name      Instance     Host
------------ ---------- ---------    ----------   ------
  1650164401     2      RAC19B       rac19bst2    ptvm37.jp.or
* 1650164401     1      RAC19B       rac19bst1    ptvm36.jp.or

Using 1650164401 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に値を入力してください:

ファイル形式の次はDBIDとOracleインスタンスの指定です。awrrpt.sqlの場合はこれらが今接続しているOracleインスタンスに決め打ちです。
次に入力するnum_daysは何日前のAWRスナップショットまでさかのぼってリストに出すかです。何も入力せずにreturnを押すと記録が残っているすべてのAWRスナップショットがリストされます。以下の例では直近の1日分を出すために1と指定しています。

num_daysに値を入力してください: 1

Listing the last day's Completed Snapshots
Instance     DB Name      Snap Id       Snap Started    Snap Level
------------ ------------ ---------- ------------------ ----------

rac19bst1    RAC19B            3191  09 10月 2019 00:00   1
                               3192  09 10月 2019 01:00   1
                               3193  09 10月 2019 02:00   1
                               3194  09 10月 2019 03:00   1
                               3195  09 10月 2019 04:00   1
                               3196  09 10月 2019 05:00   1
                               3197  09 10月 2019 06:00   1
                               3198  09 10月 2019 07:00   1
                               3199  09 10月 2019 08:00   1
                               3200  09 10月 2019 09:00   1
                               3201  09 10月 2019 10:00   1
                               3202  09 10月 2019 11:00   1
                               3203  09 10月 2019 12:00   1
                               3204  09 10月 2019 13:00   1
                               3205  09 10月 2019 14:00   1
                               3206  09 10月 2019 15:00   1
                               3207  09 10月 2019 16:00   1

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin_snapに値を入力してください:

num_daysを入力するとAWRスナップショットを取得した時刻とそのSnap Idが列挙されます。このSnap Idを2つ指定した間のAWRレポートが作成されます。begin_snapにはレポートする開始時刻のSnap Idを入力します。end_snapは終了時刻のSnap Idです。

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin_snapに値を入力してください: 3206
Begin Snapshot Id specified: 3206

end_snapに値を入力してください: 3207
End   Snapshot Id specified: 3207


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

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

最後に出力するファイル名を入力します。デフォルトの名前は指定したSnap Idから生成されています。enterを押すとAWRレポートが生成されます。画面にはHTMLが流れますが、それがsqlplusを起動したカレント・ディレクトリにファイルとして記録されます。

<p />
<p />End of Report
</body></html>

Report written to awrrpt_1_3206_3207.html
SQL>

これでAWRレポートが生成されました。sqlplusからexitするとカレント・ディレクトリに指定したファイル名で出力されています。

$ ls *.html
awrrpt_1_3206_3207.html

自動取得されるAWRスナップショットの制御

ここからは、AWRスナップショットの取得を制御する方法について説明します。Oracle Database Enterprise Editionでは、デフォルトでAWRスナップショットが定期的に取得されており、それは1時間ごとで保存期間は8日です。その設定はDBA_HIST_WR_CONTROLビューで確認することができます。

SQL> SELECT SNAP_INTERVAL,RETENTION FROM DBA_HIST_WR_CONTROL;

SNAP_INTERVAL        RETENTION
-------------------- --------------------
+00000 01:00:00.0    +00008 00:00:00.0

本番運用するデータベースでは、性能問題が発生した場合に、過去の問題がなかった時点の性能統計と比較することが問題個所の特定に役立つことがあります。保存期間をデフォルトの8日よりもかなり大きな値にしておくのはよくある運用です。また、取得間隔は狭いほどその時間帯の事象の解像度があがります。そのため自動取得される間隔をデフォルトの1時間よりも短い15分や30分にするのもまたよくある運用です。
AWRスナップショットの自動取得間隔と保存期間を変更するにはDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGSプロシージャを使用します。設定単位は分です。以下の例は取得間隔(interval)を30分、保存期間(retention)を44640分(=60分×24時間×31日)に設定しています。

SQL> EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS (interval=>30,retention=>44640);

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

SQL> SELECT SNAP_INTERVAL,RETENTION FROM DBA_HIST_WR_CONTROL;

SNAP_INTERVAL        RETENTION
-------------------- --------------------
+00000 00:30:00.0    +00031 00:00:00.0

AWRスナップショットの手動取得

性能テストを行うような場合、テスト開始と終了の間の時間帯に限定したAWRレポートを作成したくなります。そのためにはテストの開始と終了の時点でAWRスナップショットを取得しておきます。DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOTプロシージャを実行すると、その時点のAWRスナップショットが取得されます。

SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT;

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

Webでよくみかけるのはこのプロシージャ実行の方法です。
AWRレポートを作成するにはスナップショットIDの指定が必要になりますが、レポートを作成するためにawrrpt.sqlを実行したときに取得時刻とスナップショットIDを目視で突合するのは少し不便です。CREATE_SNAPSHOTには実はプロシージャだけではなく、ファンクションもあります。この「ファンクション」の戻り値はスナップショットIDです。そのため、以下のSELECT文を実行するとAWRスナップショットが取得され、そのスナップショットIDが返ります。

SQL> SELECT DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT() FROM DUAL;

DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT()
------------------------------------------
                                      3258

まとめ

今回は「AWRレポートを提供してください」と言われたときに最低限知っておくべきことに絞って説明しました。
AWRレポートを作成するためには管理者権限(SYSまたはSYSTEMユーザー)でログインし、SQLスクリプト$ORACLE_HOME/rdbms/admin/awrrpt.sqlを実行します。ファイル形式はtextと依頼されない限りデフォルトのHTMLがよいでしょう。レポートを作成したい時間帯の開始と終了の2点のスナップショットIDを指定します。

基本からわかる!高性能×高可用性データベースシステムの作り方 indexページ

 

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.