it-swarm.com.de

Wie bekommst du den Erklärungsplan?

Kann jemand bitte etwas über den Erklärungsplan erklären und wie bekommt man den Erklärungsplan für eine Abfrage? Auch wenn es ein SQL-Skript gibt, das als Dienstprogramm dafür verwendet werden kann, wäre das großartig.

10
user419534

Sie können das Paket DBMS_XPLAN verwenden:

SQL> explain plan for select * from dual;

Explained

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
--------------------------------------------------------------------
|   0 | SELECT STATEMENT     |             |     1 |     2 |     2 |
|   1 |  TABLE ACCESS FULL   | DUAL        |     1 |     2 |     2 |
--------------------------------------------------------------------
Note: cpu costing is off
9
Vincent Malgrat

Die Anweisung EXPLAIN PLAN zeigt Ausführungspläne an, die vom Optimierer für die Anweisungen SELECT, UPDATE, INSERT und DELETE ausgewählt wurden. Ein Anweisungsausführungsplan ist die Folge von Operationen, die die Datenbank ausführt, um die Anweisung auszuführen.

EXPLAIN PLAN FOR ...

Ersetzen Sie das ... durch Ihre SQL-Anweisung. Führen Sie nach dem Ausführen dieses Vorgangs Folgendes aus, um den Plan anzuzeigen:

SELECT * FROM table(dbms_xplan.display);

Weitere Informationen finden Sie in den Abschnitten Übersicht oder Verwendung im Oracle 11g Performance Tuning Guide.

5
Leigh Riffel

Dies ist eine sehr häufige Frage, daher habe ich beschlossen, diese Antwort in einen Artikel umzuwandeln.

Der geschätzte SQL-Ausführungsplan

Der geschätzte Ausführungsplan wird vom Optimierer generiert, ohne die SQL-Abfrage auszuführen. Sie können den geschätzten Ausführungsplan von jedem SQL-Client mit EXPLAIN PLAN FOR oder mit Oracle SQL Developer für diese Aufgabe.

Erklären Sie den Plan für

Wenn Sie bei Verwendung von Oracle den Befehl EXPLAIN PLAN FOR Einer bestimmten SQL-Abfrage voranstellen, speichert die Datenbank den geschätzten Ausführungsplan im zugehörigen PLAN_TABLE:

EXPLAIN PLAN FOR
SELECT p.id
FROM post p
WHERE EXISTS (
  SELECT 1
  FROM post_comment pc
  WHERE
    pc.post_id = p.id AND
    pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY

Um den geschätzten Ausführungsplan anzuzeigen, müssen Sie DBMS_XPLAN.DISPLAY Verwenden, wie im folgenden Beispiel dargestellt:

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'))

Mit der Formatierungsoption ALL + OUTLINE können Sie mehr Details zum geschätzten Ausführungsplan abrufen als mit der Standardformatierungsoption.

Oracle SQL Developer

Wenn Sie SQL Developer installiert haben, können Sie den geschätzten Ausführungsplan für jede SQL-Abfrage problemlos abrufen, ohne den Befehl EXPLAIN PLAN FOR voranstellen zu müssen:

(enter image description here

Der tatsächliche SQL-Ausführungsplan

Der eigentliche SQL-Ausführungsplan wird vom Optimierer beim Ausführen der SQL-Abfrage generiert. Im Gegensatz zum geschätzten Ausführungsplan müssen Sie die SQL-Abfrage ausführen, um den tatsächlichen Ausführungsplan zu erhalten.

Der tatsächliche Plan sollte sich nicht wesentlich vom geschätzten Plan unterscheiden, solange die Tabellenstatistiken von der zugrunde liegenden relationalen Datenbank ordnungsgemäß erfasst wurden.

GATHER_PLAN_STATISTICS Abfragehinweis

Um Oracle anzuweisen, den tatsächlichen Ausführungsplan für eine bestimmte SQL-Abfrage zu speichern, können Sie den Abfragehinweis GATHER_PLAN_STATISTICS Verwenden:

SELECT /*+ GATHER_PLAN_STATISTICS */
  p.id
FROM post p
WHERE EXISTS (
  SELECT 1
  FROM post_comment pc
  WHERE
    pc.post_id = p.id AND
    pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY

Um den tatsächlichen Ausführungsplan zu visualisieren, können Sie DBMS_XPLAN.DISPLAY_CURSOR Verwenden:

SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'))

Aktivieren Sie STATISTICS auf DB-Verbindungsebene

Wenn Sie die Ausführungspläne für alle in einer bestimmten Sitzung generierten Abfragen abrufen möchten, können Sie die Sitzungskonfiguration STATISTICS_LEVEL Auf ALL setzen:

ALTER SESSION SET STATISTICS_LEVEL='ALL'

Dies hat den gleichen Effekt wie das Festlegen des Abfragehinweises GATHER_PLAN_STATISTICS Für jede Ausführungsabfrage. Genau wie beim Abfragehinweis GATHER_PLAN_STATISTICS Können Sie DBMS_XPLAN.DISPLAY_CURSOR Verwenden, um den tatsächlichen Ausführungsplan anzuzeigen.

Sie sollten die Einstellung STATISTICS_LEVEL Auf den Standardmodus zurücksetzen, sobald Sie die Ausführungspläne gesammelt haben, an denen Sie interessiert waren. Dies ist sehr wichtig, insbesondere wenn Sie Verbindungspooling verwenden und Datenbankverbindungen wiederverwendet werden.

ALTER SESSION SET STATISTICS_LEVEL='TYPICAL'
1
Vlad Mihalcea