Oracle 10 gデータベースでのレスポンス時間の分析方法(2)


Oracle 10 gデータベースでのレスポンス時間の分析方法(2)
上記のクエリには、より詳細なレスポンス時間データが含まれています.DBAはまた、システムレベルでのユーザ通信の平均応答時間を収集する必要があり、上記のクエリは必要な結果を示している.ユーザーがレスポンス時間が遅いと文句を言う場合は、DBAはResponse Time Per TxnとSQL Service Response Timeデータにデータベースの問題があるかどうかを確認する必要があります.
応答時間がそれほど求められていない場合、DBAはどのようなタイプのユーザー・アクティビティがデータベースの応答をこんなに遅くしたのかを知りたいと思っています.Oracle 10 gデータベースの前では、これらの情報は取得しにくいですが、次のようなクエリーを実行するのは簡単になりました.
select case db_stat_name

    when 'parse time elapsed' then

    'soft parse time'

    else db_stat_name

    end db_stat_name,

    case db_stat_name

    when 'sql execute elapsed time' then

    time_secs - plsql_time

    when 'parse time elapsed' then

    time_secs - hard_parse_time

    else time_secs

    end time_secs,

    case db_stat_name

    when 'sql execute elapsed time' then

    round(100 * (time_secs - plsql_time) / db_time,2)

    when 'parse time elapsed' then

    round(100 * (time_secs - hard_parse_time) / db_time,2)

    else round(100 * time_secs / db_time,2)

    end pct_time

    from

    (select stat_name db_stat_name,

    round((value / 1000000),3) time_secs

    from sys.v_$sys_time_model

    where stat_name not in('DB time','background elapsed time',

    'background cpu time','DB CPU')),

    (select round((value / 1000000),3) db_time

    from sys.v_$sys_time_model

    where stat_name = 'DB time'),

    (select round((value / 1000000),3) plsql_time

    from sys.v_$sys_time_model

    where stat_name = 'PL/SQL execution elapsed time'),

    (select round((value / 1000000),3) hard_parse_time

    from sys.v_$sys_time_model

    where stat_name = 'hard parse elapsed time')

    order by 2 desc;

    DB_STAT_NAME TIME_SECS PCT_TIME

    sql execute elapsed time 65.644 89.7

    hard parse elapsed time 26.661 36.43

    PL/SQL execution elapsed time 12.766 17.44

    PL/SQL compilation elapsed time 6.353 8.68

    soft parse time 2.15 2.94

    connection management call elapsed time 1.084 1.48

    hard parse (sharing criteria) elapsed time 0.448 0.61

    repeated bind elapsed time 0.026 0.04

    failed parse elapsed time 0.009 0.01

    hard parse (bind mismatch) elapsed time 0.002 0

    RMAN cpu time (backup/restore) 0 0

    inbound PL/SQL rpc elapsed time 0 0

    sequence load elapsed time 0 0

    Java execution elapsed time 0 0

    failed parse (out of shared memory) elapsed time 0 0
V$SYS_TIME_MODELビューでは、対応する主な時間処理の部分が見つかり、それに基づいてデータベースを調整できます.
DBAはイベント時間以外にも全体の待ち時間が知りたいです.DBAは、Oracle 10 gデータベースの前に個別の待機イベントを表示して待機とボトルネックを特定する必要があります.これで、Oracle 10 gデータベースに待機の概要メカニズムが提供されます.
select WAIT_CLASS,

    TOTAL_WAITS,

    round(100 * (TOTAL_WAITS / SUM_WAITS),2) PCT_WAITS,

    ROUND((TIME_WAITED / 100),2) TIME_WAITED_SECS,

    round(100 * (TIME_WAITED / SUM_TIME),2) PCT_TIME

    from

    (select WAIT_CLASS,

    TOTAL_WAITS,

    TIME_WAITED

    from V$SYSTEM_WAIT_CLASS

    where WAIT_CLASS != 'Idle'),

    (select sum(TOTAL_WAITS) SUM_WAITS,

    sum(TIME_WAITED) SUM_TIME

    from V$SYSTEM_WAIT_CLASS

    where WAIT_CLASS != 'Idle')

    order by 5 desc;

    WAIT_CLASS TOTAL_WAITS PCT_WAITS TIME_WAITED_SECS PCT_TIME

    User I/O 5748 61.71 67.57 65.79

    Other 182 1.95 16.85 16.41

    System I/O 2975 31.94 11.27 10.97

    Concurrency 114 1.22 6.76 6.58

    Commit 61 0.65 0.22 0.21

    Network 233 2.5 0.03 0.03

    Application 2 0.02 0 0
これにより、全体的な待ち時間の大部分を簡単に見つけることができます.応答時間データと同様に、次のクエリを使用して、最新の1時間待機タイプをタイムリーにレビューできます.
select a.sid,

    b.username,

    a.wait_class,

    a.total_waits,

    round((a.time_waited / 100),2) time_waited_secs

    from sys.v_$session_wait_class a,

    sys.v_$session b

    where b.sid = a.sid and

    b.username is not null and

    a.wait_class != 'Idle'

    order by 5 desc;

    SID USERNAME WAIT_CLASS TOTAL_WAITS TIME_WAITED_SECS

    38 SYS User I/O 22 0.19

    48 SYS User I/O 15 0.12

    38 SYS Network 21 0.01

    48 SYS Network 24 0

    38 SYS Application 2 0
このとき、以前のバージョンのOracleデータベースでV$SESSION_を問い合わせるように、標準の個別待機イベントをチェックできます.WAITとV$SESSION_EVENTビュー.DBAはまた、Oracle 10 gデータベースでは、この2つのビューで新しい待機タイプを見つけることができます.以前のセッションにログインしてリソースの大部分を消費したセッションを特定する必要がある場合は、次のクエリを使用します.次の例は、真夜中の12時から5時までのデータベース・アクティビティを検索し、ユーザーのI/O待機を含むものです.
select sess_id,

    username,

    program,

    wait_event,

    sess_time,

    round(100 * (sess_time / total_time),2) pct_time_waited

    from

    (select a.session_id sess_id,

    decode(session_type,'background',session_type,c.username) username,

    a.program program,

    b.name wait_event,

    sum(a.time_waited) sess_time

    from sys.v_$active_session_history a,

    sys.v_$event_name b,

    sys.dba_users c

    where a.event# = b.event# and

    a.user_id = c.user_id and

    sample_time > '22-JAN-07 12:00:00 AM' and

    sample_time < '22-JAN-07 05:00:00 AM' and

    b.wait_class = 'User I/O'

    group by a.session_id,

    decode(session_type,'background',session_type,c.username),

    a.program,

    b.name),