k-likework

LIKEWORKで生きるためのブログ

STATSPACK

メモ:STATSPACKの使用でSTASPACK用の表領域が増加していたので、STATSPACKの基本的なことを知るメモ

STATSPACKとは

  • 「 スタッツパック」と読みます。
  • Oracle8iリリースから使用できるパフォーマンス診断ツールです。
  • Oracleの性能情報を確認できるので、障害時やチューニングに役立ちます。

STATSPACKの使用方法

  • STATSPACKはインストールが必要です。
  • 今回の環境は「Windows版のOracle12.1.0.2」です。
  • STATSPACKのインストールで使用するSQLは、$ORACLE_HOME\RDBMS\ADMIN配下にあります。

1. STATSPACK用の表領域を作る

$ sqlplus / as sysdba
SQL> CREATE TABLESPACE STATSPACK 
DATAFILE 'C:\app\statspack' SIZE 100M  AUTOEXTEND ON 
SEGMENT SPACE MANAGEMENT AUTO;

2. STATSPACKのインストール

STATSPACKのインストールSQLを流した後、対話式になります。

SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\spcreate.sql
perfstat_password: perfstat 
default_tablespace: STATSPACK 
temporary_tablespace: TEMP 

3. スナップショットを自動で収集する設定

デフォルトは1時間ごとに収集します。
このままだとSTATSPACK表領域のサイズが増加し続けるので、スナップショットを削除する設定も忘れないようにします。

$ sqlplus perfstat/perfstat
SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\spauto.sql

スナップショット自動設定の確認をします。

SQL> select interval,what from dba_jobs;

INTERVAL
-----------------------------------------------------
WHAT
-----------------------------------------------------
trunc(SYSDATE+1/24,'HH')
statspack.snap;

4. スナップショットの収集間隔を変更

デフォルト1時間ごとから30分単位に変更します。

$ sqlplus perfstat/perfstat
SQL> execute dbms_job.interval(1, 'SYSDATE+(1/48)');

変更内容を確認します。

$ sqlplus / as sysdba
SQL> select interval,what from dba_jobs;

INTERVAL
---------------------------------------------------
WHAT
---------------------------------------------------
SYSDATE+(1/48)
statspack.snap;

5.スナップショットのレベルを変更する

デフォルトはレベル5です。 レベル5から7に変更します。

$ sqlplus perfstat/perfstat
SQL> exec statspack.modify_statspack_parameter (i_snap_level=>7)
SQL> select snap_level from stats$statspack_parameter;

6. レポートを出力してみる

収集したスナップショットをレポートに出力します。

$ sqlplus perfstat/perfstat
SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\spreport.sql

Listing all Completed Snapshots

                                                       Snap
Instance     DB Name        Snap Id   Snap Started    Level Comment
------------ ------------ --------- ----------------- ----- -------------------
orautf8      ORAUTF8              1 06 11月 2018 14:0     5  0
                                  2 06 11月 2018 15:0     5   0

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
begin_snapに値を入力してください: 1
Begin Snapshot Id specified: 1

end_snapに値を入力してください: 2
End   Snapshot Id specified: 2

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.

report_nameに値を入力してください: [Enter]

==============================
 データがたくさん表示
==============================

End of Report ( sp_1_2.lst ) ←レポートが¥「sp_1_2.lst」が作成された
SQL>

作成されたファイルはカレントディレクトリで確認

7. スナップショットの自動収集を停止する方法

自動収集のジョブを削除します。

# ジョブ番号を確認する
sqlplus perfstat/perfstat
SQL> select job, what from dba_jobs; 
JOB WHAT
1
---- ------------------------------
statspack.snap;

# 確認したジョブ番号を削除する
SQL> execute dbms_job.remove(ジョブ番号); 

# 削除したジョブが表示されないことを確認する
$ sqlplus perfstat/perfstat
SQL> select interval,what from dba_jobs;

8. スナップショットの削除方法

スナップショットを持ち続けるとSTATSPACK表領域が増加し続けます。削除方法は何通りかあります。

  • 日付を指定して削除する

8日より前のスナップショットを削除します

$ sqlplus perfstat/perfstat
SQL> exec statspack.purge(8);
  • 全てのスナップショットを削除
$ sqlplus perfstat/perfstat
SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\sptrunc.sql
  • 自動でスナップショットを削除する設定

DBMS.JOBSに「statspack.purge(1)」プロシージャを登録する

SUBMIT( ジョブ番号, PLSQLプロシージャ名, 次回実行日付, 実行間隔 );
# 即時実行して、1日ごとに1日より前のスナップショットを削除する

$ sqlplus perfstat/perfstat
SQL> DECLARE
 JOB_NO binary_integer;

BEGIN
 DBMS_JOB.SUBMIT(JOB_NO,'statspack.purge(1);',INTERVAL=>'sysdate+1');

COMMIT;

END;
/

もう少し勉強したら追加。きっと明日には。

9. STATSPACKのアンインストール

$ sqlplus / as sysdba
SQL> @C:\app\Administrator\product\12.1.0\dbhome_1\RDBMS\ADMIN\spdrop.sql