こんにちは!シミダイ(@shimidai2100)です。
AWR(Automatic Workload Repository)の各種設定方法を紹介します。
AWRとはOracle Databaseの稼働統計とワークロード情報のスナップショットを自動的に収集・管理する機能です。
この記事ではスナップショットの取得間隔・保存期間や取得レベル、またAWRの有効化・無効化方法を紹介します。
なおAWR利用には「Diagnostic Pack」のライセンスが追加で必要になります。
Contents
AWRの有効化・無効化設定:CONTROL_MANAGEMENT_PACK_ACCESS
AWRを使用するためには、「Diagnostics Pack」ライセンスが必要になります。
「Diagnostics Pack」ライセンスを制御している初期化パラメータは「CONTROL_MANAGEMENT_PACK_ACCESS」です。
「CONTROL_MANAGEMENT_PACK_ACCESS」を変更することで有効・無効を制御しますが、
このパラメータは「Turning Pack」ライセンスと共存して使用する点に注意してください。
Enterprise EditionのデータベースではAWRは有効化されていますが、稀に意識してAWRの機能を無効化しているデータベースがあります。
- 「Diagnostics Pack」ライセンスと「Turning Pack」ライセンスを有効化するSQLです。
1 |
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = "DIAGNOSTIC+TUNING" scope = SPFILE; |
- 「Diagnostics Pack」ライセンスを有効化するSQLです。
1 |
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = "DIAGNOSTIC" scope = SPFILE; |
- 「Diagnostics Pack」ライセンスを無効化するSQLです。
1 |
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = "NONE" scope = SPFILE; |
上記のSQL実行後にデータベースの再起動を忘れずに行いましょう。
※ Diagnostics Packを使用していないとAWR、Turing Packを使用しないとSQLアドバイザーなどは使用できません。有効化されているだけではライセンス料は発生しないはずです。。。
統計情報の取得レベルを変更:STATISTICS_LEVEL
AWRで取得される統計情報を取得レベルを制御するのは「STATISTICS_LEVEL」になります。
以下設定値とその意味になります。
設置値 | 説明 |
---|---|
TYPICAL | データベースの自動管理機能で必要とされる主要統計が収集。 |
BASIC | TYPICALから以下の項目が取得されなくなる ・自動ワークロード・リポジトリ(AWR)・スナップショット ・自動データベース診断モニター(ADDM) ・サーバー生成の全アラート ・自動SGAメモリー管理 ・自動オプティマイザ統計収集 ・オブジェクト・レベルの統計 ・エンドツーエンドのアプリケーション・トレース(V$CLIENT_STATS) ・データベースの時間配分統計(V$SESS_TIME_MODELおよびV$SYS_TIME_MODEL) ・サービス・レベルの統計 ・バッファ・キャッシュ・アドバイザ ・MTTRアドバイザ ・共有プール・サイジング・アドバイザ ・セグメント・レベルの統計 ・PGAターゲット・アドバイザ ・時刻に関連する統計 ・統計の監視 |
ALL | TYPICALに追加で以下の項目が取得される ・時刻に関連する統計 ・時刻に関連するオペレーティング・システム統計 ・計画実行統計 |
基本的にはデフォルトの「TYPICAL」を設定すれば十分な情報を取得できます。
以下が設定SQLになります。
1 |
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = "NONE" scope = BOTH; |
スナップショットの取得間隔と保存期間を設定:DBMS_WORKLOAD_REPOSITORY
AWRに取得間隔と保存期間を設定するには、「DBMS_WORKLOAD_REPOSITORY」プロシージャを使用します。
以下がプロシージャの使用方法です。
1 2 3 4 5 6 |
begin DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( interval => <取得間隔を分で指定>, retention => <保存期間を分で指定>; end; / |
- 「interval」は取得間隔を指定
- 「retention」は保存期間を指定
どちらもの整数で指定し単位は”分”で指定します。
下が取得期間を「30分」、保存期間を「30日(60×24時間×30日 = 43200分)」に設定した例です。
1 2 3 4 5 6 |
begin DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( interval => 30, retention => 43200); end; / |
また以下が設定確認のSQLになります。
1 2 3 4 |
select DBID, SNAP_INTERVAL, RETENTION from DBA_HIST_WR_CONTROL; |
以下が出力例です。
DBID SNAP_INTERVAL RETENTION
-------------- --------------------- ---------------------------------------------------------------------------
1469414445 +00000 00:30:00.0 +00030 00:00:00.0
「SNAP_INTERVAL」、「RETENTION」の左側が日数で右側が時間です。
※ 保存期間を無期限にする場合にはマニュアル”0”にするとなっていますが、
うまく動作しませんでしたので、最大値の100年の「150000」を設定することをオススメします。