プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

SQLトレースをプロセス単位で取ってみる

Oracle10gの新機能の中で、SQLトレースをインスタンス単位、セッション単位以外で取れることになったらしいので、早速(いまさら)試してみた。

http://www5b.biglobe.ne.jp/~taka_2/technique/Oracle_SQLTrace/index.html


SQLトレースって、パフォーマンスチューニングとかに必要な情報が入ったものなのですが、
Oracle8i的なイメージで言うと、

  • セッション単位で取ろうとすると、アプリケーションにトレースを取得するためのコマンドを埋め込む必要あり
    • プロダクションコードを変更することは、基本的に許されない(変更したらテストし直しが普通)
      • でも、最近のDI(というよりはAOP)で、うまいこと差し込めるのかしら。
  • インスタンス単位で取ろうとすると、初期化パラメータを変更した上、Oracleインスタンスの再起動が必要
    • Oracle9iで導入された、サーバ・パラメータ・ファイル(SPFILE)を使えば、再起動は不要
      • でも、ターゲットアプリケーション以外のトレースも取れてしまう

な感じで、SQLトレースっておいそれと取れないイメージでした。


が、まあOracle10gになって粒度も細かくなったので、
わりと気楽に取れるようになりましたよ。っていう認識。


ただ、それなりに権限がないと使えないみたい。
今回はscottにDBAロールを付与して逃げたけど、
開発者レベルでは、相変わらずSQL*Plusのset autotrace onが一番使えるのかも。