0

In Oracle 11g möchte ich die Antwortzeit eines bestimmten SQL (ich kenne die SQL_ID des SQL) zu überwachen. Bedeutung, ich möchte die Antwortzeit der SQL jedes Mal wissen, dass es ausgeführt wird. Ich würde „Turn it on“ für einige Zeit und dann möchte ein Datum so etwas wie sehen:Messung/Überwachung Reaktionszeit jeder Ausführung eines SQL

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

können wir das genaue Format ignorieren Ich mag würde die Ausgabe sehen, aber ist es eine Möglichkeit für ich zu überwachen, dass ich die Antwortzeit für jede Ausführung für meine SQL bekommen kann?

Danke.

Antwort

1

Zunächst sollten Sie Ihre SQL-Trace (nehmen sql_id: 6b0z40gs9m759):

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; 

Lassen Sie uns einen solchen Dump-Datei haben:

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

Die Trace-Datei zu lesen, ist nicht einfach, wir brauchen tkprof utility es von OS zu lesen:

$ 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

Hallo Barbaros, obwohl die st Ackoverflow-Richtlinien sagen, fügen Sie keinen Kommentar hinzu, um "Danke" zu sagen, ich sage das gerade für jetzt. Weil ich das, was du gesagt hast, ausprobiert habe und es für meine spezifische Sitzung funktioniert hat, aber ich möchte das für die gesamte App tun (ich rate "alter system" anstelle von "alter session") und dann sehen, ob ich dazu in der Lage bin um die Daten zu sortieren und schließlich die Abfrage-Antwortzeit zu erhalten, nach der ich suche. Danke für so schön geschriebene detaillierte Schritte (auch "personalisierte" Schritte!). Ich werde den Thread in ein paar Tagen aktualisieren. –

+1

Hallo Barbaros, ich habe das oben mit "Alter System" versucht und die Dinge haben funktioniert - obwohl es ein bisschen schmerzhaft war, meine Trace-Dateien zu identifizieren, da ich sie nicht benennen konnte. Ich habe einen Java-Code nimmt Systemzeit kurz vor stmt.executeQuery, direkt danach und dann einmal nach dem Durchlaufen der gesamten Ergebnismenge. Dann wird gedruckt, wie lange jeder Schritt dauerte. Ich versuche, die Zahlen, die ich von der Spur erhalte, auf diese zu mappen und habe Schwierigkeiten, die Zahlen zu korrelieren. Ich werde mehr versuchen und zum Thread hinzufügen, wenn ich dort etwas Interessantes finde. –