アプリケーションから実行中のSQLを解析する方法です。
データベースの処理に時間がかかっているっぽいけど、どのSQLが問題かわからなかったり、
処理が全然終わらないときに、どのSQLが遅いか確認したりできます。
select
SQL_ID
, SQL_TEXT
, LAST_ACTIVE_TIME 最終実行時間
, EXECUTIONS 実行回数
, ROUND(ELAPSED_TIME / (1000 * 1000),3) 経過時間
, CASE EXECUTIONS
WHEN 0 THEN ROUND(ELAPSED_TIME / (1000 * 1000),3)
ELSE
ROUND(ELAPSED_TIME / EXECUTIONS / (1000 * 1000),3)
END 平均経過時間
, module
, PARSING_SCHEMA_NAME
, SQL_FULLTEXT
from
(select * from V$SQL order by LAST_ACTIVE_TIME desc)
where
rownum < 10;
SQL_ID :SQL_IDについてはOracleのドキュメントを参照
SQL_TEXT :SQLの冒頭部分
最終実行時間 :最後にSQLが実行されたタイムスタンプ
実行回数 :このSQLが実行された回数
経過時間 :このSQLの実行にかかった秒数(複数回実行された場合、合計が表示される)
平均経過時間 :経過時間を実行回数で割った値
module :実行ファイル名
PARSING_SCHEMA_NAME :実行ユーザー名
SQL_FULLTEXT :SQL全文
SQLがプールに残っている限り、情報は保持されるので、
実行回数をリセットする場合はSQLプールをクリアしてください。
ALTER SYSTEM FLUSH SHARED_POOL;