SQL*Plusを使わずに統計情報を取得する
SQL*Plus Autotraceの機能で統計情報が取得できますが、これをSQL*Plusを使わずにやる方法です。
SELECT SN.name, ST.value FROM V$SESSION S, V$SESSTAT ST, V$STATNAME SN WHERE AUDSID=userenv('SESSIONID') AND S.sid = ST.sid AND SN.statistic#=ST.statistic# AND SN.name in ('recursive calls', 'db block gets', 'consistent gets', 'physical reads' ,'redo size', 'bytes sent via SQL*Net to client', 'bytes received via SQL*Net from client' ,'SQL*Net roundtrips to/from client', 'sorts (memory)', 'sorts (disk)', 'rows processed')
このSQLで、統計情報の項目がゲットできます。しかし、セッションがスタートしてからの累積値なので、自身のSQL統計情報も加算されてしまいます。
このため、目的のSQL(A)と統計情報を取得するSQL(B)のセッションは分けます。
こんな感じ
- セッションAでAUDSIDを取得する。
- セッションBでセッションAの統計情報を取得する。
- セッションAで目的のSQLを発行する。fetchも行う。
- セッションBでセッションAの統計情報を取得し、(4)-(2)で統計情報の差分をとる。