sql >> データベース >  >> RDS >> Oracle

ウェイトイベントを見つける方法Oracleセッションの履歴

    この投稿では、Oracleセッションの待機イベント履歴を取得するためのさまざまなクエリについて説明します。

    開始からの特定のセッションでの待機イベントの履歴は、以下のクエリを使用して見つけることができます

    行120トリムスプールを
    colイベントヘッド「Waitedfor」フォーマットa30
    coltotal_waitshead「Total|Waits」フォーマット999,999
    coltw_mshead「Waited|for(ms)」フォーマット999,999.99
    col aw_ms head“ Average | Wait(ms)” format 999,999.99
    col mw_ms head“ Max | Wait(ms)” format 999,999.99
    select event、total_waits、time_waited 10 tw_ms、
    average_wait
    10 aw_ms、max_wait * 10 mw_ms
    from v $ session_event
    ここで、sid =&1
    /

    特定の期間のセッションの待機イベント履歴を表示して、その期間の待機イベントのみを取得するとします

    次に、以下のASHクエリを使用してデータを抽出できます

    SQL> SELECT event、count(
    FROM dba_hist_active_sess_history a
    WHERE a.sample_time BETWEEN to_date('12 -OCT-2016 11:49:00'、' DD-MON-YYYY HH24: MI:SS')AND
    to_date('12 -OCT-2016 15:04:00'、'DD-MON-YYYY HH24:MI:SS')and session_id =1853 and SESSION_SERIAL#=19 group by event;
    イベント数(

    ログファイル同期88

    SQL> SELECT module、count(
    2 FROM dba_hist_active_sess_history a
    3 WHERE a.sample_time BETWEEN to_date('12 -OCT-2016 11:49:00'、' DD-MON-YYYY HH24:MI:SS')AND
    4 to_date('12 -OCT-2016 15:04:00'、'DD-MON-YYYY HH24:MI:SS')and session_id =1853 and SESSION_SERIAL#=19 and event ='log file sync' group by module;
    MODULE COUNT(

    e:FND:cp:FNDICM 88

    過去1時間の待機イベントの履歴を知りたい場合は、以下のクエリを使用できます

    column sample_time format a30
    select sample_time、session_state、event、sql_id
    from v $ active_session_history
    where session_id =&1 and sample_time> SYSDATE – 30 /(24 * 60)
    order by 1;

    テクニックの重要なユースケース。

    特定の期間中に待機していた特定のセッションと、それをブロックしていたものを知りたいとします。

    以下のクエリを使用して、待機イベントやその他の重要なものを取得できます

    col event format a30
    col sample_time format a25
    select session_id、sample_time、session_state、event、wait_time、time_waited、sql_id、sql_child_number CH#
    from v $ active_session_history
    where session_id =19
    とsample_timeの間
    to_date( '9-DEC-16 01.25.00 PM'、'dd-MON-yy hh:mi:ss PM')

    to_date( '9-DEC-16 02.25.00 PM'、'dd-MON-yy hh:mi:ss PM')
    sample_timeで並べ替え;

    イベントがenq:TX –行ロックの競合である場合、特定のセッションがそれをブロックすることがわかっています。

    sample_time、session_state、blocking_session、current_obj#、current_file#、current_block#、current_row#
    from v $ active_session_history
    where sample_time between
    to_date( '9-DEC-16 01.25.00 PM' 、'dd-MON-yy hh:mi:ss PM')
    and
    to_date( '9-DEC-16 02.25.00 PM'、'dd-MON-yy hh:mi:ss PM ')
    and session_id =19
    and event ='enq:TX – row lock contention'
    order by sample_time;

    Blocking_sessionは、セッションがブロックされたセッションIDを表示します。ブロックされたセッションに対して上記で取得したsql_idを使用して、sqlステートメントを抽出することもできます。

    同様のクエリを使用して、ブロックしているセッションの情報を特定し、適切な修正アクションを実行できます

    重要な情報

    これらのクエリには、頻繁にアクティブなセッション履歴とアクティブなセッション履歴アーカイブを使用していることをご存知でしょう。

    アクティブセッション履歴とは

    アクティブセッション履歴はデータベースをポーリングしてアクティブセッションを識別し、ユーザーID、状態、接続元のマシン、実行中のSQLなど、各セッションに関連する情報をシステムグローバルの特別な領域にダンプします。 ASHバッファと呼ばれるデータベースインスタンスの領域(SGA)

    アクティブセッション履歴アーカイブ

    アクティブセッション履歴は、データベースインスタンスからアクティブセッションに関する情報を毎秒収集します。データベースのアクティビティによっては、ASHバッファ内に大量のデータが収集されることになりますが、ASHバッファはメモリに常駐する構造であるため、限られた量のスペースしかありません。さらに、インスタンスがダウンすると、インスタンスのメモリも一緒に消えます。したがって、Oracle Databaseは、ASHバッファからデータベース表に情報をアーカイブして、永続化します。このアーカイブされたテーブルデータは、DBA_HIST_ACTIVE_SESS_HISTORY

    というビューに表示されます。

    関連記事

    Oracle ASH(アクティブセッション履歴)有用なクエリ

    どのsidが全表スキャンを実行しているかを見つける方法

    Oracleデータベースでセッションの詳細を見つける方法

    DB時間と平均アクティブセッション、Oracleのアクティブセッションとは

    たくさんのやり直しを生成するセッションを見つける方法


    1. PythonとMySQLデータベース:実用的な紹介

    2. MySQLとSQLの違いは何ですか?

    3. SQL Server:CROSSJOINとFULLOUTER JOINの違いは何ですか?

    4. MySQLの日付と時刻の単位(完全なリスト)