StatspackのSnapshotを自動で取得する
さて、前のエントリでStatspackのインストールをしましたが、
これだけではダメでして、情報を取得するための、
Snapshotを取得していく必要があります。
Snapshotを取得すると、そのタイミングでの(そのタイミングまでの)
Oracleの稼動情報が、Statspackで管理されている表にコピーされます。
Snapshotの取得には、statspack.snap というプロシージャを実行するのですが、
当然、手で毎回たたくわけには行きませんよね。
というわけで、自動取得の方法を。
自動取得の方法はいくつかありますが、代表的なところは下記でしょうか。
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ですね。
実際に実行されているかの確認は、次のエントリで。