Performance unter Oracle

Werbung
Performance unter Oracle
.consulting .solutions .partnership
DOAG Regionaltreffen 12/2002 Hannover
Andreas Habl
msg systems ag
Performance unter Oracle - Agenda
.consulting
.consulting.solutions
.solutions.partnership
.partnership
•
•
•
•
•
•
•
•
•
msg systems ag
Motivation und Rahmenbedingungen
Optimizer
Outlines
Materialized View
Tracing
SQL - Grundregeln
PL/SQL - Tipps
Fragen
© msg systems ag, Andreas Habl, Dezember 02
2
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Performance unter Oracle
das unternehmen
.consulting .solutions .partnership
msg systems ag
© msg systems ag, Andreas Habl, Dezember 02
3
Überblick msg systems ag
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Als produktbasiertes Lösungs- und Service-Haus agieren wir unter den
Top 25 der IT-Berater und Systemintegratoren in Deutschland.
Kerngeschäft:
Branchenspezifische Gesamtlösungen
(Beratung, Anwendung, Systemintegration)
Gründung:
1980
Geschäftssitz:
Ismaning / München
Vorstand:
Hans Zehetmaier (Vorsitzender)
Herbert Enzbrenner
Karl-Martin Klein
Pius Pflügler
Volker Reichenbach
Mitarbeiter:
> 1400
© msg systems ag, Andreas Habl, Dezember 02
4
Umsatz- und Mitarbeiterentwicklung
.consulting
.consulting.solutions
.solutions.partnership
.partnership
© msg systems ag, Andreas Habl, Dezember 02
5
Vision und Strategie
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Wir wollen als markttreibendes, produktbasiertes Lösungsund Servicehaus mit klaren Branchenschwerpunkten
attraktiver Partner für unsere Kunden sein.
.consulting
.solutions
.partnership
mit mit
-- -Branchenspezifisches
Branchenspezifisches
Kooperation mit
--- Kooperation
Kooperation
Branchenspezifisches
Standardsoftware
--Standardsoftware
Standardsoftware
Technologiepartnern
Know-how
Know-how
Technologiepartnern
Individuelle
- -Individuelle
Know-how
Technologiepartnern
- Anwendungssysteme
Individuelle
Anwendungssysteme
Service vor
Anwendungssysteme
- -Technologie-- Service
vorOrt
Ort
Technologiekompetenz
--kompetenz
Technologiekompetenz
Verlässlichkeitvor
und Ort
--- Verlässlichkeit
Service
- Systemintegration
und
Methodenberatung
-- Systemintegration
Systemintegration
Glaubwürdigkeit
- Methodenberatung
Glaubwürdigkeit
SAP Beratung
-- Methodenberatung
- Verlässlichkeit und
- SAP Beratung
Glaubwürdigkeit
- SAP Beratung
..
© msg systems ag, Andreas Habl, Dezember 02
6
Struktur
.consulting
.consulting.solutions
.solutions.partnership
.partnership
msg systems ag
München Berlin Chemnitz Frankfurt/M. Hamburg Hannover
Köln Passau Stuttgart Basel Zürich Wien Chicago New York
weitere Landesgesellschaften
Tochterunternehmen / Beteiligungen
msg
msg systems
systems gmbh,
gmbh, Österreich
Österreich
msg
msg Consulting
Consulting für
für Versicherungen
Versicherungen GmbH
GmbH
msg
msg systems
systems AG,
AG, Schweiz
Schweiz
msg
msg netzwerkservice
netzwerkservice gmbh
gmbh
msg
msg systems
systems Inc,
Inc, USA
USA
msg
msg systems
systems nord
nord gmbh
gmbh
msg
msg at.NET
at.NET GmbH
GmbH
CONPLAN
CONPLAN GmbH
GmbH
Gillardon
Gillardon financial
financial software
software AG
AG
innovas
innovas GmbH
GmbH
PREVO-System
PREVO-System AG,
AG, Schweiz
Schweiz
DELVIN
DELVIN GmbH
GmbH
© msg systems ag, Andreas Habl, Dezember 02
7
Standorte
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Chicago
New York
Hamburg
Hannover
Köln
Berlin
Chemnitz
Frankfurt/M.
Stuttgart
München/
Ismaning
Basel
© msg systems ag, Andreas Habl, Dezember 02
Passau
Wien
Zürich
8
Leistungsspektrum
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Know-how für zukunftssichere integrierte Lösungen
Leistungsspektrum
- Full-Service für Business-Lösungen
- Individuelle Anwendungsentwicklung
- SAP-Beratung und -Entwicklung
Branchenlösungen
- Versicherungen
- Finanzdienstleistungen
- Gesundheitswesen
Seit 1996 nach DIN EN ISO 9001 zertifiziert
© msg systems ag, Andreas Habl, Dezember 02
9
Kooperationen (Auszug)
.consulting
.consulting.solutions
.solutions.partnership
.partnership
© msg systems ag, Andreas Habl, Dezember 02
10
Branchen und Kunden (Auszug)
•• Allianz
Allianz
•• Allianz
Allianz World
World Wide
Wide Care
Care
•• ASPECTA
ASPECTA
•• AXA
AXA Colonia
Colonia
•• Basler
Basler Versicherungen,CH
Versicherungen,CH
•• Bayer.
Bayer. Beamten
Beamten Vers.
Vers.
•• DBV
DBV Winterthur
Winterthur
•• GARANTA,
GARANTA, CH
CH
•• Gerling
Gerling
•• Gothaer
Gothaer Rück
Rück
•• Helvetia
Helvetia Patria,
Patria, CH
CH
•• HUK-Coburg
HUK-Coburg
•• Mannheimer
Mannheimer
•• Münchener
Münchener Rück
Rück
•• NÜRNBERGER
NÜRNBERGER Vers.
Vers.
•• Quelle
Quelle Versicherungen
Versicherungen
•• BHW
BHW
•• BMW
BMW Financial
Financial Services
Services
•• Commerzbank
Commerzbank
•• Deutsche
Deutsche Bank
Bank
•• DZ-Bank
DZ-Bank
•• Dresdner
Dresdner Bank
Bank
•• Deutsche
Deutsche Börse
Börse Systems
Systems
•• HELABA
HELABA
•• Hamburgische
Hamburgische
Landesbank
Landesbank
•• IZB
IZB SOFT
SOFT
•• Bayerische
Bayerische LandesbauLandesbausparkasse
sparkasse (LBS)
(LBS)
•• Sparkassen
Sparkassen Informatik
Informatik
•• SI-BW
SI-BW
•• Bausparkasse
Bausparkasse
Schwäbisch
Schwäbisch Hall
Hall
•• Stadtsparkasse
Stadtsparkasse Köln
Köln
•• Sparkassenversicherung
Sparkassenversicherung
•• WestLB
WestLB
•• Vereinte
Vereinte Versicherungen
Versicherungen
•• Wüstenrot
Wüstenrot
Hypothekenbank
Hypothekenbank
•• VersicherungsVersicherungskammer
kammer Bayern
Bayern
•• BARMER
BARMER Ersatzkasse
Ersatzkasse
•• Bau
Bau BerufsgenossenBerufsgenossenschaft
schaft Rheinland/Westf.
Rheinland/Westf.
•• BundesinnungskrankenBundesinnungskrankenkasse
kasse Gesundheit(BIG)
Gesundheit(BIG)
•• Deutsche
Deutsche KrankenKrankenversicherung
versicherung (DKV)
(DKV)
•• IKK-Bundesverband
IKK-Bundesverband
•• IKK
IKK Münsterland
Münsterland
•• IKK
IKK Sachsen-Anhalt
Sachsen-Anhalt
•• IKK
IKK Westfalen-Lippe
Westfalen-Lippe
•• Johanniter-Krankenhaus
Johanniter-Krankenhaus
Bonn
Bonn
•• Kaiserswerther
Kaiserswerther Diakonie
Diakonie
•• SIGNAL
SIGNAL Krankenvers.
Krankenvers.
•• Techniker
Techniker Krankenkasse
Krankenkasse
•• Vereinte
Vereinte Krankenvers.
Krankenvers.
•• ...
...
Industrie/ Behörden/ Dienstleistungen
•• Allstate,
Allstate, USA
USA
•• Bayerische
Bayerische Landesbank
Landesbank
Gesundheitswesen
•• ADAC-Versicherung
ADAC-Versicherung
Finanzdienstleistungen
Versicherungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
•• AUDI
AUDI AG
AG
•• BerliKomm
BerliKomm
•• Berliner
Berliner Wasserbetriebe
Wasserbetriebe
•• BMW
BMW AG
AG
•• BRK
BRK
•• Brunata
Brunata
•• Bundeswehr/-Marine
Bundeswehr/-Marine
•• Deutsche
Deutsche BA
BA
•• Europ.
Europ. Patentamt
Patentamt
•• Gebühreneinzugszentrale
Gebühreneinzugszentrale
(GEZ)
(GEZ)
•• Girmes
Girmes GmbH
GmbH
•• Hoffmann
Hoffmann Werkzeuge
Werkzeuge
•• Hessischer
Hessischer Rundfunk
Rundfunk
•• Kirch
Kirch Gruppe
Gruppe
•• Rolls
Rolls Royce
Royce Deutschland
Deutschland
•• Deutsche
Deutsche Telekom
Telekom
•• VW
VW AG
AG
•...
•...
•• ...
...
•• ...
...
© msg systems ag, Andreas Habl, Dezember 02
11
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Performance unter Oracle
Motivation und
Rahmenbedingungen
© msg systems ag, Andreas Habl, Dezember 02
.consulting .solutions .partnership
12
Performance unter Oracle - Rahmenbedingungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Motivation für Performancebetrachtungen
• Funktionalität und Performance sind zu gleichen
Teilen der Ausschlag für die Akzeptanz einer
Applikation und den Erfolg eines Projekts
• Komplexität steigt stetig
(Anforderungen bezüglich Datenmengen,
Auswertbarkeit, Verfügbarkeit usw.)
• Softwarequalität
• Kostendruck
© msg systems ag, Andreas Habl, Dezember 02
13
Performance unter Oracle - Rahmenbedingungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Einflussfaktoren für Performance
• Softwareplattform
(Betriebssystem, Netzwerk)
• Hardware
• Oracle Konfiguration
(Instanzkonfiguration)
• Daten und Datendesign
(Menge, Datenverteilung, Datenmodell,
Indizierung)
• Applikation
(Design, Architektur,
Entwicklung = Datenzugriff)
© msg systems ag, Andreas Habl, Dezember 02
14
Performance unter Oracle - Rahmenbedingungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Potenziale der Einflussfaktoren
Faktor
Steigerungsraten
Hardware
bis 25 %
Betriebssystem
bis 50 %
Oracle Konfiguration
bis 100 %
Datenbankdesign
bis 1000 %
Datenverteilung/Indizierung bis 1000 %
SQL-Statements
bis ?
(LECCOTECH Studie)
© msg systems ag, Andreas Habl, Dezember 02
15
Performance unter Oracle - Rahmenbedingungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Hauptursache
60 % der PerformanceProbleme im
Datenbankbereich
werden durch die
Applikation, insbesondere
durch den SQL-Zugriff,
verursacht.
Quelle von
Performanceproblemen
40%
60%
(Oracle und Gartner Studie)
Andere
Folge:
Applikation
Ein Großteil der Performanceprobleme liegen
nicht im unmittelbaren Einflussbereich des DBA.
© msg systems ag, Andreas Habl, Dezember 02
16
Performance unter Oracle - Rahmenbedingungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Performance als Teamwork
Entwickler
QualitätsManagement
Designer
Oracle DBA
© msg systems ag, Andreas Habl, Dezember 02
17
Performance unter Oracle - Rahmenbedingungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Auswirkungen auf Projektarbeit
• Sensibilisierung der Projektmitarbeiter
(SQL-Guide, Workshops)
• Einbindung des Themas „SQL und Performance“ in den
Softwareentwicklungsprozess
(insbesondere Prüfung im Qualitätsprozess)
• aktive Betreuung der Entwickler und Designer während
der gesamten Projektdauer durch DBA
• Bereitstellung geeigneter Umgebungen
• Verschiebung von Verantwortlichkeiten
• bei Notwendigkeit strikte Trennung von fachlichem und
technischen Modell
• Tuning nicht zum Selbstzweck sondern in definiertem
Rahmen
© msg systems ag, Andreas Habl, Dezember 02
18
Performance unter Oracle - Rahmenbedingungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
DB - Umgebung
• Standard: verschiedene Umgebungen für Entwicklung,
Test und Abnahme
• eindeutige Versionierung des Datenbankmodells und
Hinterlegung im Datenbestand
• Bereitstellung von Testdaten (notfalls manuell) durch
DBA
• produktionsnahe Bedingungen
• Massendaten mit realitätsnaher Datenverteilung
• Massendatengenerierung
• wenn möglich Statistiken aus Produktion
(Export von Statistiken)
© msg systems ag, Andreas Habl, Dezember 02
19
Performance unter Oracle - Rahmenbedingungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Testumgebung
•
•
•
•
•
•
Schaffung gleicher Bedingungen für Testläufe
Daten-Baseline (cold-Backup, Ex-/Import)
jeweils nur eine Änderung testen
Testläufe tracen
konsistente Last der Hardware
Beachten -> erstes Ausführen von SQL beinhaltet das
Laden in die SQLAREA
• Verwendung eigener Protokollfunktion
• sinnvollen Output erzeugen (Table, LogFile)
• Verwendung von Timerfunktionen
• DBMS_APPLICATION_INFO für RealTime-Info
© msg systems ag, Andreas Habl, Dezember 02
20
Performance unter Oracle - Rahmenbedingungen
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Identifizierung kritischer Zugriffe und
Verantwortungsdelegation
• möglichst frühzeitiges Identifizieren (Vermeiden) von
kritischen Zugriffen durch DBA
• Mitwirkung bei fachlicher Spezifikation
• Analyse der Fachspezifikation
• Empfehlungen vor DV-Konzept
• Verantwortungsdelegation
• Kapselung kritischer Zugriffe (Views)
• schnellere Zielerreichung während der Entwicklung
• bessere Wartbarkeit/Flexibilität und Kontrolle durch
DBA (kritische Zugriffe unterliegen der höchsten
Änderungsrate)
© msg systems ag, Andreas Habl, Dezember 02
21
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Performance unter Oracle
Optimizer
© msg systems ag, Andreas Habl, Dezember 02
.consulting .solutions .partnership
22
Performance unter Oracle - Optimizer
.consulting
.consulting.solutions
.solutions.partnership
.partnership
SQL-Processing
© msg systems ag, Andreas Habl, Dezember 02
23
Performance unter Oracle - Optimizer
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Überblick Optimizer
• erstellt Execution-Plan
• Ansicht des Execution-Plan mit „explain plan“ oder
„set autotrace on“ in SQL*Plus
• plan_table notwendig
($ORACLE_HOME\rdbms\admin\utlxplan.sql)
• ist beeinflussbar
• Init.ora-Parameter
• Session-Parameter
• Hints
• DataDictionary
• Unterscheidung Rule-Based (RBO) / Cost-Based (CBO)
• Mischung von RBO und CBO dringendst vermeiden
© msg systems ag, Andreas Habl, Dezember 02
24
Performance unter Oracle - Optimizer
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Rule-Based-Optimizer
• ältere Variante
• benutzt festes Regelwerk zur Erstellung des ExecutionPlans anhand
• Aufbau des Statements
• interner Rangliste von Zugriffsmethoden
• relativ leicht nachvollziehbar
• Fehlertoleranz für Statements ist sehr gering
• kollabiert gelegentlich bei zu vielen Joins
• keinerlei Weiterentwicklung durch Oracle
• unterstützt keine neuen Features (partitioned tables,
erweiterte star query, materialized views)
• in Oracle 10 (i?) nicht mehr enthalten !!!
© msg systems ag, Andreas Habl, Dezember 02
25
Performance unter Oracle - Optimizer
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Cost-Based-Optimizer
•
•
•
•
•
•
•
neuere Version
benutzt Statistiken über Tabellen und Indizes
fehlertoleranter und „intelligenter“ als RBO
deutlich weniger Probleme bei komplexen Queries
schwer nachvollziehbar
unterstützt alle Oracle-Funktionalitäten
in Version 7.x nicht empfehlenswert; ab 8.0.5
benutzbar; ab 8i sehr stabil
• Extensible Option für eigene Definitionen
• Praxiserfahrung:
• CBO auch ohne Statistiken (es werden DefaultStatistiken benutzt) in der Regel besser als RBO
© msg systems ag, Andreas Habl, Dezember 02
26
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Performance unter Oracle
Outlines
© msg systems ag, Andreas Habl, Dezember 02
.consulting .solutions .partnership
27
Performance unter Oracle - Outlines
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Outlines - Stabilität des Execution-Plans
•
•
•
•
•
•
•
•
•
ermöglicht ein gleiches Verhalten von Queries in verschiedenen
Umgebungen
sind Execution-Plans für einzelne Queries
Execution-Plan wird im Dictionary gespeichert:
• Statement „Create Outline“
• System-Parameter „CREATE_STORED_OUTLINE“
Bildung von Kategorien (Batch vs. OLTP)
Export / Import von Outlines (Package OUTLN_PKG)
Verwendung der Outlines durch System-Parameter
„USE_STORED_OUTLINES“
Outline-Dictionary im Schema OUTLN
Outlines sind Grundlage verschiedener Performancetools nach der
Hammer-Methode (draufschlagen – abwarten was rauskommt)
ab 9i ist Editieren der Outlines über OEM möglich
© msg systems ag, Andreas Habl, Dezember 02
28
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Performance unter Oracle
Materialized View
© msg systems ag, Andreas Habl, Dezember 02
.consulting .solutions .partnership
29
Performance unter Oracle - Materialzed View
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Materialized View Überblick
•
Grundprinzip ist ein alter Hut
-- in ersten 8i-Releases
create materialized view test_mv …;
snapshot created.
•
•
•
•
•
•
•
Materialized View und Snapshot sind synonym zu verwenden
Ergebnis der Materialized View wird als Schemaobjekt physikalisch
gespeichert
Möglichkeit der Replizierung und Verteilung von Daten in
verschiedensten Umgebungen (lokal, verteilt, mobil)
können genutzt werden, um oft benötigte Auswertungen
dramatisch zu beschleunigen
verschiedene Aktualisierungen möglich
(Zeitintervalle, manuell, bei Änderungen)
können direkt angesprochen werden
Cost-Based-Optimizer ist erforderlich
© msg systems ag, Andreas Habl, Dezember 02
30
Performance unter Oracle - Materialzed View
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Materialized View / Query Rewrite
•
•
•
•
Query Rewrite ist die eigentliche Neuerung
bei aktiviertem Query Rewrite wird bei bei jeder query geprüft, ob
sie mit der Materialized View kompatibel ist – wenn ja, wird die
query umgeschrieben (rewrite) und profitiert von dem bereits
vorliegenden Ergebnis der Materialized View
Applikation muss die Materialized View nicht kennen
Voraussetzungen:
• User muss Systemprivileg „QUERY REWRITE“ besitzen
• Parameter QUERY_REWRITE_ENABLED auf Session oder
Instanzebene:
• FALSE
: kein rewrite
• TRUE
: cost-based rewrite (CBO prüft Kosten)
• FORCE
: rewrite erzwungen
• (QUERY_REWRITE_ENABLED ist auch Voraussetzung für
function-based indexes)
© msg systems ag, Andreas Habl, Dezember 02
31
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Performance unter Oracle
Tracing
© msg systems ag, Andreas Habl, Dezember 02
.consulting .solutions .partnership
32
Performance unter Oracle - Tracing
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Tracing Überblick
•
•
•
Tracing ist auf Session oder Instanzebene möglich
detaillierte Informationen:
• Execution Plan
• Parse, execute and fetch counts
• CPU and elapsed time
• Physical and logical reads
• number of rows processed
• misses on the library cache
• commit and rollback
immer zwei Schritte:
• Erzeugen des Trace
• Formatieren des Trace im tkprof
© msg systems ag, Andreas Habl, Dezember 02
33
Performance unter Oracle - Tracing
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Tracing Vorgehen
•
•
•
•
•
Initialisierungsparameter setzen
• TIMED_STATISTICS (optional)
• MAX_DUMP_FILE_SIZE (optional)
• USER_DUMP_DESTINATION
Trace einschalten
• Sessionebene: alter session set sql_trace = true
(als Parameter des Programms vorsehen)
• Instanceebene: alter system set sql_trace = true
(nicht empfehlenswert)
• beliebige Session: dbms_system.set_sql_trace_in_session
formatierten Output mit tkprof erstellen
• tkprof tracefile outputfile explain=user/pwd sys=no
Output interpretieren
optional in DB speichern
© msg systems ag, Andreas Habl, Dezember 02
34
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Performance unter Oracle
SQL - Grundregeln
© msg systems ag, Andreas Habl, Dezember 02
.consulting .solutions .partnership
35
Performance unter Oracle - Grundregeln
.consulting
.consulting.solutions
.solutions.partnership
.partnership
der meist begangene „Fehler“ / Zuweisung beim Join
Es sollen Name, Anschriftstatus und Hausnummer zu person_id = 10 selektiert werden.
select
from
where
and
and
prs.name,
ans.status,
hau.nummer
personen
prs,
anschriften
ans,
haeuser
hau
prs.person_id = 10
prs.person_id = ans.pers_person_id
ans.haus_haus_id = hau.haus_id
select
from
where
and
and
prs.name,
ans.status,
hau.nummer
personen
prs,
anschriften
ans,
haeuser
hau
prs.person_id = 10
ans.pers_person_id = prs.person_id
hau.haus_id = ans.haus_haus_id
Regel in der where-clause: Ungekannte = Bekannte
© msg systems ag, Andreas Habl, Dezember 02
36
Performance unter Oracle - Grundregeln
.consulting
.consulting.solutions
.solutions.partnership
.partnership
schlecht lesbare Statements
select
from
where
and
and
and
and
and
and
and
name, vorname, status, nummer
personen a, anschriften b,
haeuser c
a.person_id = 10
c.historisch = ‘Y’
b.pers_person_id = a.person_id
c.nummer >= 10
a.name like ‘MEI%’
b.status = ‘X’
c.haus_id = b.haus_haus_id
c.nummer <= 50
© msg systems ag, Andreas Habl, Dezember 02
select
from
where
and
and
and
and
and
and
prs.name,
prs.vorname,
ans.status,
hau.nummer
personen
prs,
anschriften
ans,
haeuser
hau
prs.person_id = 10
prs.name like ‘MEI%’
ans.pers_person_id = prs.person_id
ans.status = ‘X’
hau.haus_id = ans.pers_person_id
hau.nummer between 10 and 50
hau.historisch = ‘Y’
37
Performance unter Oracle - Grundregeln
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Subqueries aus Bequemlichkeit
Es sollen alle Personen mit Anschriftstatus = „Y“ selektiert werden.
select
from
where
name,
vorname,
personen,
person_id
in
(select
pers_person_id
from
anschriften
where
status = ‘Y’)
select
from
where
and
prs.name,
prs.vorname,
personen
prs,
anschriften
ans,
ans.status = ‘Y’
prs.person_id = ans.pers_person_id
Regel: Join vor Subquery, weil Subqueries den Optimizer einschränken
© msg systems ag, Andreas Habl, Dezember 02
38
Performance unter Oracle - Grundregeln
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Vermeidung von Sorts beim group by
Es sollen die Personen mit dem Datum ihrer letzten Lohnsteuerklasse selektiert werden.
select
prs.person_id
prs.name,
max(lst.datum)
from
personen
prs,
lst_karte
lst,
where
lst.pers_person_id =
prs.person_id
group by prs.person_id, prs.name
=>Sort über gesamte Ergebnismenge
select
from
where
prs.person_id
prs.name,
lst.datum
personen
prs,
(select max(datum) datum,
pers_person_id
from lst_karten
group by pers_person_id) lst
lst.pers_person_id =
prs.person_id
=>Sorts über kleinere Ergebnismengen
Einsatz hängt von der Datenverteilung ab
© msg systems ag, Andreas Habl, Dezember 02
39
Performance unter Oracle - Grundregeln
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Unnötige Sorts in Views
create view personen_view as select * from personen order by name;
-- select auf view mit order by auf andere Spalte
select name, vorname … from personen_view order by vorname;
•
•
•
•
seit 8i (8.1.5) ist ein „order by“ in Views erlaubt
wird oft aus Versehen verwendet
bei select auf View mit „order by“ mit ebenfalls „order by“ nach
einer anderen Spalte => dann wird zweimal sortiert
„order by“ in Views macht nur in Spezialfällen Sinn
© msg systems ag, Andreas Habl, Dezember 02
40
Performance unter Oracle - Grundregeln
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Subquerys: In / Exists
-- Beispiel IN non-correlated
-- Beispiel EXISTS correlated
select name
from personen
where person_id in
(select pers_person_id
from anschriften
where status = ‘Y’)
select prs.name
from personen prs
where exists
(select pers_person_id
from anschriften
where pers_person_id = prs.person_id
and status = ‘Y’)
•
•
•
•
•
siehe „Subquerys aus Bequemlichkeit“ – wenn möglich Join
IN führt „inner Query“ zuerst und einmalig aus (geeignet für große
Datenmengen)
EXISTS führt zu jeder Row der „outer Query“ die „inner Query“ aus
(geeignet für kleinere Datenmengen)
ob IN oder EXISTS schneller ist vom Einzelfall abhängig
Zitat: „ You must understand the number of rows to be processed”
© msg systems ag, Andreas Habl, Dezember 02
41
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Performance unter Oracle
PL/SQL-Tips
© msg systems ag, Andreas Habl, Dezember 02
.consulting .solutions .partnership
42
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
DBMS_APPLICATION_INFO
• Mechanismus zum Publizieren von real-timeInformationen
• kein commit notwendig
• SET_MODULE Procedure
• Update von v$session und v$sqlarea
• Spalten „module“ und „actions“
• v$session wird unmittelbar aktualisiert
• SET_SESSION_LONGOPS
• Update auf v$session_longops
© msg systems ag, Andreas Habl, Dezember 02
43
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
DBMS_APPLICATION_INFO - Codebeispiel
DECLARE
lv_count
PLS_INTEGER := 0;
lv_start_time
PLS_INTEGER;
BEGIN
lv_start_time := DBMS_UTILITY.GET_TIME;
FOR cur_employee_rec IN cur_employee LOOP
lv_count := lv_count + 1;
-- Employee processing logic...
IF MOD(lv_count, 1000) = 0 THEN
DBMS_APPLICATION_INFO.SET_MODULE
(‘Anzahl Zeilen: ' || lv_count,
‘Dauer: ' || (DBMS_UTILITY.GET_TIME lv_start_time)/100 || ' sec');
END IF;
END LOOP;
END;
/
© msg systems ag, Andreas Habl, Dezember 02
44
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
DBMS_APPLICATION_INFO - Outputbeispiel
select username, module, action from v$session
where username = ‘HABLA’;
USERNAME
- - - HABLA
HABLA
MODULE
- - - - - - - - - - - - SQL*Plus
Anzahl Zeilen: 1000
USERNAME
- - - HABLA
HABLA
MODULE
- - - - - - - - - - - - SQL*Plus
Anzahl Zeilen: 50000
© msg systems ag, Andreas Habl, Dezember 02
ACTION
- - - - - - - - Dauer: 10.64 sec
ACTION
- - - - - - - - Dauer: 180.32 sec
45
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
PL/SQL Tables
•
•
•
•
•
•
PL/SQL Tables sind ähnlich Arrays
Benutzung für temp. Speichern und table lookups
nicht geeignet für große Datenmengen
benötigen Memory pro User
seq. scan auf PL/SQL Table ist schneller als DB–Read
Benutzung von Table-Indexes möglich
DECLARE
TYPE temp_table IS TABLE OF VARCHAR2(50)
INDEX BY BINARY INTEGER;
v_temp_table
temp_table;
BEGIN
FOR v_count IN 1..100 LOOP
v_temp_table(v_count) := ‘Beispiel’;
END LOOP;
END;
/
© msg systems ag, Andreas Habl, Dezember 02
46
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Bulk-Binding mit Collections
•
•
bei der Ausführung von sql in pl/sql kommt es zu einer
Kommunikation zwischen pl/sql-engine und sql-engine mit
Kontextwechseln
Bulk-Binding reduziert Kommunikation und Kontextwechsel bei der
Verwendung von Collections
DECLARE
TYPE liste IS VARRAY (100) OF NUMBER;
nummer LISTE := LISTE (1024, 2754, 5432);
BEGIN
FORALL i IN nummer.first .. nummer.last
UPDATE sal = 1.1 * sal WHERE mgr = nummer(i);
END;
/
•
•
•
FORALL übergibt einmalig Collection an sql-engine
in normaler Schleife würde dies bei jedem Durchlauf geschehen
mit RETURNING ... BULK COLLECT INTO Rückgabe möglich
© msg systems ag, Andreas Habl, Dezember 02
47
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
ROWID
•
•
•
durch Benutzung der ROWID Performance verbessern
ROWID ist der schnellste Zugriff auf einen Datensatz
ROWID ist schneller als unique index - Zugriff
DECLARE
CURSOR cur_employee IS
SELECT employee_id, salary, ROWID FROM employee;
v_new_salary
NUMBER;
BEGIN
FOR cur_employee_rec IN cur_employee LOOP
v_new_salary := cur_employee_rec.salary * 1.1;
UPDATE employee
SET salary = v_new_salary
WHERE rowid = cur_employee_rec.ROWID;
END LOOP;
COMMIT;
END;
/
© msg systems ag, Andreas Habl, Dezember 02
48
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Datentypenkonformität
•
•
•
bei Vergleichen von Variablen und Konstanten sollte der gleiche
Datentyp verwendet werden
bei unterschiedlichen Datentypen konvertiert Oracle einen der
Werte
die Konvertierung erzeugt Overhead
DECLARE
v_temp_count
NUMBER := 10;
BEGIN
IF v_temp_count = ‘1’ THEN
…
© msg systems ag, Andreas Habl, Dezember 02
49
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
PLS_INTEGER versus NUMBER
•
•
•
•
•
PLS_INTEGER existiert seit PL/SQL Version 2.2
Range ab 8i: -2**31 .. 2**31
PLS_INTEGER benutzt weniger Speicher als NUMBER
Operationen mit PLS_INTEGER benutzen „machine arithmetic“
und sind schneller als Operationen mit NUMBER
gut verwendbar für Zähler und Integer-Operationen
DECLARE
v_temp_count
PLS_INTEGER := 10;
BEGIN
IF v_temp_count = 1 THEN
…
© msg systems ag, Andreas Habl, Dezember 02
50
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Reihenfolge IF Statements
•
•
•
IF Statements sind typischerweise nach Gesichtspunkten der
Lesbarkeit sortiert
Verbesserung der Performance durch die Umsortierung der IF
Statements nach zu erwartender Häufigkeit
besonders bei ELSIF
IF status = 3 THEN
bonus = 100;
ELSIF status = 1 THEN
bonus = 50;
ELSE
bonus = 10;
END IF;
© msg systems ag, Andreas Habl, Dezember 02
51
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
PL/SQL in Datenbank speichern
•
durch Speichern von PL/SQL in der Datenbank ergeben sich
folgende Vorteile:
• PL/SQL Code ist bereits compiliert (p-code)
• Möglichkeit den Code in den Shared Pool zu pinnen
• Umsetzung von Securitymechanismen auf Datenbankebene
• Vermeidung von Code-Redundanz und Versionskonflikten
• Abhängigkeiten zwischen dem Code können abgefragt werden
• weniger Speicherverbrauch, weil nur eine Kopie des Codes im
Speicher gehalten wird
• kürzere Ladezeiten bei Benutzung von Packages, weil
gesamtes Package wird bei erster Verwendung in Speicher
geladen
© msg systems ag, Andreas Habl, Dezember 02
52
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Pinning Objects
•
•
•
•
•
Objekte im Shared Pool werden über LRU (Least Recently Used)
entfernt
ein Objekt im Shared Pool benötigt zusammenhängenden Speicher
(Vermeidung von Fragmentierung notwendig)
manuelle geladene Objekte im Shared Pool unterliegen nicht der
LRU
manuelles Laden vermeidet Fragmentierung und gewährleistet,
dass Objekte nicht entladen werden
DBMS_SHARED_POOL.KEEP Procedure
• Laden und Entladen von Objekten im Shared Pool
DBMS_SHARED_POOL.KEEP (
name VARCHAR2,
flag CHAR DEFAULT ‘P’);
DBMS_SHARED_POOL.KEEP (‘MY_SOURCE’, ‘P’);
© msg systems ag, Andreas Habl, Dezember 02
53
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Schleifen-Logik
• PL/SQL code mit Schleifen-Logik sind Kandidaten für
Performancesteigerungen aufgrund der Anzahl der
Durchläufe
• Logik ist auf Verbesserungsmöglichkeiten zu prüfen
• auch kleine Verbesserungen lohnen sich in der Summe
• etwa durch:
• PL/SQL Tables
• Verwendung ROWID
• Bulk-Binding
• PLS_INTEGER versus NUMBER
• Datentypkonformität
• ...
© msg systems ag, Andreas Habl, Dezember 02
54
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
weitere PL/SQL Performance Tips
•
•
•
•
•
•
Beobachtung und Anpassung des Shared Pool
Ausführung möglichst auf dem Server
Benutzung von temporary tables
Anpassung der Rollback-Segmente
begrenzte Nutzung von dynamischen SQL
Anwendung der Oracle PL/SQL-Packages
© msg systems ag, Andreas Habl, Dezember 02
55
Performance unter Oracle - PL/SQL-Tips
.consulting
.consulting.solutions
.solutions.partnership
.partnership
Vielen Dank für Ihre Aufmerksamkeit !
.consulting .solutions .partnership
Referenten: Andreas Habl – Systemingenieur, msg systems ag Berlin
http://www.msg.de
© msg systems ag, Andreas Habl, Dezember 02
[email protected]
56
Herunterladen