StatspackのSnapshotを自動で取得する

さて、前のエントリでStatspackのインストールをしましたが、
これだけではダメでして、情報を取得するための、
Snapshotを取得していく必要があります。


Snapshotを取得すると、そのタイミングでの(そのタイミングまでの)
Oracleの稼動情報が、Statspackで管理されている表にコピーされます。


Snapshotの取得には、statspack.snap というプロシージャを実行するのですが、
当然、手で毎回たたくわけには行きませんよね。
というわけで、自動取得の方法を。




自動取得の方法はいくつかありますが、代表的なところは下記でしょうか。

  • Oracleが提供する spauto.sql を使い、OracleのJOBベースで実行する。
  • DBMS_SCHEDULERに登録する。
  • cron万歳


1つ目はいろんなところに解説がありますし、
最悪、perfstatユーザ(Statspack管理ユーザ)でsqlplus にログインして、


@?/rdbms/admin/spauto


ってたたけば、一時間間隔で取得できます。
ので、ここでは割愛。


2つ目は・・・ここまでやる人いるかな?
DBMS_SCHEDULERで検索があったらちょっと考えてみます。



ということで、今回はcronでやります。直感的でいいよね。やっぱり。
シェルつくって、cronに突っ込む!以上!


まずシェル作るよー。

[oracle@test ~]$ more /opt/oracle/test/spexec_7.sh
#!/bin/bash
sqlplus /nolog << EOD
conn perfstat/perfstat
exec statspack.snap(i_snap_level=>7);
exit
EOD


適当すぎるwww
作成時間15秒。
よい子のみんなはマネしないでください。
ちゃんと実行ログとか取るようにしたほうがいいです。


あ、もともとの狙いがSQL実行計画の追跡なので、
レベルは 6 以上にしないといけません。
ついでに、セグメント統計もとる場合が多いので、
無難に 7 に設定してます。


でcronに登録するよ。

[oracle@test ~]$ crontab -l
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /opt/oracle/test/spexec_7.sh > /dev/null 2>&1


はいできた。
これで5分間隔で実行してくれます。


ちなみに、5分間隔での実行って、頻度が高すぎて、
本番前のパフォーマンステストのときぐらいしかしないです。
私の知ってる例では、15分〜2時間間隔ぐらいが一般的じゃないでしょうか。


っつーことで、とりあえず自動実行はこれでおkですね。
実際に実行されているかの確認は、次のエントリで。