基本からわかる!高性能×高可用性データベースシステムの作り方 indexページ
第13回ではCDB全体のAWRレポートの作成とAWRスナップショットの取得に関するコマンドラインでの操作について説明しました。今回はPDB単位でのAWRについてです。Oracle Database 12c Release 2からはPDB単位でもAWRレポートを作成できるようになっています。CDB全体とは異なり、PDB単位のAWRスナップショット取得はデフォルトでは有効になっていません。
PDB単位のAWRスナップショット自動取得の有効化
CDB全体のAWRスナップショット取得はCREATE DATABASEした時点でデフォルトで有効になっています。CDB全体で作成したAWRレポートにはすべてのPDBのアクティビティが混在して記載されます。しかし、PDB単位のAWRスナップショットの自動取得はデフォルトでは無効になっています。
PDB単位のAWRスナップショット自動取得を有効にするには初期化パラメータAWR_PDB_AUTOFLUSH_ENABLEDをTRUEに設定します。この設定には2階層あって、CDB$ROOTで設定するとすべてのPDBで有効になります。個別のPDBで設定するとそのPDBでのみ有効になります。
SQL> SHOW PDBS CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 SIPDB19A1 READ WRITE NO 4 SIPDB19A2 READ WRITE NO SQL> ALTER SESSION SET CONTAINER=SIPDB19A1; セッションが変更されました。 SQL> ALTER SYSTEM SET AWR_PDB_AUTOFLUSH_ENABLED = TRUE; システムが変更されました。 SQL> SHOW PARAMETERS AWR_PDB_AUTOFLUSH_ENABLED NAME TYPE VALUE ------------------------------------ --------------------------------- ------------------------------ awr_pdb_autoflush_enabled boolean TRUE
PDBごとのAWRスナップショットの取得間隔と保存期間の設定はPDBごとに設定でき、CDB全体の場合と同じくDBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGSプロシージャを使用します。各PDB上で実行し、設定単位は分です。以下の例は取得間隔(interval)を10分、保存期間(retention)を44640分(=60分×24時間×31日)に設定しています。
SQL> EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS (interval=>10,retention=>44640); PL/SQLプロシージャが正常に完了しました。
設定の確認はAWR_PDB_WR_CONTROLビューを見ます。
SQL> SELECT CON_ID,SNAP_INTERVAL,RETENTION FROM AWR_PDB_WR_CONTROL; CON_ID SNAP_INTERVAL RETENTION ---------- -------------------- -------------------- 3 +00000 00:10:00.0 +00031 00:00:00.0
PDB単位でのAWRスナップショットの手動取得もCDB全体の場合と同じくDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOTプロシージャまたはファンクションを実行します。個別のPDB上で実行するとそのPDBのAWRスナップショットが作成されます。ファンクションをSELECT文で実行するとAWRスナップショットIDが返されるのはCDB全体の場合と同じです。PDBごとのAWRスナップショットIDはAWR_PDB_SNAPSHOTビューで調べることができます。
SQL> SELECT DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT() FROM DUAL; DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT() ------------------------------------------ 14 SQL> SELECT MAX(SNAP_ID) FROM AWR_PDB_SNAPSHOT; MAX(SNAP_ID) ------------ 14
PDB単位でのAWRスナップショットIDはPDBごとに独立したシーケンスです。CDB全体のスナップショットIDとも異なります。
PDB単位のAWRレポートの作成コマンド
PDB単位のAWRレポートの作成にはsqlplusでOracleインスタンスに接続し、該当のPDBにログインしてAWRレポート作成のSQLスクリプトを実行します。CDB全体の場合と異なるのは個別のPDB上でSQLスクリプトを実行するというところです。
AWRレポートはHTMLもしくはテキスト形式のファイルとして出力されますが、そのファイルはsqlplusを起動したカレント・ディレクトリに作成されるため、ファイルを出力させたいディレクトリに移動してからsqlplusを起動します。管理者権限でログインします。
$ sqlplus / as sysdba SQL> ALTER SESSION SET CONTAINER=SIPDB19A1; セッションが変更されました。
AWRレポート作成のSQLスクリプトもCDB全体の場合と同じで、もっとも基本的なものがawrrpt.sqlです。awrrpt.sqlはログインしたデータベースのDBIDとOracleインスタンスでのAWRスナップショットからAWRレポートを作成します。CDB全体の場合と異なり、途中でPDB単位のレポートを作成するかが問われます。
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に値を入力してください:
旧 1: select 'Type Specified: ',lower(nvl('&&report_type','html')) report_type from dual
新 1: select 'Type Specified: ',lower(nvl('','html')) report_type from dual
Type Specified: html
ファイル形式はtextではなくデフォルトのhtmlをお勧めします。text形式はコピー&ペーストして報告書の作成などには便利ですが、長いSQL文が途中で省略されてしまいます。HTML形式はSQLが全文出力されます。「AWRレポートを提供してください」と言われたときは(デフォルトの)HTML形式のことだと思っておくとよいでしょう。
次にPDB単位のレポートを作成するかが問われます。PDB単位のレポートを作成するので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 Location of AWR Data Specified: AWR_PDB
次はDBIDとOracleインスタンスの指定です。awrrpt.sqlの場合はこれらが今接続しているOracleインスタンスに決め打ちです。
Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance Container Name -------------- -------------- -------------- -------------- -------------- 4081308537 SIDB19A 1 sidb19a SIPDB19A1 Root DB Id Container DB Id AWR DB Id --------------- --------------- --------------- 4140346382 4081308537 4081308537 Instances in this Workload Repository schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host ------------ ---------- --------- ---------- ------ 4081308537 1 SIDB19A sidb19a jphppt07.jp. Using 4081308537 for database Id Using 1 for instance number
次に入力するnum_daysは何日前のAWRスナップショットまでさかのぼってリストに出すかです。何も入力せずにreturnを押すと記録が残っているすべてのAWRスナップショットがリストされます。以下の例では直近の1日分を出すために1と指定しています。
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 Instance DB Name Snap Id Snap Started Snap Level ------------ ------------ ---------- ------------------ ---------- sidb19a SIDB19A 7 13 11月 2019 13:49 1 8 13 11月 2019 13:53 1
num_daysを入力するとAWRスナップショットを取得した時刻とそのSnap Idが列挙されます。2つのSnap Idを指定した間のAWRレポートが作成されます。begin_snapにはレポートする開始時刻のSnap Idを入力します。end_snapは終了時刻のSnap Idです。
Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ begin_snapに値を入力してください: 7 Begin Snapshot Id specified: 7 end_snapに値を入力してください: 8 End Snapshot Id specified: 8
最後に出力するファイル名を入力します。デフォルトの名前は指定したSnap Idから生成されています。enterを押すとAWRレポートが生成されます。画面にはHTMLが流れますが、それがsqlplusを起動したカレント・ディレクトリにファイルとして記録されます。
Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is awrrpt_1_7_8.html. To use this name, press <return> to continue, otherwise enter an alternative. report_nameに値を入力してください: Using the report name awrrpt_1_7_8.html
<p /> <p /> <p /> End of Report </body></html> Report written to awrrpt_1_7_8.html SQL> exit
これでAWRレポートが生成されました。sqlplusからexitするとカレント・ディレクトリに指定したファイル名で出力されています。
基本からわかる!高性能×高可用性データベースシステムの作り方 indexページ
