この記事では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を取得します。