STATSPACK の使い方を簡単にまとめてみた。
STATSPACK 用に表領域を作成する。
$ sqlplus / as sysdba SQL> CREATE TABLESPACE STATSPACK DATAFILE '/dev/raw/raw15' SIZE 100M AUTOEXTEND ON SEGMENT SPACE MANAGEMENT AUTO;
STATSPACK をインストールする。
SQL> @?/rdbms/admin/spcreate.sql Enter value for perfstat_password: perfstat Enter value for default_tablespace: STATSPACK Enter value for temporary_tablespace: TEMP SQL> exit $ grep -i error *.lis
自動的にスナップショットを取得するよう設定する(デフォルトで1時間毎)。
$ sqlplus perfstat/perfstat SQL> @?/rdbms/admin/spauto.sql
スナップショットの自動取得を停止する。
$ sqlplus perfstat/perfstat SQL> col job for 999 SQL> col what for a30 --JOB番号を確認する。 SQL> select job, what from dba_jobs; JOB WHAT ---- ------------------------------ 1 statspack.snap; --上記で確認したジョブ番号を指定する。 SQL> execute dbms_job.remove(ジョブ番号); --削除したジョブが表示されないことを確認する。 SQL> seleE3??(デフォルトで1時間毎)。 >|sql| $ sqlplus perfstat/perfstat SQL> @?/rdbms/admin/spauto.sql
スナップショットの自動取得を停止する。
$ sqlplus perfstat/perfstat SQL> col job for 999 SQL> col what for a30 --JOB番号を確認する。 SQL> select job, what from dba_jobs; JOB WHAT ---- ------------------------------ 1 statspack.snap; --上記で確認したジョブ番号を指定する。 SQL> execute dbms_job.remove(ジョブ番号); --削除したジョブが表示されないことを確認する。 SQL> select job, what from dba_jobs;
スナップショット取得間隔を30分毎に変更する。
$ sqlplus perfstat/perfstat SQL> execute dbms_job.interval(1, 'SYSDATE+(1/48)');
レポートを出力する。RAC環境の場合はそれぞれのインスタンスで出力する。
$ sqlplus perfstat/perfstat SQL> @?/rdbms/admin/spreport.sql ... Completed Snapshots Snap Snap Instance DB Name Id Snap Started Level Comment ------------ ------------ --------- ----------------- ----- -------------------- orcl ORCL 1 10 Aug 2009 09:44 7 2 10 Aug 2009 09:44 7 ... Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Enter value for begin_snap: 1<RETURN> Enter value for end_snap: 2<RETURN> ... Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is sp_1_2. To use this name, press <return> to continue, otherwise enter an alternative. Enter value for report_name:<RETURN> ...
不要になったスナップショットを削除する(8日より前のスナップショットを削除する)。
$ sqlplus perfstat/perfstat
SQL> exec statspack.purge(8);
レベルを変更する。
$ sqlplus perfstat/perfstat SQL> exec statspack.modify_statspack_parameter (i_snap_level=>7) SQL> select snap_level from stats$statspack_parameter;
スナップショットデータを全て切り捨てる。
$ sqlplus perfstat/perfstat SQL> @?/rdbms/admin/sptrunc.sql
追記(2009/03/30):
RAC の場合の注意点。
[J06248-02]Oracle9i データベース・パフォーマンス・チューニング・ガイドおよびリファレンス リリース2(9.2)
P.603
注意: Oracle Real Application Clusters 環境でSPAUTO.SQL を使用する場合、
http://www.oracle.com/technology/global/jp/documentation/products/oracle9i/920/general.html#performance
SPAUTO.SQL スクリプトをクラスタ内の各インスタンスで1 回実行する必要があります。
同様に、各インスタンスにJOB_QUEUE_PROCESSES パラメータを設定する必要があります。
追記(2009/08/04):
http://oracome.blog.shinobi.jp/Entry/22/ で知ったけど、デフォルトレベルを変更しなくても引数でレベルを指定できるみたい。
SQL> exec statspack.snap(7);
追記(2009/08/10):
statspack をアンインストールする手順。
$ sqlplus / as sysdba
SQL> @?/rdbms/admin/spdrop.sql
SQL> exit
$ grep -i error *.lis
追記(2010/07/28):
statspack のスナップショットが取得されなくなっていたので、ジョブを調べてみると、
SQL> col last for a10 SQL> col next for a10 SQL> col what for a30 SQL> select job, what, to_char(last_date,'YYYY-MM-DD') last, to_char(next_date,'YYYY-MM-DD') next from dba_jobs; JOB WHAT LAST NEXT ---------- ------------------------------ ---------- ---------- 41 statspack.snap; 2010-07-13 4000-01-01
4000年て。。。
一旦、ジョブを削除して、
SQL> execute dbms_job.remove(41);
作り直せば、
SQL> @?/rdbms/admin/spauto.sql
おk
[参考]
STATSPACKをアンインストールする - tipsを掻き集めてknowledgeを目指す日記
http://www9.plala.or.jp/okuman/oracle/statspack.html
statspackを定期的にとっていると、情報がDBにどんどん溜まります。sppurge.sqlを使って、負荷の低く、かつ、スナップを取っていない時間に定期的に削除しましょう。削除処理は重いためです。
削除しても、stats$sqltext などの周辺テーブルの情報が増えていく場合、10g以降では、i_extended_purge パラメータを TRUE に設定して削除しましょう。9i以前では、サポートに問い合わせ(もしくはKROWN情報から調査)してみましょう。
データベースコンサルタントのノウハウちょい見せ