Wie Oracle 12c SQL Tuning Advisor to Run

Oracle 12c bietet ein nützliches Dienstprogramm, das SQL Tuning Advisor genannt. Sie können diese eingebaute Tool verwenden Anregungen oder Empfehlungen über bestimmte SQL-Anweisungen zu geben. Obwohl es nicht immer perfekt Rat geben kann, genau wie alles andere, es in der Toolbox von Tuning-Techniken, die von Vorteil ist.

  1. Verwenden Sie PL / SQL und das interne Paket DBMS_SQL_TUNE eine Tuning-Aufgabe zu erstellen. Geben Sie dies:

    DECLAREl_sqlVARCHAR2 (500) -l_sql_tune_task_id VARCHAR2 (100) -BEGINl_sql: = 'SELECT vorname, nachname, department_name' || 'FROM emp JOIN Abteilungen weiter verwenden (department_id)' || 'WHERE nachname =' 'Hopkins' '' - l_sql_tune_task_id: = DBMS_SQLTUNE.create_tuning_task (sql_text => l_sql, user_name => 'HR', scope => DBMS_SQLTUNE.scope_comprehensive, TIME_LIMIT => 60, task_name => 'emp_dept_tuning_task', description => 'Tuning Aufgabe für einen EMP DEPARTMENT Abfrage verbinden.' ) -DBMS_OUTPUT.put_line ( 'l_sql_tune_task_id:' || l_sql_tune_task_id) -END- /

    Sie sollten die folgende sehen:

    PL / SQL-Prozedur erfolgreich abgeschlossen.

    Im vorigen Befehl, notieren Sie die TIME_LIMIT von 60, dass die Bearbeitungszeit auf 60 Sekunden begrenzt. Sie können nicht immer wollen so etwas wie dies für längere Zeit in der Datenbank ausgeführt werden, weil es den Systemaufwand entstehen.

  2. Führen Sie den Tuning-Berater mit Ihrer Aufgabe durch diese eingeben:

    EXEC DBMS_SQLTUNE.execute_tuning_task (task_name => 'emp_dept_tuning_task') -

    Wegen der Grenze von 60 Sekunden in der Aufgabenerstellung zur Verfügung gestellt, kann dieser Schritt bis 60 Sekunden dauern, bis abzuschließen. Während dieser Zeit Ihre prompte kommen wieder nicht.

    Wenn sie abgeschlossen ist, sollten Sie folgendes sehen:

    PL / SQL-Prozedur erfolgreich abgeschlossen.

    Wenn Sie eine längere Zeit und werden langsam ungeduldig festgelegt haben, können Sie eine andere SQL-Fenster öffnen, um sicherzustellen, dass die Aufgabe noch ausgeführt wird, indem Sie

    SELECT task_name, Status, execution_startFROM dba_advisor_log WHERE owner = 'HR'-

    Sie sehen in etwa wie folgt:

    TASK_NAME STATUS EXECUTION_START ------------------------------ --------------- - ------------------ emp_dept_tuning_task EXECUTING19-jul-2013 15.35.42
  3. Wenn die Ausführung abgeschlossen ist, können Sie die Ergebnisse anzeigen, indem Sie die BMS_SQLTUNE.report_tuning_task Prozedur ausgeführt wird. Geben Sie den folgenden:

    SELECTDBMS_SQLTUNE.report_tuning_task ( 'emp_dept_tuning_task') AS recommendationsFROM Dual-

    Aus Gründen der Raum, haben wir einige Abschnitte aus dem Ausgang snipped, die folgt, aber Sie sehen etwas wie folgt aus:

    RECOMMENDATIONS---------------------------------------------------------------------------------GENERAL INFORMATIONEN ABSCHNITT ------------------------------------------------ --------------------------------- Tuning Task-Name: emp_dept_tuning_taskTuning Aufgabe Besitzer: HRWorkload Typ: Single SQL StatementScope: COMPREHENSIVETime Grenze (Sekunden): 60Completion Status: INTERRUPTEDStarted an: 2013.07.19 15: 21: 39Completed an: 2013.07.19 15.22.43 ------------------ -------------------------------------------------- ------------- Fehler: ORA-13639: Der aktuelle Vorgang unterbrochen wurde, weil es zeitlich out.------------------------------------------------------------------------------------------------------------------------------------------------------------------Schema Name: HRSQL ID: 47uvvzcuu5mdgSQL Text: SELECT vorname, nachname, department_name FROM emp JOINdepartments weiter verwenden (department_id) WHERE nachname = 'Hopkins'RECOMMENDATIONS------------------------------------------------------------------------------------------------------------------------------------------------------------------FINDINGS ABSCHNITT (1 Befund) --------------------------------------------- ------------------------------------ 1- Index Finding (siehe Pläne Abschnitt weiter unten erklären) --- ----------------------------------------------- Der Ausführungsplan dieser Aussage kann durch die Schaffung einer oder moreindices.Recommendation (geschätzte Nutzen: 99,98%) verbessert werden ------------------------------ ------------- Betrachten Sie den Access Advisor läuft das physische Schema Designor Erstellung der empfohlenen index.create Index HR.IDX $$ _ 03170001 auf HR.EMP ( "LAST_NAME") zu verbessern - Rationale-- ------- die empfohlenen Indizes Erstellen verbessert deutlich die Ausführung planof dieser Aussage. Allerdings könnte es vorteilhaft sein "Access Advisor" mit Hilfe einer repräsentativen SQL Workload ausgeführt werden als auf einer einzigen Anweisung gegenüber. Thiswill erlauben umfassende Index Empfehlungen zu erhalten, die nimmt intoRECOMMENDATIONS--------------------------------------------------------------------------------account Index Wartungsaufwand und zusätzlichen Platzverbrauch .... Ausgang snipped ...

    Der letzte Teil des Berichts zeigt die Vor und nach Ausführungspläne. In diesem Fall haben Sie das gesehen vor, wenn Sie Ausführungspläne wurden zu erzeugen. Gehen Sie voran und fügen Sie den Index, regenerieren den Ausführungsplan, und sehen, ob Sie eine Verbesserung vorgenommen haben.

    Bevor Sie mit dem Index hinzufügen, beachten Sie, dass die Empfehlungen der SQL geben den Index hinzuzufügen:

     Empfehlung (geschätzte Nutzen: 99,98%) ------------------------------------------ - Betrachten Sie den Access Advisor läuft Designor Erstellung der empfohlenen index.create Index HR.IDX $$ _ 03170001 auf HR.EMP ( "LAST_NAME"), um das physische Schema zu verbessern -

    Beachten Sie auch, dass Oracle eine Warnung gibt:

    RECOMMENDATIONS--------------------------------------------------------------------------------account Index Wartungsaufwand und zusätzlichen Platzverbrauch.
  4. Fügen Sie den Index mit Ihrem eigenen Namen durch diese eingeben:

    CREATE INDEX emp_last_name_idx ON emp (last_name) -

    Sie sollten so etwas wie die folgende:

    Index erstellt.
  5. Werfen Sie einen Blick auf die Ausführungsplan. Geben Sie den folgenden:

    Plan forSELECT vorname, nachname, department_nameFROM emp beitreten Abteilungen mit (department_id) WHERE nachname = 'Hopkins'-Explained.Elapsed erklären: 00: 00: 00.09

    Und dann geben

    @? RDBMS admin utlxpls

    Sie sollte eine Ausgabe wie diese:

PLAN_TABLE_OUTPUT---------------------------------------------------------------------------------Plan Hash-Wert: 1505300146 ---------------------------------------------- ----------------------------------- | id | Bedienung | name | Reihen | bytes | Kosten (% CPU) | Zeit | ------------------------------------------------ --------------------------------- | 0 | SELECT-Anweisung | | 1 | 34 | 5 (0) | 00.00.01 || 1 | Nested Loops | ||| ||| 2 | Nested Loops | | 1 | 34 | 5 (0) | 00.00.01 || 3 | TABLE ACCESS BY INDEX ROWID Batched | EMP | 1 | 18 | 4 (0) | 00.00.01 || * 4 | INDEX RANGE SCAN | EMP_LAST_NAME_IDX | 1 || 3 (0) | 00.00.01 || * 5 | INDEX UNIQUE SCAN | DEPT_ID_PK | 1 || 0 (0) | 00.00.01 || 6 | TABLE ACCESS BY INDEX ROWID | DEPARTMENTS | 1 | 16 | 1 (0) | 00.00.01 | -------------------------------------------- ------------------------------------- Predicate Information (identifiziert durch den Betrieb id): ---- ----------------------------------------------- 4 - Zugang (. "EMP" "LAST_NAME" = 'Hopkins') 5 - Zugang ( "EMP" "DEPARTMENT_ID" = "DEPARTMENTS" "DEPARTMENT_ID"..)

Nun, da Sie den Index hinzugefügt haben, ein paar Dinge sind offensichtlich:

  • Die Kosten des Plans fiel 40336-5.

  • Inzwischen gibt es sechs Stufen.

  • Der vollständige Table-Scan ist verschwunden. sehen Sie stattdessen die Verwendung Ihres neuen Index.

Oft eine der harten Teile über eine Datenbank-Tuning ein solides Verständnis der Anwendung ist und mit den Daten. Das Problem ist vielleicht nicht immer offensichtlich. Manchmal Eingriff andere Anwendung und Datenexperten hilft.

Erklären Sie ihnen, Ihre Erkenntnisse und was Sie vorschlagen. Sie können in der Lage sein, Sie zu einem Ergebnis kommen zu helfen. Auch, wenn der Datenteil einer verpackten Anwendung von Drittanbietern ist, manchmal ein Ticket mit dem Anbieter zu öffnen ist der Weg zu gehen.

Menü