待機イベントを起こしている「犯人探し」
パフォーマンス問題はDBAの腕が発揮されるときですね。私も特性の処理のレスポンス調査には、V$ACTIVE_SESSION_HISTORYを整形して、待機イベントを起こしている「犯人探し」をしてきました。
V$ACTIVE_SESSION_HISTORY(メモリに残っている詳細情報)やDBA_HIST_ACTIVE_SESS_HISTORY(ディスクに退避されたサマリー情報)を用いて以下のSQLを発行することで、特定時間帯の待機イベントの様子を確認できます。
<メモリに残っている詳細情報>
SQL> SELECT SAMPLE_TIME, INST_ID, SESSION_ID, SESSION_SERIAL#, SESSION_STATE, SEQ#,
EVENT, P1, P2, P3, WAIT_TIME, TIME_WAITED, PROGRAM, MODULE, SQL_ID,
SQL_OPCODE, BLOCKING_SESSION
FROM GV$ACTIVE_SESSION_HISTORY
WHERE INST_ID=&1
AND SAMPLE_TIME BETWEEN TO_DATE('&BEGIN_TIME','YYYY/MM/DD HH24:MI:SS') AND
TO_DATE('&END_TIME','YYYY/MM/DD HH24:MI:SS')
ORDER BY SAMPLE_TIME;
<ディスクに退避されたサマリー情報>
SQL> SELECT SAMPLE_TIME, INSTANCE_NUMBER, SESSION_ID, SESSION_SERIAL#, SESSION_STATE, SEQ#,
EVENT, P1, P2, P3, WAIT_TIME, TIME_WAITED, PROGRAM, MODULE, SQL_ID,
SQL_OPCODE, BLOCKING_SESSION
FROM DBA_HIST_ACTIVE_SESS_HISTORY
WHERE INSTANCE_NUMBER=&1
AND SAMPLE_TIME BETWEEN TO_DATE('&BEGIN_TIME','YYYY/MM/DD HH24:MI:SS') AND
TO_DATE('&END_TIME','YYYY/MM/DD HH24:MI:SS')
ORDER BY SAMPLE_TIME;
この結果を、表計算ソフト(MS Excelなど)で整形することで待機を起こしている"犯人"を特定する、といったことが可能になるでしょう。さらに、Oracle Enterprise Managerのパフォーマンスタブを用いると、GUIを用いてグラフィカルに分析することもできます。
V$ACTIVE_SESSION_HISTORY を活用するには、Diagnostic Packのライセンスが必要ですが、パフォーマンスの調査には必要不可欠です!
* * *
さて、パフォーマンス・チューニング関連の記事がランキング上位を占めたように、技術者の皆さんが今も昔も興味を持つテーマですね。
8月はどんな記事が人気になるでしょうか?
次回も、皆様が"使える"ネタを提供していきたいと思います。
「好奇心が、エンジニア人生を豊かにする。」>> oracletech.jp