So stellen Sie SQL in Oracle 12c

Der größte Knall Sie gehen für Ihre Oracle 12c Datenbanken in Bezug auf die Performance-Tuning zu bekommen, ist durch eine gute Structured Query Language mit (SQL). Schlecht geschriebene SQL ist in erster Linie die Ursache für die meisten Performance-Probleme in jeder Datenbank.

Schreiben gute SQL aus der sich gehen, wenn eine neue Anwendung entwickelt, können Sie Eimer Geld und Zeit später speichern. Leider als Datenbankadministrator, die meisten Situationen befinden Sie sich in auf bereits bestehende Systeme sind, wo der SQL vorhanden ist, schon.

Wie zu generieren ein erklären Plan in Oracle 12c

Sagen Sie bitte ein Performance-Problem in der Datenbank zu einer bestimmten SQL-Anweisung nach unten verengt. Durch den Benutzer in Frage zu stellen und Testen das Problem selbst, haben Sie in der Lage gewesen, das Problem mit einer bestimmten SQL-Anweisung zu replizieren.

Eines der Instrumente mit der Datenbank zur Verfügung gestellt, die Sie zuerst mit vertraut zu machen wollen, ist Plan erläutern lassen. Erklären Sie planen tut genau das, was es sagt. Es zeigt Ihnen die Ausführung der SQL-Anweisung und erklärt, was jeder Schritt des Plans tut.

Das Erklären-Plan wird durch die Verwendung der SQL-Befehl EXPLAIN PLAN FÜR erzeugt. Als ein einfaches Beispiel, sagen Sie das folgende SQL-Anweisung haben, das eine lange Zeit in Anspruch nimmt, auszuführen:

SELECT vorname, last_nameFROM empWHERE last_name = 'Hopkins'-

Hier ist, wie Sie ein Plan zur vorhergehenden Erklärung Erklären Sie erzeugen:

EXPLAIN PLAN FORSELECT first_name, last_nameFROM empWHERE last_name = 'Hopkins'-

Sie sehen diese Ausgabe nach der Plan Erklären zu erzeugen:

Erklärt.

Nachdem die SQL-Anweisung ist standardmäßig erklärt wurde, wird der Plan im Data-Dictionary-Tabelle gespeichert der PLAN_TABLE $ genannt. Es gibt ein öffentliches Synonym, PLAN_TABLE, die alle Benutzer Zugriff auf diese internen Tabelle haben können.

Wie angezeigt werden und die SQL-Anweisung Ausgabe in Oracle 12c gelesen

Sie können die Informationen in der PLAN_TABLE in einer Reihe von Möglichkeiten herausziehen. Es gibt eine Vielzahl von Informationen dargestellt werden. Es werden alle ist es nicht immer sinnvoll. Eine einfache Methode ist es, ein Oracle bereitgestellten Skript ausführen, um die Informationen zu lesen und zu formatieren.

Diese Methode wird nur die jüngste Erklärung planen. Das Skript wird in der $ ORACLE_HOME / RDBMS / admin-Verzeichnis gespeichert. Das Skript wird utlxpls benannt. Von SQL in der gleichen Sitzung, wo Sie lief die ERKLÄREN, geben Sie dies:

SQL> @? RDBMS admin utlxpls

Eine Verknüpfung zur Angabe ORACLE_HOME ist die # 147 - # 148- wie in der vorhergehenden Erklärung gezeigt.

Das erklärt Ausgabe Ihrer SQL-Anweisung sieht wie folgt aus:

PLAN_TABLE_OUTPUT ------------------------------------------------- --------------------------Plan Hash-Wert: 3956160932 -------------------- -------------------------------------------------- ---- | id | Bedienung | name | Reihen | bytes | Kosten (% CPU) | Zeit | ------------------------------------------------ -------------------------- | 0 | SELECT-Anweisung | | 1 | 15 | 40335 (2) | 00.00.02 || * 1 | TABLE ACCESS FULL | EMP | 1 | 15 | 40335 (2) | 00.00.02 | -------------------------------------------- ------------------------------ Predicate Information (durch den Betrieb ID identifiziert): ----------- ---------------------------------------- 1 - Filter ( "LAST_NAME" = 'Hopkins ')

Obwohl es einige Erfahrung nimmt die feinen Details in den EXPLAIN PLAN-Ausgang, ein paar Dinge herausspringen zu lesen:

  • Die Verwendung eines vollständigen Tabellenscan (TABLE ACCESS FULL EMP)

  • Die Prädikats Information (1 -. Filter ( "LAST_NAME" = 'Hopkins') Dies ist Ihre where-Klausel.

  • Die Nummer 1 der Prädikats Informationen zurück zum Betrieb passen. Die Anzahl Indizes diese zurück zu dem Schritt in dem obigen Abschnitt. In diesem Beispiel scheint es einfach, aber, wenn Sie eine Karte mit Dutzenden von Linien erklären, dies kann sehr hilfreich sein.

Ein weiteres Bit von Informationen, die Sie beachten können, ist der Wert für COST. Im vorangehenden Fall, sind die Kosten 40335. Obwohl die Kosten an und für sich nicht unbedingt etwas für bare Münze bedeutet, können Sie es verwenden, um die Änderungen zu vergleichen, die Sie dem Ausführungsplan zu machen. Typischerweise ist, je niedriger die Kosten, desto besser ist Ihr Plan.

Statements mit vielen verschiedenen Operationen haben Kosten, die mit jedem Schritt verbunden. Mit Blick auf die Kosten für jeden Schritt können Sie bestimmen, welche Stufe der Ausführung ist die teuerste (resource-weise, nicht Geld-weise). Dann können Sie Ihre Stimmung auf der Bühne konzentrieren. Die meiste Zeit, wie Sie Änderungen vornehmen und die Kosten zu senken, sind Sie bewegt sich in die richtige Richtung zu machen.

Hier ist ein komplexeres Beispiel eines Ausführungsplans:

Plan forSELECT vorname, nachname, department_nameFROM emp beitreten Abteilungen mit (department_id) WHERE nachname = 'Hopkins'-Explained.Elapsed erklären: 00: 00: 00.09SQL> @?rdbmsadminutlxplsPLAN_TABLE_OUTPUT----------------------------------------------------------------------------------Plan Hash-Wert: 3338584009 ---------------------------------------------- ------------------------------------------ | id | Bedienung | name | Reihen | bytes | Kosten (% CPU) | Zeit | ------------------------------------------------ ---------------------------------------- | 0 | SELECT-Anweisung | | 1 | 34 | 40336 (2) | 00.00.02 || 1 | Nested Loops | ||| | || 2 | Nested Loops | | 1 | 34 | 40336 (2) | 00.00.02 || * 3 | TABLE ACCESS FULL | EMP | 1 | 18 | 40335 (2) | 00.00.02 || * 4 | INDEX UNIQUE SCAN | DEPT_ID_PK | 1 || 0 (0) | 00.00.01 || 5 | TABLE ACCESS BY INDEX ROWID | DEPARTMENTS | 1 | 16 | 1 (0) | 00.00.01 | -------------------------------------------- -------------------------------------- Predicate Information (identifiziert durch den Betrieb id): --- ------------------------------------------------3 - Filter ( "EMP" "LAST_NAME" = 'Hopkins'.) 4 - Zugang (.. "EMP" "DEPARTMENT_ID" = "DEPARTMENTS" "DEPARTMENT_ID")

In diesem Beispiel sehen Sie fünf Operationen. Mit Blick auf die Höhe Betrieb (Schritt 5) und Arbeits zurück, können Sie sehen, dass die Kosten wie folgt aussieht:

Schritt 5 = 1
Schritt 4 = 0
Schritt 3 = 40335
Schritt 2 = 40336
Schritt 1 = 40336
Total = 40336

Beachten Sie, wie die Kosten für alle Schritte summiert. Beachten Sie auch, wie die Kosten für Schritt 3 ist mit Abstand das teuerste. Mit dieser sagte, möchte ein Datenbankadministrator (DBA) auf seine Optimierungsmaßnahmen auf 3 Schritt konzentrieren.

Menü