8-1. Statspackのインストール
ここではStatspackのインストール方法~スナップショットの取得方法までを記します。
作業に際しては、SYSユーザーでSQL*Plusにログインします。
プラガブルDBを使用している場合は、使用するPDBにログインします。
Statspackは、1つのインスタンスにPERFSTATというスキーマを作成して使用するものですので、複数のPDBを使用する場合は、PDBごとにインストールする必要があります。
事前の検討事項
Statspackのインストールでは、ユーザーPERFSTATが作成されます。
それに伴い、PERFSTATユーザーのパスワード、及び、DEFAUT表領域と一時表領域を指定する必要があります。
PERFSTAT専用の表領域を使用する場合は、事前に作成しておきます。
create tablespace perfstats datafile '<<データファイルを配置するディレクトリ>>/perfstats.dbf' size 200m autoextend on segment space management auto;
インストール
SQL*Plusから、下記のコマンドを実行します。
「@?」は、$ORACLE_HOME を表します。
このように記述すれば、WindowsでもLinuxでも同じようにパスを指定できます。
@?/rdbms/admin/spcreate.sql
次のようにパスワードを聞かれるので入力します。
Choose the PERFSTAT user's password ----------------------------------- : perfstat_passwordに値を入力してください:
続いてデフォルト表領域を選択します。
Choose the Default tablespace for the PERFSTAT user --------------------------------------------------- : default_tablespaceに値を入力してください:
と聞かれるので、表領域名を入力してください。
入力しない場合、STATSPACK DEFAULT TABLESPACEに*が表示されている表領域が使用されます(通常はSYSAUXだと思います)。
次に一時表領域を選択します。
Choose the Temporary tablespace for the PERFSTAT user ----------------------------------------------------- : temporary_tablespaceに値を入力してください:
入力しない場合、DB DEFAULT TEMP TABLESPACEに*が表示されている表領域が使用されます(通常はTEMPだと思います)。
あとはスクリプトが実行されて、必要なオブジェクトが作成されます。
スナップショットの作成
Statspackがインストールできたら、早速スナップショットを取得し、レポートを作成してみます。
- perfstatユーザーでSQL*Plusにログインします。
- スナップショットレベルの設定 execute statspack.snap(i_snap_level=>7);
指定するレベルの数値の意味は以下の通りです。
レベル | 収集される情報 |
---|---|
0 | 全体的なパフォーマンス統計 |
5 | +SQLステートメント |
6 | +SQL実行計画および SQL実行計画の使用率 |
7 | +セグメントレベルの統計 |
10 | +親ラッチおよび子ラッチ |
収集される情報の「+」は一つ上の行の収集内容に追加して収集されるということです。
レベル5であれば、「全体的なパフォーマンス統計」に加えて、「SQL ステートメント」も収集されるということです。
通常は、上記の例でも示しているとおり、”7”を指定することをお勧めします。
10ではスナップショットの取得が重くなりますし、”6”ではいわゆるI/Oバウンドの性能低下を判断するための情報が不足します。
3. 次のコマンドを発行して、スナップショットを取得します。
execute statspack.snap;
4. スナップショット取得確認
次のSQLを発行し、スナップショットが作成されていることを確認します。
select snap_id, to_char(snap_time, 'yyyy-mm-dd hh24:mi:ss') snap_time from stats$snapshot order by snap_id;
5. レポートの出力
下記のスクリプトを実行します。
@?/rdbms/admin/spreport
すると以下のような情報が出力されます。
スナップショットIDの入力を求められるので、出力対象(時間)の開始IDと終了ID、レポートファイル名を指定します。
下記では、10/21の18:00~20:00までのレポートを出力します。
レポートはSQL*Plusを起動したディレクトリに出力されますが、明示的にフルパスを指定した方がわかりやすくて良いと思います。
Snap Snap Instance DB Name Id Snap Started Level Comment ---------- ---------- ------- ------------------ ----- ------- t17 TF17ORA 1 22 10月 2021 00:14 7 2 22 10月 2021 01:00 7 :<< 中略 >> 19 22 10月 2021 18:00 7 20 22 10月 2021 19:00 7 21 22 10月 2021 20:00 7 Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ begin_snapに値を入力してください: 19 Begin Snapshot Id specified: 19 end_snapに値を入力してください: 21 End Snapshot Id specified: 21 report_nameに値を入力してください: D:\oracle\sprep_19-21.log
レポートの見方についてはまた別途解説したいと思います。
スケジューリング
スナップショットは一度だけ取得しても意味はありません。
前述のように、レポートは所定の時間の間に行われた処理内容を出力するものですので、定期的に取得するのが一般的です。
1時間毎にスナップショットを取得するジョブを生成するには、下記のスクリプトを実行します。
@?/rdbms/admin/spauto
次のSQLで、ジョブが作成されたか確認します。
select job, what from dba_jobs;
スナップショット取得間隔を変更したい場合は、次のコマンドを実行します。
これは取得間隔を30分ごとに変更する場合です。
尚、ジョブIDには、上のSQLで取得したjob_idを指定します。
execute dbms_job.interval([ジョブID], 'sysdate+(1/48)');
ジョブを削除する場合は、下記のコマンドを実行します。
execute dbms_job.remove([ジョブID]);
statspackのアンインストール
statspackをアンインストールする場合は、下記のスクリプトを実行します。
@?/rdbms/admin/spdrop
参考サイト
Oracle(12c) statspackのインストールと使い方
https://qiita.com/mkyz08/items/729545aab4751f3002d0
Oracle9i データベース チューニング ガイド
https://docs.oracle.com/cd/F25597_01/document/products/wli/docs102/dbtuning/statsApdx.html
最近のコメント