ASHを取得するSQL

この記事ではASHを取得するSQLについて解説します。

 ASHとは

ASHとはActive Session Historyの略でアクティブな状態のセッションのデータを記録したものになります。

パフォーマンス診断やトラブルシューティングによく用いられ、AWRよりも細かい情報を取得できるのが特徴です。

ASHはV$ACTIVE_SESSION_HISTORYビューおよびDBA_HIST_ACTIVE_SESS_HISTORYビューに記録されます。

V$ACTIVE_SESSION_HISTORYビューには1秒ごとのセッション情報が記録されます。

メモリ上に記録されるため長期間の保持はできず、インスタンス再起動などで情報が消えます。

DBA_HIST_ACTIVE_SESS_HISTORYビューは10秒ごとのセッション情報が記録されます。

こちらはAWRの保持期間と同じ期間情報を保持することができます。


 ASHを取得するSQL

DBA_HIST_ACTIVE_SESS_HISTORYビューから期間を指定してASHを取得し、csvファイルに書き出すSQLを作成しました。

-- CSV形式での出力を設定
SET LINESIZE 200
SET PAGESIZE 50000
SET MARKUP CSV ON
SET FEEDBACK OFF
SET HEADING ON
SET VERIFY OFF

-- 対話型で日時を入力
ACCEPT start_time CHAR PROMPT 'Enter start time (YYYY-MM-DD HH24:MI:SS): ';
ACCEPT end_time CHAR PROMPT 'Enter end time (YYYY-MM-DD HH24:MI:SS): ';

-- 出力ファイルの指定
SPOOL ash_data_output.csv

-- 指定期間のASHデータを取得
SELECT sample_time,
       session_id,
       sql_id,
       wait_class,
       event,
       session_state,
       blocking_session,
       machine
FROM dba_hist_active_sess_history
WHERE sample_time BETWEEN TO_DATE('&start_time', 'YYYY-MM-DD HH24:MI:SS')
                      AND TO_DATE('&end_time', 'YYYY-MM-DD HH24:MI:SS')
ORDER BY sample_time;

-- SPOOLを終了してファイルに書き出し
SPOOL OFF

SQLを実行して、開始時刻と終了時刻を入力するとASHを取得します。