Wie finden Sie die Kosten einer gespeicherten Prozedur in Oracle und optimieren
Kann jemand lassen Sie mich wissen, wenn es irgendeinen Weg gibt, um herauszufinden, die Kosten einer gespeicherten Prozedur in Oracle? Wenn keine direkte Möglichkeit da ist, würde ich gerne wissen ersetzt.
Die Art und Weise fand ich die Kosten tut eine auto-trace von allen Abfragen in der gespeicherten Prozedur und anschließend eine Schätzung der proc-Kosten entsprechend der Häufigkeit der Suchanfragen, die Ausführung.
Außerdem möchte ich Anregungen zur Optimierung meiner gespeicherten Prozedur, vor allem die Abfrage, die unten gegeben werden.
Logik der Vorgehensweise:
Unten ist die dynamische sql-Abfrage verwendet einen cursor an meine gespeicherten Prozedur. Diese cursor geöffnet wird, und holte sich innerhalb einer Schleife. Ich hol die Infos und steckte Sie in ein varray, zählen Sie die Daten aus, und dann legen Sie es auf eine Tabelle.
Mein Ziel ist es, herauszufinden, die Kosten der proc als auch die Optimierung des sp.
SELECT DISTINCT acct_no
FROM raw
WHERE 1=1
AND code = ''' || code ||
''' AND qty < 0
AND acct_no
IN (SELECT acct_no FROM ' || table_name || ' WHERE counter =
(SELECT MAX(counter) FROM ' || table_name || '))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer der beste Werkzeug bei der Analyse von SQL-und PLSQL performance ist die native Die SQL-Ablaufverfolgung.
aktivieren der Ablaufverfolgung in der Sitzung:
Führen Sie Ihr Verfahren
Ihre Sitzung beenden
Navigieren Sie zu Ihrem server
udump
Verzeichnis und finden Sie die trace-Datei (in der Regel der neuesten)Führen Sie tkprof
Dieser erzeugt eine Datei mit einer Liste aller Aussagen mit vielen Informationen, einschließlich der Häufigkeit, mit der jeder hingerichtet wurde, seinen query-plan und Statistiken. Dies ist detaillierter und genauer als die manuelle Ausführung des plans für jedes wählen.
Wenn Sie möchten, um die Leistung zu optimieren, die auf einem Verfahren, würden Sie in der Regel Sortieren Sie die trace-Datei durch die Zeit, die zum ausführen (mit
sort=EXEELA
) oder fetch SQL und versuchen zur Optimierung der Abfragen, die machen die meiste Arbeit.Können Sie auch die trace-Datei log-wait-Ereignisse mithilfe des folgenden Befehl bei Schritt 1:
Den Weg, um herauszufinden, die Kosten (in der Ausführung-Zeit) für eine gespeicherte Prozedur ist es, mit einem profiler. 11g eingeführt, der Hierarchische Profiler, der ist sehr ordentlich. Erfahren Sie mehr.
Vor 11g war es nur der DBMS_PROFILER, das ist gut genug, vor allem, wenn Ihre gespeicherte Prozedur nicht verwenden Objekte, die in anderen schemas. Erfahren Sie mehr.
Trace ist gut für die Identifizierung von schlecht funktionierenden SQL. Profiler sind gut für die Ermittlung der Kosten für die PL/SQL-Elemente einer stored proc. Wenn Sie Ihr proc-hat einige teure Berechnung von Elementen, die nicht Lesen oder schreiben in Tabellen, die nicht zeigen, bis in der SQL-Ablaufverfolgung.
Ebenso, wenn Sie haben eine gut abgestimmte SQL-statement, aber benutzen Sie es schlecht ia profiler laufen ist wahrscheinlich mehr Hilfe, als trace. Ein Beispiel, was ich meine, ist eine wiederholte Ausführung des gleichen SELECT-Anweisung innerhalb einer Cursor-Schleife: ich weiß, dass ist nicht ganz das, was du tust, aber es ist nah genug.
Anscheinend ist der hierarchische profiler DBMS_HPROF ist standardmäßig installiert in 11g sondern ein DBA zu gewähren hat einige Privilegien für Entwickler, die es verwenden möchten. Erfahren Sie mehr.
Installieren der DBMS_PROFILER in 10g (oder früher) ein DBA hat, um dieses Skript auszuführen:
Sicher sein, um die reporting-Infrastruktur sowie:
(Den Namen oder den Ort des Skripts variieren in früheren Versionen).
Der einfache Weg ist, um die Prozedur auszuführen und dann die Abfrage v$sql.
wenn Sie möchten, ein kleiner Tipp, um Ihr Leben leichter (nicht nur für Pakete) fügen Sie eine leere Kommentar zu die Abfrage innerhalb der Prozedur, so etwas wie
und dann die Abfrage v$sql wie folgt
der beste Weg ist definitiv der Weg @Vincent Malgrat vorgeschlagen.
Glück.
hash_value
,old_hash_value
undnew_hash_value
. Welche von Ihnen berücksichtigt werden sollten? Und es wird auch nicht sezieren die Abfrage wietrace
tut.tkprof
mehr Informationen liefern. v$sql grundlegende Informationen wie Hinrichtungen , elapsed time, cpu time, memory usage , parse time , hard/soft parse etc ...