読者です 読者をやめる 読者になる 読者になる

kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

OracleでMySQLのshow processlistっぽいやつ

ふと、oracleのセッション情報もmysqlのshow processlistみたいにSQL文やクエリの実行時間を表示させたいなと考えた。

その場合はv$sessionとv$sqlsql_idで結合させて表示させればいいんだけど、
v$sqlに問い合わせるのは、なんせ共有プールにアクセスするわけだから負荷が高い。。

考えた結果、statspackをインストールしているのであれば、そっちから取得すればいいじゃん!
というわけでperfstat.stats$sqltextとv$sessionを結合して表示させてあげることにした。

今までv$sessionとv$sqlを結合していたら結構時間かかってたけど、かなり早く返ってくるし、影響も少ない。
ただ、問題としてアドホックなクエリはstatspack内にないから、それは表示されない。
それを確認したい場合はv$sqlと結合してあげれば良い。
まぁ一回ぐらいなら実行してもいいんじゃないってことで。

そういうことで、シェルスクリプト作りました。

oracle-showprocesslist
https://github.com/kenken0807/oracle-showprocesslist

こんな感じの画面

 

f:id:kenken0807:20150715185726p:plain

 

ちなみに
待機イベント、ログイン時間や待機させらてる場合はブロックしてるセッションが表示されるように設定している。
ACTIVE_TIMEはクエリの実行時間を表示している
出したい項目を随時変更したり、追加してあげて表示してください。
毎回sqlplus で新規接続するのはどうかと思うけど、設定変えないでそのまま使えるのいいかということで。