tech_memo / Oracle / ASH


tech_memo/ORACLE

便利SQL

指定期間内の各SQLの待機イベントの回数・時間の統計を取得

select
INST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, EVENT, SESSION_STATE, count(1) "SESSION_COUNT", sum(time_waited) as total_wait_micro_sec
from
GV$ACTIVE_SESSION_HISTORY
where
SAMPLE_TIME between to_date('20170525 100000','yyyymmdd hh24miss')
and to_date('20170525 100100','yyyymmdd hh24miss')
group by
INST_ID, SQL_ID, SQL_PLAN_HASH_VALUE, EVENT, SESSION_STATE
order by 7,1,2,3,6;

時系列順(秒オーダー)に発生したSQLとその待機イベントと時間

select
session_id, session_serial#, sample_time, sql_id, SQL_PLAN_HASH_VALUE, EVENT, SESSION_STATE, time_waited/1000 as wait_msec
from
GV$ACTIVE_SESSION_HISTORY
where
SAMPLE_TIME between to_date('20170525 100000','yyyymmdd hh24miss')
and to_date('20170525 100100','yyyymmdd hh24miss')
order by 3, 1, 2;

情報格納オブジェクト

オブジェクト名説明保存期間
V$ACTIVE_SESSION_HISTORYASHバッファ(共有プール)を参照。1秒単位に情報を格納ASHバッファがいっぱいになるまで。またはインスタンス停止
DBA_HIST_ACTIVE_SESS_HISTORYWRH$_ACTIVE_SESSION_HISTORY(AWR。SYSAUX領域)の情報を参照。10秒単位に情報を格納AWRの保存期間と同じ。デフォルト8日

ASHレポート生成スクリプト

  • 時間帯指定
    @?/rdbms/admin/ashrpt.sql
  • SQL_IDなどのフィルタができる版
    @?/rdbms/admin/ashrpti.sql
    • 「アクティビティの経過(Activity Over Time)」セクションで使用する時間帯(秒数)を指定できるが、これがよくわからない。。とりあえず、下記マニュアル

Oracle PDF

Manual