LoginSignup
26
25

More than 5 years have passed since last update.

実行中のSQLのステータスを確認する

Last updated at Posted at 2015-07-11

V$SESSIONをみればよい。
以上。

と言いたいところだが、
情報が多すぎて、重くて見辛いEMのSQLリアルタイム監視のかわりに簡便に流れているSQLを監視したいという意図でV$SQLAREAなどと合わせたSQLを書いた。

移行作業の裏で、シナリオテスト、性能テストが走っていたりする忙しいDBの監視にはこういう情報があると切り分けが早くて便利だと思ったので投稿。

欲しい情報は、
・インスタンス
・スキーマ名
・SQL_ID
・待機クラス
・イベント
・経過時間
・SQLの一部
ぐらいあれば十分なので、下記のSQLで調べる。

現在流れているSQLのプランを取得
select 
    a.INST_ID,
    a.SCHEMANAME,
    a.SQL_ID,
    a.WAIT_CLASS,
    a.EVENT,
--  b.SQL_FULLTEXT,
    trunc((sysdate - a.SQL_EXEC_START) * 24 * 60 * 60,2) as "経過",
--  a.WAIT_TIME,
    substr(b.SQL_TEXT,1, 60) as sql_head
from 
    gV$SESSION a,
    gV$sqlarea b
where 1 = 1
and status = 'ACTIVE'
and a.INST_ID = b.INST_ID
and a.SQL_ID = b.SQL_ID
order by a.INST_ID,a.SQL_EXEC_START 
;

おかしなイベントが発生している場合、

select * from table(DBMS_XPLAN.DISPLAY_CURSOR('{SQL_ID}'));

などで、プランをすぐに確認できる。
ただ、待機クラス・イベント自体あまり知らないので、どこかでまとめたい。
RAC特有のイベントとかあるらしいので興味ある。

26
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
25