OracleでMySQLのshow processlistっぽいやつ
ふと、oracleのセッション情報もmysqlのshow processlistみたいにSQL文やクエリの実行時間を表示させたいなと考えた。
その場合はv$sessionとv$sqlをsql_idで結合させて表示させればいいんだけど、
v$sqlに問い合わせるのは、なんせ共有プールにアクセスするわけだから負荷が高い。。
考えた結果、statspackをインストールしているのであれば、そっちから取得すればいいじゃん!
というわけでperfstat.stats$sqltextとv$sessionを結合して表示させてあげることにした。
今までv$sessionとv$sqlを結合していたら結構時間かかってたけど、かなり早く返ってくるし、影響も少ない。
ただ、問題としてアドホックなクエリはstatspack内にないから、それは表示されない。
それを確認したい場合はv$sqlと結合してあげれば良い。
まぁ一回ぐらいなら実行してもいいんじゃないってことで。
そういうことで、シェルスクリプト作りました。
oracle-showprocesslist
https://github.com/kenken0807/oracle-showprocesslist
こんな感じの画面
ちなみに
待機イベント、ログイン時間や待機させらてる場合はブロックしてるセッションが表示されるように設定している。
ACTIVE_TIMEはクエリの実行時間を表示している
出したい項目を随時変更したり、追加してあげて表示してください。
毎回sqlplus で新規接続するのはどうかと思うけど、設定変えないでそのまま使えるのいいかということで。