0

Oracle 11gでは、特定のSQLの応答時間を監視したい(私はSQLのsql_idを知っている)。意味、私はそれが実行されるたびにSQLの応答時間を知りたい。私はしばらくの間、「オンにする」だろうし、その後のようなデータに何かを見たい:SQLの各実行の測定/監視の応答時間

For sql_id 'abcdefg', following were the execution time (in ms) 10 12 10 13 10 10 10 240 230 10 9 12 … …

私たちは、私は、出力を見たい正確な形式を無視することができますが、どのような方法についてはあり私は私のSQLのすべての実行のための応答時間を得ることができるように監視する?

ありがとうございました。

答えて

1

まず、あなたは、SQLをトレースする必要があります(sql_id前提としています6b0z40gs9m759を):

/u01/app/oracle/admin/MYDB11G/udump/mydb11g_ora_TrcSqlParag.trc 

トレースファイルを読み込むことは容易ではない、我々が必要:

SQL> ALTER SESSION SET sql_trace=TRUE; 

SQL> ALTER SESSION SET EVENTS 'trace[rdbms.SQL_Optimizer.*][sql:6b0z40gs9m759]'; 
[ SQL> ALTER SYSTEM SET EVENTS 'sql_trace [sql:&&sql_id] bind=true, wait=true'; ] -- or use this as alternative. 

SQL> ALTER SESSION SET TRACEFILE_IDENTIFIER = "TrcSqlParag"; -- adds this text to your trace file and makes it more recognizable by you. 

SQL> SHOW PARAMETER user_dump_dest -- trace files are produced in this directory 

-- For 11g DB, you may easily query v$diag_info view to see your file destination : 
SQL> SELECT value FROM v$diag_info WHERE name = 'Default Trace File'; 

-- You can identify the trace file for a specific session using the V$SESSION and V$PROCESS views : 
SQL> SELECT p.tracefile FROM v$session s JOIN v$process p ON s.paddr = p.addr WHERE s.sid = &ses_id; 

-- You may finish tracing whenever you want : 
SQL> ALTER SESSION SET sql_trace=FALSE; 

はのは、このようなダンプファイルを持ってみましょうtkprof utility OSからそれを読むには:

$ cd /u01/app/oracle/admin/MYDB11G/udump/ 
$ tkprof mydb11g_ora_TrcSqlParag.trc TrcSqlParag_Translated1.txt explain=<username>/<pwd>@mydb11g table=sys.plan_table sys=no waits=yes 
+1

ハイBarbaros、 ackoverflowのガイドラインでは、「感謝」と言う言葉を追加しないと言っていますが、私は今のところそれを言っています。私があなたの言ったことを試してきたので、それは私の特定のセッションのために働いたが、私はアプリケーション全体のためにこれをやりたい(私は "セッションを変更する"の代わりに "システムを変更する"と思っている)データを照合し、最終的に私が探しているクエリの応答時間を取得します。そんなにうまく書かれた詳細なステップ(「個人化された」ステップでさえも)に感謝します。私は数日でスレッドを更新します。 –

+1

こんにちはBarbaros、私は "システムを変更する"と上記を試してみました - 私はそれらを名前を付けることができませんでしたので、私のトレースファイルを識別するために少し痛いです。私は、javaコードはstmt.executeQueryの直前、それの直後、そして一度、結果セット全体をループした後にシステム時間をとります。次に、各ステップがどれくらいの時間を要したかを表示します。私はトレースから得た数値をこれにマップし、数を相関させるのにいくつかの困難を持っています。面白いことがあれば、もっと試してスレッドに追加します。 –

関連する問題