OracleDB

[OracleDB] AWRの設定方法。取得間隔・保存期間や取得レベルは何を設定すべきか?

2018年7月11日

こんにちは!土門大貴(daikidomon)です。

AWR(Automatic Workload Repository)の各種設定方法を紹介します。

AWRとはOracle Databaseの稼働統計とワークロード情報のスナップショットを自動的に収集・管理する機能です。

この記事ではスナップショットの取得間隔・保存期間取得レベル、またAWRの有効化・無効化方法を紹介します。

なおAWR利用には「Diagnostic Pack」のライセンスが追加で必要になります。

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です。
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = "DIAGNOSTIC+TUNING" scope = SPFILE;
  • Diagnostics Pack」ライセンスを有効化するSQLです。
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = "DIAGNOSTIC" scope = SPFILE;
  • Diagnostics Pack」ライセンスを無効化するSQLです。
alter system set CONTROL_MANAGEMENT_PACK_ACCESS = "NONE" scope = SPFILE;

上記のSQL実行後にデータベースの再起動を忘れずに行いましょう。

※ Diagnostics Packを使用していないとAWR、Turing Packを使用しないとSQLアドバイザーなどは使用できません。有効化されているだけではライセンス料は発生しないはずです。。。

統計情報の取得レベルを変更:STATISTICS_LEVEL

AWRで取得される統計情報を取得レベルを制御するのは「STATISTICS_LEVEL」になります。

以下設定値とその意味になります。

設置値説明
TYPICALデータベースの自動管理機能で必要とされる主要統計が収集。
BASICTYPICALから以下の項目が取得されなくなる
・自動ワークロード・リポジトリ(AWR)・スナップショット
・自動データベース診断モニター(ADDM)
・サーバー生成の全アラート
・自動SGAメモリー管理
・自動オプティマイザ統計収集
・オブジェクト・レベルの統計
・エンドツーエンドのアプリケーション・トレース(V$CLIENT_STATS)
・データベースの時間配分統計(V$SESS_TIME_MODELおよびV$SYS_TIME_MODEL)
・サービス・レベルの統計
・バッファ・キャッシュ・アドバイザ
・MTTRアドバイザ
・共有プール・サイジング・アドバイザ
・セグメント・レベルの統計
・PGAターゲット・アドバイザ
・時刻に関連する統計
・統計の監視
ALLTYPICALに追加で以下の項目が取得される
・時刻に関連する統計
・時刻に関連するオペレーティング・システム統計
・計画実行統計

基本的にはデフォルトの「TYPICAL」を設定すれば十分な情報を取得できます。

以下が設定SQLになります。

alter system set STATISTICS_LEVEL = "TYPICAL" scope = BOTH;

スナップショットの取得間隔と保存期間を設定:DBMS_WORKLOAD_REPOSITORY

AWRに取得間隔と保存期間を設定するには、「DBMS_WORKLOAD_REPOSITORY」プロシージャを使用します。

以下がプロシージャの使用方法です。

begin
  DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
    interval => <取得間隔を分で指定>,
    retention => <保存期間を分で指定>;
end;
/
  • interval」は取得間隔を指定
  • retention」は保存期間を指定

どちらもの整数で指定し単位は”分”で指定します。

下が取得期間を「30分」保存期間を「30日(60×24時間×30日 = 43200分)」に設定した例です。

begin
  DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
    interval => 30,
    retention => 43200);
end;
/

また以下が設定確認のSQLになります。

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」を設定することをオススメします。

関連記事

-OracleDB

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.