Ich habe eine gespeicherte Prozedur, die aus einer einzelnen SELECT-Abfrage besteht, die zum Einfügen in eine andere Tabelle verwendet wird, basierend auf einer kleinen Mathematik, die mit den Argumenten in der Prozedur ausgeführt wird. Kann ich den Plan, der für diese Abfrage verwendet wird, generieren, indem ich irgendwie auf die Prozedur verweise, oder muss ich die Abfrage kopieren und einfügen und Bindungsvariablen für die Eingabeparameter erstellen?Plan für Abfrage in einer gespeicherten Prozedur erklären
Antwort
Verwenden Sie SQL Trace and TKPROF. Öffnen Sie beispielsweise SQL * Plus, und dann geben Sie den folgenden Code: -
alter session set tracefile_identifier = 'something-unique'
alter session set sql_trace = true;
alter session set events '10046 trace name context forever, level 8';
select 'right-before-my-sp' from dual;
exec your_stored_procedure
alter session set sql_trace = false;
Sobald dies geschehen ist, gehen Sie Ihre Datenbank des udump Verzeichnis für eine TRC-Datei suchen mit „etwas-unique“ im Dateinamen. Formatieren Sie diese TRC-Datei mit TKPROF, öffnen Sie dann die formatierte Datei und suchen Sie nach der Zeichenfolge "Right-before-my-sp". Der SQL-Befehl, der von Ihrer gespeicherten Prozedur ausgegeben wird, sollte kurz nach diesem Abschnitt sein, und unmittelbar unter dieser SQL-Anweisung ist der Plan für die SQL-Anweisung.
Edit: Für die Zwecke der vollständigen Offenlegung, sollte ich all jenen danken, die mir Antworten auf this thread letzte Woche, die mir lernen geholfen, wie dies zu tun.
Soweit ich verstehe, wurde dies absichtlich gemacht. Die Idee ist, dass einzelne Abfragen innerhalb der Prozedur vom Optimierer getrennt betrachtet werden. Daher ist EXPLAIN PLAN nicht sinnvoll für eine gespeicherte Prozedur, die mehrere Abfragen/Anweisungen enthalten könnte.
Die aktuelle Antwort ist NEIN, Sie können es nicht gegen einen Proc ausführen, und Sie müssen es gegen die einzelnen Anweisungen selbst ausführen. Schwierig, wenn Sie Variablen und Berechnungen haben, aber so ist es.
Viele Tools, wie Toad oder SQL Developer, werden Sie beim Ausführen eines EXPLAIN-Plans zur Eingabe der Bindevariablenwerte auffordern. Sie müssten dies manuell in SQL * Plus oder anderen Tools tun.
Sie können auch die SQL-Ablaufverfolgung aktivieren und die gespeicherte Prozedur ausführen und dann den EXPLAIN-Plan aus der Ablaufverfolgungsdatei abrufen.
Achten Sie darauf, dass Sie nicht nur den EXPLAIN-Plan für die SELECT-Anweisung abrufen. Das Vorhandensein der INSERT-Klausel kann das Optimierungsziel von den ersten Zeilen in alle Zeilen ändern.
- 1. JDBC Oracle - Holt Plan für Abfrage erklären
- 2. Abfrage von Ergebnissen einer gespeicherten Prozedur
- 3. Ausführen einer gespeicherten Prozedur innerhalb einer gespeicherten Prozedur
- 4. Verständnis erklären Plan durch xmltype
- 5. Suchen einer gespeicherten Prozedur
- 6. SQL Abfrage IF-Anweisung in gespeicherten Prozedur
- 7. Verschiedene erklären Plan in demselben Cluster
- 8. Auftrag von einer gespeicherten Prozedur
- 9. Exit von einer gespeicherten Prozedur
- 10. Ausführen einer gespeicherten Prozedur in einer anderen gespeicherten Prozedur in SQL Server
- 11. wie generieren Plan für gesamte gespeicherte Prozedur erklärt
- 12. Aufrufen der gespeicherten Prozedur
- 13. Zuweisen einer Auswahl zu einer Variablen in einer gespeicherten Prozedur
- 14. Suche Zeichenfolge in einer gespeicherten Prozedur
- 15. Wie Debuggen einer gespeicherten Prozedur in Toad?
- 16. sql2000 Schleife in einer gespeicherten Prozedur
- 17. Aufrufen einer gespeicherten Prozedur in Toad
- 18. LEFT JOIN Problem innerhalb einer gespeicherten Prozedur
- 19. .NET-Schema für ein Ergebnis einer gespeicherten Prozedur erhalten
- 20. Get in einer anderen gespeicherten Prozedur Rückgabewert von gespeicherten Prozedur in SQL
- 21. Erstellen einer gespeicherten Prozedur zum Zurückgeben der Zeilenanzahl einer anderen gespeicherten Prozedur
- 22. Wie unterdrücke ich die Ergebnisse einer gespeicherten Prozedur aus einer gespeicherten Prozedur?
- 23. Übersetzen meiner gespeicherten Prozedur Abfrage in gültigen T-SQL
- 24. SQL Aggregat Ergebnisse einer gespeicherten Prozedur
- 25. Mysql Call Gespeicherte Prozedur von einer anderen gespeicherten Prozedur
- 26. können wir verschiedene Abfragen in einer gespeicherten Prozedur gleichzeitig ausführen?
- 27. MySQL optimieren langsame UNION Abfrage in gespeicherten Prozedur
- 28. Ausführen einer gespeicherten Prozedur in einer SELECT-Anweisung
- 29. Filtern der Ergebnismenge einer gespeicherten Prozedur
- 30. Ausführen eines FuncView innerhalb einer gespeicherten Prozedur
Große Antwort Mike. Danke für den Tipp. –
Ich muss es an andere hier in der Gruppe weitergeben, sie haben mich erst letzte Woche mit SQL Trace und TKPROF angefangen. –