Oracle Statspack - Amazon Relational Database Service

Oracle Statspack

Oracle Statspack オプションは、Oracle Statspack パフォーマンス統計機能をインストールして有効にします。Oracle Statspack は、パフォーマンスデータを収集、保存、表示する SQL、PL/SQL、および SQL*Plus スクリプトのコレクションです。Oracle Statspack 使用の詳細には、Oracle ドキュメントの「Oracle Statspack」を参照してください。

注記

Oracle Statspack は、Oracle によるサポートが停止されたため、より高度な自動ワークロードリポジトリ (AWR) に置き換えられました。AWR は、Diagnostics Pack を購入した Oracle Enterprise Edition のお客様だけが使用できます。Oracle Statspack は、Amazon RDS 上の任意の Oracle DB エンジンで使用できます。Amazon RDS リードレプリカでは Oracle Statspack を実行できません。

Oracle Statspack のセットアップ

Statspack スクリプトを実行するには、Statspack オプションを追加する必要があります。

Oracle Statspack をセットアップするには

  1. SQL クライアントで、管理アカウントを使用して Oracle DB にログインします。

  2. Statspack がインストールされているかどうかに応じて、次のいずれかの操作を行います。

    • Statspack がインストールされていて、PERFSTAT アカウントが Statspack に関連付けられている場合は、手順 4 に進みます。

    • Statspack がインストールされておらず、PERFSTAT アカウントが存在する場合は、次のようにアカウントを削除します。

      DROP USER PERFSTAT CASCADE;

      それ以外の場合は、Statspack オプションを追加しようとすると、エラーと RDS-Event-0058 が生成されます。

  3. オプショングループに Statspack オプションを追加します。「オプショングループにオプションを追加する」を参照してください。

    Amazon RDS は、DB インスタンスに Statspack スクリプトを自動的にインストールしてから、 PERFSTAT アカウントを設定します。

  4. 次の SQL 文を使用してパスワードをリセットし、pwd を新しいパスワードに置き換えます。

    ALTER USER PERFSTAT IDENTIFIED BY pwd ACCOUNT UNLOCK;

    PERFSTAT ユーザーアカウントを使用してログインし、Statspack スクリプトを実行できます。

  5. DB エンジンのバージョンに応じて、次のいずれかのアクションを実行します。

    • Oracle 18c 以下を使用している場合は、このステップをスキップします。

    • Oracle 19c 以降を使用している場合は、次のステートメントを使用して PERFSTAT アカウントに CREATE JOB 権限を付与します。

      GRANT CREATE JOB TO PERFSTAT;
  6. PERFSTAT.STATS$IDLE_EVENT テーブル内のアイドル待機イベントが設定されていることを確認します。

    Oracle バグ 28523746 のため、PERFSTAT.STATS$IDLE_EVENT のアイドル待機イベントが設定されていないことがあります。すべてのアイドルイベントが利用可能であることを確認するには、次のステートメントを実行します。

    INSERT INTO PERFSTAT.STATS$IDLE_EVENT (EVENT) SELECT NAME FROM V$EVENT_NAME WHERE WAIT_CLASS='Idle' MINUS SELECT EVENT FROM PERFSTAT.STATS$IDLE_EVENT; COMMIT;

Statspack レポートの生成

Statspack レポートでは、2 つのスナップショットを比較します。

Statspack レポートを生成するには

  1. SQL クライアントで、PERFSTAT アカウントを使用して Oracle DB にログインします。

  2. 次のいずれかの方法を使用して、スナップショットを作成します。

    • Statspack スナップショットを手動で作成します。

    • 特定の時間間隔の後に Statspack スナップショットを取得するジョブを作成します。たとえば、次のジョブは Statspack スナップショットを 1 時間おきに作成します。

      VARIABLE jn NUMBER; exec dbms_job.submit(:jn, 'statspack.snap;',SYSDATE,'TRUNC(SYSDATE+1/24,''HH24'')'); COMMIT;
  3. 次のクエリを使用してスナップショットを表示します。

    SELECT SNAP_ID, SNAP_TIME FROM STATS$SNAPSHOT ORDER BY 1;
  4. Amazon RDS プロシージャ rdsadmin.rds_run_spreport を実行し、begin_snapend_snap をスナップショット ID に置き換えます。

    exec rdsadmin.rds_run_spreport(begin_snap,end_snap);

    たとえば、次のコマンドでは、Statspack スナップショット 1 と 2 の間の間隔に基づいてレポートが作成されます。

    exec rdsadmin.rds_run_spreport(1,2);

    Statspack レポートのファイル名には、2 つのスナップショットの番号が含まれます。たとえば、Statspack スナップショット 1 および 2 を使用して作成されたレポートファイルの名前は ORCL_spreport_1_2.lst になります。

  5. 出力にエラーがないかモニタリングします。

    Oracle Statspack は、レポートを実行する前にチェックを実行します。したがって、コマンド出力にエラーメッセージが表示される可能性もあります。たとえば、開始の Statspack スナップショット値が終了値よりも大きい、無効な範囲に基づいてレポートを生成しようとするとします。この場合、出力にはエラーメッセージが表示されますが、DB エンジンはエラーファイルを生成しません。

    exec rdsadmin.rds_run_spreport(2,1); * ERROR at line 1: ORA-20000: Invalid snapshot IDs. Find valid ones in perfstat.stats$snapshot.

    無効な番号の Statspack スナップショットを使用すると、出力にエラーが表示されます。たとえば、スナップショット 1 と 50 のレポートを生成しようとして、スナップショット 50 が存在しない場合、出力にはエラーが表示されます。

    exec rdsadmin.rds_run_spreport(1,50); * ERROR at line 1: ORA-20000: Could not find both snapshot IDs
  6. (オプション)

    レポートを取得するには、Oracle トレースファイルを使用する で説明されているように、トレースファイルプロシージャを呼び出します。

    または、RDS コンソールから Statspack レポートをダウンロードします。DB インスタンスの詳細の [ログ] セクションに移動し、[ダウンロード] を選択します。

    レポートの生成中にエラーが発生した場合、DB エンジンはレポートと同じ命名規則を使用しますが、拡張子は .err です。たとえば、Statspack スナップショット 1 および 7 を使用してレポートを作成するときにエラーが発生した場合、レポートファイルの名前は ORCL_spreport_1_7.err になります。エラーレポートは、標準のスナップショットレポートと同じ方法でダウンロードできます。

Statspack ファイルの削除

Oracle Statspack ファイルを削除するには、次のコマンドを使用します。

exec statspack.purge(begin snap, end snap);