pl/sql - doag.org · pdf file• pl/sql wird jetzt optimiert durch einen optimierenden...

41
Copyright ORDIX AG PL/SQL - Debugging und -Tuning 1 Beate Künneke Senior Consultant, ORDIX AG, Paderborn [email protected] Deutsche Oracle Anwenderkonferenz 2006 PL/SQL Debugging und -Tuning

Upload: doanngoc

Post on 05-Feb-2018

216 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 1

Beate KünnekeSenior Consultant, ORDIX AG, [email protected]

Deutsche OracleAnwenderkonferenz 2006

PL/SQLDebugging und -Tuning

Page 2: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 2

Agenda

- Motivation

- PL/SQL-Debugging

- PL/SQL-Tuning

- Fragen & Antworten

Page 3: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 3

Motivation

SQL> start prc_auswertung; ???

SQL> PL/SQL-Prozedur erfolgreich abgeschlossen.

Page 4: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 4

Agenda

- Motivation

- PL/SQL-Debugging

- PL/SQL-Tuning

- Fragen & Antworten

Page 5: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 5

Übersicht PL/SQL-Debugging

• Datenbankseitige Unterstützung• dbms_output• eigene Lösung• dbms_profiler• dbms_debug

• Oracle-Tools• JDeveloper• SQL-Developer

• Andere Tools

Page 6: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 6

DBMS_OUTPUT

• Datenbankseitiges Package• Ausführungsrecht ist „public“• Ausgabe auf dem Bildschirm/in Spool-Datei auf dem aufrufenden

Rechner• Ausgabe von „beliebigem“ Text• Steuerung in SQL*PLUS über set serveroutput on

einfach, kann bereits während der Implementierung eingefügt werden

erst nach dem Schreiben des Buffers sichtbar

keine Beeinflussung während des Programmablaufs möglich

Page 7: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 7

DBMS_OUTPUT- Beispiel -

CREATE OR REPLACE PROCEDURE m_total_gehalt(gesamt OUT NUMBER) ASCURSOR mitarbeiter_cursor IS

SELECT gehaltFROM mitarbeiter;

zaehler NUMBER(10) := 1;BEGIN FOR mitarbeiter_record IN mitarbeiter_cursor LOOP

gesamt := 0;gesamt := gesamt + mitarbeiter_record.gehalt;DBMS_OUTPUT.PUT_LINE('Schleifendurchlauf='||zaehler|| ' Summe Gehalt = ' || to_char(gesamt));zaehler := zaehler + 1;

END LOOP;

DBMS_OUTPUT.PUT_LINE('Gesamtgehalt = ' || to_char(gesamt));END m_total_gehalt;

Page 8: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 8

DBMS_OUTPUT- Beispiel Ausgabe -

Die Ausgabe sieht dann wie folgt aus:

- Schleifendurchlauf = 1 Summe Gehalt = 2000

- Schleifendurchlauf = 2 Summe Gehalt = 2500

- Schleifendurchlauf = 3 Summe Gehalt = 3000

- Schleifendurchlauf = 4 Summe Gehalt = 2700

- Gesamtgehalt = 2700

Page 9: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 9

DBMS_OUTPUT

• Die Ausgabe ist nun nicht mehr beschränkt auf 1.000.000 Zeichen

SET SERVEROUTPUT ON SIZE UNLIMITED FORMAT WORD_WRAPPED

• Die maximale Zeilengröße ist ab Version 10g 32767(bisher 255 Zeichen)

• Eine ähnliche Funktionalität zur Ausgabe in das Filesystem desServers bietet utl_file

Page 10: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 10

Eigene Lösung

• Als Erweiterung zu dbms_debug gedacht

• Protokollierung in eine Tabelle

• Durch autonome Transaktionen sofort abgreifbar

• Damit detaillierte Analyse möglich

• Ein-/Ausschalten durch Setzen von Schaltern möglich

- auf Session-Ebene

- durch Eintrag in Tabelle auch währenddes Programmablaufs möglich

• Ergebnisse können auch rückwirkend noch ausgewertet werden

einfach, flexibel, gute Auswertemöglichkeiten

Page 11: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 11

Eigene Lösung- Implementierung -

CREATE TABLE debug_log(zeitstempel TIMESTAMP,text VARCHAR2(4000));

CREATE OR REPLACE PACKAGE pck_debugas schalter BOOLEAN:=FALSE; procedure put_line(p_text IN VARCHAR2);END;/CREATE OR REPLACE PACKAGE BODY pck_debugas procedure put_line(p_text IN VARCHAR2) IS PRAGMA AUTONOMOUS_TRANSACTION; begin IF schalter THEN INSERT INTO DEBUG_LOG VALUES (SYSTIMESTAMP,P_TEXT); COMMIT; END IF; end;END;/

Page 12: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 12

Eigene Lösung- Beispiel -

...

pck_debug.schalter:=true; -- pck_debug.schalter:=false; FOR pc_kn IN c_kn_vorhanden( pc_pad.bp_kenn,

pc_pad.nl,pc_pad.biber, pc_pad.stammnummer)

LOOP pck_debug.put_line('KN: '||pc_pad.bp_kenn||' bereits

angelegt');

...SELECT * FROM debug_log ORDER BY zeitstempel;

Page 13: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 13

Eigene Lösung- Ausblick -

Flexibilität ???

Beispiel:- Breakpoints

• Steuerung über Einträge in eine Steuertabelle undeiner Funktion mit Warteschleife bis Wert gesetzt ist

- Setzen von Variablenwerten• analog zu oben• Rückgabe des „neuen“ Variablenwertes

Page 14: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 14

DBMS_DEBUG

• PL/SQL-Package, somit unmittelbar verfügbar

• erfordert 2 Sessions:

- Target: Erstellen von Debug-Information

- Debug-Session: Steuerung der Target-Session

Flexibles Debuggen durch Setzen von Breakpoints,Anzeigen von Variablenwerten

Source-Code muss zum Debuggen nicht verändert werden

Aufwändig durch die Erstellung von notwendigem Quelltext

für das Debuggen von komplexen Programmteilen sinnvoll

Page 15: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 15

DBMS_DEBUG- Typische Fragen -

• Wie heißt das Programm?

• In welcher Zeile befinde ich mich?

• Wie groß ist die Stacktiefe?

• Wie sieht der Quell-Code der aktuellen Zeile aus?

• Mit welchen Werten sind die Variablen belegt?

Page 16: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 16

DBMS_DEBUG- Ablauf -

für die Target Session:• Session zum Debuggen

initialisieren

• Debugging starten

• PL/SQL Programm ausführen

• Debugging stoppen

für die Debug-Session:• DBMS_DEBUG.attach_session()

mit der Debug-Id der Target-Session

• Manipulieren der Breakpoints

• Synchronisation => Abgreifen derInformation zu einem Event

• Setzen von Variablen

• Anzeige des zugehörigenSourcecodes

• Weitere Ausführung anstoßen(CONTINUE)

• Ist das Programm fertig?

• DBMS_DEBUG.detach_session()

Page 17: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 17

DBMS_PROFILER

Bietet Funktionalitäten für Debugging und Performance-Analyse!

• Debugging in Form von:

• Welche Zeile wurde wie oft durchlaufen?

• Performance Analyse:

• Wieviel Kosten hat das pro Zeile(total, Minimum, Maximum) verursacht?

Page 18: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 18

DBMS_PROFILER- Ablauf -

• Voraussetzung: PROFTAB.SQL oder PROFLOAD.SQL

• Start des Profiling- DBMS_PROFILER.START_PROFILER

• Ausführen der zu analysierenden Programmteile- exec mdb_import.pad;

• Wegschreiben der gesammelten Informationen- DBMS_PROFILER.FLUSH_DATA/ DBMS_PROFILER.STOP_PROFILER;

• Auswertung über- PLSQL_PROFILER_RUNS- PLSQL_PROFILER_UNITS- PLSQL_PROFILER_DATA

Page 19: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 19

SQL-Developer

• Kostenfreies Tool von Oracle• Java-Anwendung (28.9 M wenn JDK 1.5 bereits installiert)• Welche Objekte können debuggt werden?

- Proceduren, Funktionen, Packages- unterstützt

• Haltepunkte• Anzeige von Variablenwerte• Setzen von Variablenwerten

=> was passiert wenn...• Hineinbewegen in untergeordnete Objekte

Page 20: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 20

SQL-Developer

Page 21: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 21

JDeveloper

• JPDA (java platform debugger architecture)- Industriestandard für Java Debugging- unterstützt

• Haltepunkte• Anzeige von Variablenwerte• Setzen? Von Variablenwerten

=> was passiert wenn...

• Welche Objekte können debuggt werden?- Stored Procedures und Funktions- Packages

Page 22: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 22

JDeveloper

• Voraussetzungen- Modus INTERPRETED (nicht NATIVE)- Rechte

• DEBUG ANY PROCEDURE• DEBUG CONNECT SESSION

- Kompilierung des Objektes mit der Option DEBUG• ALTER <procedure, function, package <name> COMPILE DEBUG;• Jdeveloper: Auswahl Tools/Preferences/Database Connections

=>Generate PL/SQL Debug Information

• Debugging-Arten- Lokaler Aufruf im JDeveloper- Manuelles Starten des Programmes aus SQL*PLUS,...

Anbindung eines Debugger-Prozesses

Page 23: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 23

Jdeveloper- Lokaler Aufruf -

Page 24: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 24

Jdeveloper- Remote Debugging and Profiling -

Page 25: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 25

Agenda

- Motivation

- PL/SQL-Debugging

- PL/SQL-Tuning

- Fragen & Antworten

Page 26: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 26

Übersicht PL/SQL-Tuning

• Tracing- dbms_trace- dbms_monitor- dbms_application_info- tkprof

• Tuning- Verbesserungen der Version 10g- Tipps- Harness Software Kit

Page 27: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 27

Dbms_trace

• Voraussetzung: sys muss tracetab.sql ausführen- => 2 Tabellen und 1 Sequenz wird erzeugt- SYS.PLSQL_TRACE_RUNS

welcher user hat wann Trace durchgeführt- SYS.PLSQL_TRACE_EVENTS

enthält die eigentlichen Informationen

• Es können Level festgelegt werden- trace_all_calls / trace_enabled_calls- trace_all_exceptions / trace_enabled_exceptions- trace_all_sql / trace_enabled_sql- trace_all_lines / trace_enabled_lines:

• Die zu tracenden Programmeinheiten müssen mit der DebugOption kompiliert werden.

Page 28: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 28

Dbms_trace- Beispiel -

ALTER PROCEDURE TRACE_TEST COMPILE DEBUG;ALTER PROCEDURE test_proc COMPILE DEBUG;

PROCEDURE TRACE_TEST IS test_ex EXCEPTION;BEGIN -- Tracing beginnen: DBMS_TRACE.SET_PLSQL_TRACE(DBMS_TRACE.trace_enabled_exceptions); DBMS_TRACE.SET_PLSQL_TRACE(DBMS_TRACE.trace_all_calls );

test_proc; RAISE test_ex; -- Tracing beenden (wird hier aber wegen RAISE nicht abgearbeitet) DBMS_TRACE.CLEAR_PLSQL_TRACE;EXCEPTION WHEN test_ex THEN DBMS_TRACE.CLEAR_PLSQL_TRACE; WHEN OTHERS THEN DBMS_TRACE.CLEAR_PLSQL_TRACE;END;SELECT * FROM SYS.PLSQL_TRACE_EVENTSWHERE RUNID=(SELECT MAX(RUNID) FROM SYS.PLSQL_TRACE_RUNSWHERE RUN_OWNER = 'SCOTT')

Page 29: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 29

Dbms_application_info

• Performance kann pro Modul analysiert werden

• dazu muss die Applikation registriert werden

• Ressourcenbelegung kann ebenfalls ermittelt werden

• sichtbar in v$session und v$sqlarea

• Information über langlaufende Operationen:v$session_longops

Page 30: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 30

Dbms_application_info- Beispiel -

CREATE or replace PROCEDURE add_employee(name VARCHAR2,salary NUMBER,manager NUMBER,title VARCHAR2,commission NUMBER,department NUMBER) AS

BEGINDBMS_APPLICATION_INFO.SET_MODULE(

module_name => 'add_employee',action_name => 'insert into emp');

INSERT INTO emp(ename, empno, sal, mgr, job, hiredate, comm, deptno)VALUES (name, emp_seq.nextval, salary, manager, title, SYSDATE,commission, department);

DBMS_APPLICATION_INFO.SET_MODULE(null,null);END;

Page 31: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 31

tkprof - Ausführung

• Einschalten des Tracing für eine Session• Analysezeitraum abwarten• Ausschalten des Tracing• Trace Datei identifizieren• Trace Datei mit tkprof bearbeiten (Betriebssystem)• Ausgabe analysieren

dbms_system.set_sql_trace_in_session(<session_id>, <serial_id>, TRUE

);

dbms_system.set_sql_trace_in_session( <session_id>, <serial_id>, FALSE

);

user_dump_destuser_dump_dest <db_name>_ora_<spid>.ora<db_name>_ora_<spid>.ora

Trace.txtTrace.txt

tkprof tracefile outfile <parameter>

Page 32: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 32

Session Tracing– Übersicht (10g) -

DBClient

ora

• SID: Identifiziert eine Session zu einem Zeitpunkt• SERIAL#: historisch eindeutig für eine Session• MODULE: frei wählbar mit dbms_application_info.set_module• ACTION: frei wählbar mit dbms_application_info.set_action

Client DispatcherServer

ora

ora

Client

WebserverClient

Client

Tracing mit Oracle 9sehr schwierig

Page 33: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 33

DBMS_MONITOR (10g)

• Einfachen SQL Trace aktivieren und deaktivieren

- SESSION_TRACE_ENABLE(7,4634, TRUE, FALSE);- SESSION_TRACE_DISABLE(7,4634);

• SQL Trace für mehrere Sessions- SERV_MOD_ACT_TRACE_ENABLE- SERV_MOD_ACT_TRACE_DISABLE

WaitsBinds

UDUMP

Page 34: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 34

SERV_MOD_ACT_TRACE (10g)

SERV_MOD_ACT_TRACE_ENABLE(

,service_name

,module_name ,action_name

,waits

,binds

,instance_name

);

dbms_application_info.set_module

dbms_application_info.set_action

RAC spezifisch

init.ora/tnsnames: service_name

Wait Events

Bind Variablen

Page 35: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 35

Auswertung TRCSESS (10g)

trcsess [output=output_file_name] = neue Tracedatei [session=session_id] = sid.serial# [clientid=client_id] [service=service_name] [action=action_name] [module=module_name] [trace_files] Default = *.* im aktuellen Verz.

Beispiel:trcsess output=gehalt.trc session_id=21.12345 action=gehalttkprof ... gehalt.trc gehalt.out

• Trace Informationen über mehrere Trace-Dateien verteilt• Programm trcsess sucht Informationen aus mehreren Dateien• trcsess erzeugt eine Trace-Datei mit zusammengehörenden Infos

Page 36: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 36

DBMS_MONITOR (10g)

• SQL Statistiken mit DBMS_MONITOR- SERV_MOD_ACT_STAT_ENABLE- SERV_MOD_ACT_STAT_DISABLE

SERV_MOD_ACT_STAT_ENABLE(, service_name IN VARCHAR2, module_name IN VARCHAR2, action_name IN VARCHAR2 DEFAULT ALL_ACTIONS);

• Instance-Name implizit gleich aktuelle Instance• Deaktivieren mit SERV_MOD_ACT_STAT_DISABLE• Semantik wie serv_mod_act_trace_enable / disable

Page 37: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 37

PL/SQL Tuning (10g)

• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler(Code Generator):- What you write is NOT what you get!

• Initialisierungsparameter PLSQL_OPTIMIZE_LEVEL (Default 2)

• Ausschalten durch PLSQL_OPTIMIZE_LEVEL = 0

• Verbesserungen in 10g:- bei der Rekursion- bei der Verwendung Expression innerhalb von Schleifen- bei der Verwendung von Variablen- ...

Page 38: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 38

Harness Software Kit

• Tools zur Unterstützung der Entwickler

• Performanceunterschiede von PL/SQL-Programmesind damit messbar

• Freier Download

• 30 Testprogramme

• Nutzung auch für eigene PL/SQL-Programme

• Vorgefertigte Reports

• Kann ab Version 8 verwendet werden

Page 39: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 39

PL/SQL Tuning (10g)

• Tuning der enthaltenen SQL-Befehle• Funktionen unterstützen durch funktions-basierte Indizes• Möglichst wenig SQL-Befehle in Schleifen• Nutzung von FORALL• Nutzung von BULK COLLECT bei SELECT INTO• Sind OUT-Parameter nötig/NOCOPY• Standardfunktionen nutzen• Logische Test mit dem günstigsten Vergleich zuerst• Datentyp-Konvertierung vermeiden,

Numerische Datentypen: PLS_INTEGER/BINARY_FLOAT• Gruppieren von Funktionen/Prozeduren in Packages• Festhalten der Packages im Shared Pool mit dbms_shared_pool

Page 40: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 40

Page 41: PL/SQL - doag.org · PDF file• PL/SQL wird jetzt optimiert durch einen optimierenden Compiler (Code Generator): - What you write is NOT what you get! • Initialisierungsparameter

Copyright ORDIX AG PL/SQL - Debugging und -Tuning 43

einfach.gut.beraten.

Vielen Dank für IhreAufmerksamkeit!

Besuchen Sie uns anunserem Stand C11- in der Nähe von !