Herrmann & Lenz Services GmbH

Ähnliche Dokumente
Oracle Standard Edition Performance Tuning. Webinar Dierk Lenz 8. Februar 2013

Oracle 11g Release 2: Änderungen unter der Haube. Dierk Lenz DOAG 2011 Konferenz und Ausstellung 16. November 2011

DOAG Demo Kino: Advisors, Monitoring Werkzeuge in der Datenbank Ulrike Schwinn Business Unit Database Oracle Deutschland B.V.


Parallele Programmierung in SQL und PL/SQL. Peter Bekiesch Dierk Lenz DOAG 2011 Konferenz und Ausstellung 17. November 2011

Datenbanken und Oracle, Teil 2

Datenbankkonsolidierung Multitenant oder nicht? Dierk Lenz DOAG 2014 Konferenz

Ist die Standard Edition noch einsetzbar? Dierk Lenz DOAG 2015 Konferenz

IT-Symposium Ralf Durben. Business Unit Datenbank. ORACLE Deutschland GmbH. 1

Datenbankstatistiken im Griff mit DBMS_STATS. DOAG 2012 Konferenz + Ausstellung Nürnberg 21. November 2012

SQL Optimizer und SQL Performance

HL-Monitoring Module

Datenbanksystem. System Global Area. Hintergrundprozesse. Dr. Frank Haney 1

Oracle 12c: Neuerungen in PL/SQL. Roman Pyro DOAG 2014 Konferenz

Hochverfügbarkeit mit physikalischer Standby-Datenbank. Ablösung EE / Data Guard durch SE One / Dbvisit Standby

IT-Symposium

W ilhelm Br eß er Ber at er DO AG 2009 J ahr es k onf er enz Nür nber g im Nov em ber 2009 SQL PLAN MANAGEMENT

IBM Informix Tuning und Monitoring

3. Architektur eines DBS (Oracle)

Listener: Bei Oracle erfolgt die Steuerung (konventionell) via listener.ora (Listener Konfiguration), tnsnames.ora (Client Konfiguration)

DOAG München Die etwas anderen Oracle Performance-Tipps. Marco Patzwahl

Informix Seminarwoche

Erhöhung der Manageability durch SQL-Profile

Oracle Enterprise Manager Cloud Control 12c: Installation von Ralf Durben, ORACLE Deutschland B.V. & Co. KG

1.1 Datenbanken Tabellen SQL und die Befehlseingabe Beispieldatenbank 36

die wichtigsten Caches (SGA) sind on-the-fly änderbar.

Oracle 9i Einführung Performance Tuning

Performance Tools. für alle Editionen

Powerful PL/SQL: Collections indizieren mit VARCHAR2- Indizes ein Praxisbeispiel

IT-Frühstück IT Trend Virtualisierung Hype oder Nutzen? Praxisaspekte


Überblick über Oracle Technologie im Bereich Hochverfügbarkeit. Tage der Datenbanken FH Köln Campus Gummersbach 20. Juni 2013 Dierk Lenz

Auf einen Blick. Abfrage und Bearbeitung. Erstellen einer Datenbank. Komplexe Abfragen. Vorwort 13

SQL and PL/SQL unleashed. Neuheiten bei Oracle 11g und Oracle 12c im Bereich SQL und PL/SQL

Kostenlos aber effektiv: Performanceanalyse mit Statspack und SQL* Benedikt Nahlovsky. Performing Databases GmbH Mitterteich

Aufbau einer Oracle Datenbank Tablespace, Arten von Dateien

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Kurs. Teil 7 UNDO-Management. Universität Hannover. Agenda. Einführung. Nutzung RBS Oracle 9i Einführung Performance Tuning.

Einleitung. SPFILE und INIT.ORA. Umgang mit SPFILE und INIT.ORA. Petra Knöbl

Archive / Backup System für OpenVMS

Oracle Multitenant Verwaltung von Pluggable Databases Handling und Besonderheiten

CARL HANSER VERLAG. Christopher Allen. Oracle PL/SQL für Einsteiger Der Einsatz von SQL und PL/SQL in der Oracle-Datenbank

Prozedurale Datenbank- Anwendungsprogrammierung

Gliederung. 1) Speicherplatz-Zuordnung und -Verwaltung 2) Indizes 3) Explain Plan 4) Join-Operationen 5) Der Optimizer 6) Parallelisieren

Abfragen (Queries, Subqueries)

Oracle 10g Einführung

Kurs. Teil 4 Shared Pool. Universität Hannover. Agenda. Überblick. Library Cache Oracle 9i Einführung Performance Tuning. Trefferquote.

Index Rebuild. DOAG Konferenz , Nürnberg DOAG Konferenz , Nürnberg Martin Hoermann Martin Hoermann

Oracle GridControl Tuning Pack. best Open Systems Day April Unterföhring. Marco Kühn best Systeme GmbH

RAC News in Oracle 11g Release 2. Dierk Lenz DOAG Konferenz + Ausstellung November 2010

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Datenbankadministration

Erstellen einer Oracle Instanz für GEOS Pro 2.2

Inhalt. Tools für das SQL-Tuning (Anzeigen der Ausführungspläne)

Oracle Database 11g: Performance Tuning Release 2 - Deutsch

Alles neu. Migration in eine frische Datenbank ohne Altlasten. Thomas Klughardt Senior Systems Consultant

Darüber hinaus wird das Training dazu beitragen, das Verständnis für die neuen Möglichkeiten zu erlangen.

Oracle AWR und ASH Analyse und Interpretation

Oracle 9i Einführung. Performance Tuning. Kurs. Teil 12 Materialized Views. Universität Hannover. Praxisbeispiel. Migration.

1 Einführung Ziele und Zielgruppen Was erwartet Sie in diesem Buch Skripte und Test-Cases Danksagung...

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Werkzeuge für Datenbank Handwerker: IBM Data Studio und IBM Optim QWT

Johannes Ahrends Geschäftsführer CarajanDB CarajanDB GmbH

IBM Informix SQL. Seminarunterlage. Version vom

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Stuttgart, Sandro Crepaldi XTAT Trivadis GmbH. extended Tracefile Analysis Tool

Entwicklungsumgebung für die Laborübung

Oracle 10g Einführung

Oracle Advanced Compresion 10g versus 11g

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

Oracle Database 10g Die RAC Evolution

NoSQL mit Postgres 15. Juni 2015

Datenbanken II Speicherung und Verarbeitung großer Objekte (Large Objects [LOBs])

Inhalt. Dr. Frank Haney 1

Aufbau einer Enterprise Manager Grid Control Testumgebung

Mehr Ergebnisse: Linguistische Funktionen und Ähnlichkeitssuche mit SQL. Carsten Czarski ORACLE Deutschland B.V. & Co KG München

Oracle Datenbankprogrammierung mit PL/SQL Grundlagen

Inhaltsverzeichnis. Lutz Fröhlich. PostgreSQL 9. Praxisbuch für Administratoren und Entwickler. ISBN (Buch):

Datenbanken Konsistenz und Mehrnutzerbetrieb III

Einstieg in das SQL- und Datenbanktuning Loblied auf den Tabellen-Index!

Oracle 10g Einführung

SQL structured query language

Oracle Enterprise Manager 12c R4 ( )

Was bringt Extended SQL-Tracing für das Performance Tuning

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

TOP 10 Monitoring SQL Befehle

5.8 Bibliotheken für PostgreSQL

Oracle Datenbank Architektur nicht nur für Einsteiger. Martin Klier Klug GmbH integrierte Systeme, Teunz

Roland Tilgner. Solution Architects & Team Coaching DEVELOPMENT. ORACLE TEXT AUS PL/SQL-SICHT Features und Möglichkeiten

Verschlüsseln als Überlebensstrategie

ANDREAS PROUZA. Wien,

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

Einstellungen zur Verwendung von Flashback-Abfragen

Oracle Database 10g: Neue Features für Administratoren

IO Performance - Planung Messung, Optimierung. Ulrich Gräf Principal Sales Consultant Oracle Deutschland B.V. und Co. KG

Oracle Backup und Recovery mit RMAN

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Naxtron GmbH Schlosstalstrasse Winterthur. Subject. New Features Oracle 9i Tuning. Edo Bezemer. Author

Aufgabenstellung. Bekannte Lösungsansätze. Die Idee. Native Informix Architektur

Transkript:

Oracle Standard Edition Performance Tuning Berliner Expertenseminar Dierk Lenz Februar 2013 Herrmann & Lenz Services GmbH Erfolgreich seit 1996 am Markt Firmensitz: Burscheid (bei Leverkusen) Beratung, Schulung und Betrieb/Fernwartung rund um das Thema Oracle Datenbanken Schwerpunktthemen: Hochverfügbarkeit, Tuning, Migrationen und Troubleshooting Herrmann & Lenz Solutions GmbH Produkt: Monitoring Module 2 Dierk Lenz 1

3 Inhalt Features: Was kann die SE und was kann Sie nicht? Exkurs: Werkzeuge für Performance-Analysen Teil 1 Tune the Application SQL und PL/SQL für SE SQL Ausführungspläne Komprimierung mit SE Programmierempfehlungen 4 Dierk Lenz 2

Inhalt Monitor the Application Welche V$-Views sind von Interesse und dürfen benutzt werden? Monitoring mit Historisierung am Beispiel HL- Monitoring Module Kein AWR? Statspack! Exkurs: Werkzeuge für Performance-Analysen Teil 2 Optimal Installieren und Konfigurieren 5 Beispiele und Demos Virtuelle DB-Maschine Oracle VM VirtualBox Oracle Enterprise Linux 6 Oracle Restart (Single Node Grid Infrastructure), ASM Oracle 11gR2 Patchset 2 (11.2.0.3) inklusive PSU vom Januar 2013 (11.2.0.3.5) Datenbank DBSE Per Skript kreiert 6 Dierk Lenz 3

Features: Was kann die SE und was kann sie nicht? 7 Worüber reden wir? Zwei SE Varianten: SE und SE One Unterschiede: SE auf Systemen mit bis zu vier Sockeln einsetzbar; SE1 auf Systemen mit bis zu zwei Funktional keine Unterschiede, bis auf: SE enthält RAC! Einschränkung bzgl. Sockel gilt für das gesamte Cluster. Daher: Mit SE ist sowohl SE als auch SE1 gemeint! 8 Dierk Lenz 4

Warum ist die SE so interessant? Lizenzierung! EE linear kernabhängige Minimumlizenzierung Preis für moderne Multicores explodiert für EE SE keine Kern-, lediglich Sockelabhängigkeit keine Zusatzkosten für RAC grundsätzlich Multi-Server (außer bei RAC) keine Einschränkung gegenüber EE bzgl. DB-Größe oder Hauptspeichernutzung 9 Fehlende Funktionen mit Drittanbieterwerkzeugen nachrüstbar Standby-Datenbank z.b. mit Dbvisit Standby Monitoring z.b. mit HL-Monitoring Module 10 Dierk Lenz 5

Unterschiede Diverse Quellen: Dokumentation Oracle Database Licensing Information Oracle Technet Dokument White paper: Oracle Database 11g Product Family Oracle Support Nicht: Google usw. (jedenfalls nicht ohne Prüfung) 11 Wichtige Views v$option: Welche Features kann man nutzen? dba_feature_usage_statistics: Welche Features wurden genutzt? Keine eindeutige Zuordnung Habe ich EE-Features genutzt? nur unzureichend zu beantworten Hilfreiche Informationen zum Thema Kann ein EE-to-SE-Downgrade stattfinden? 12 Dierk Lenz 6

Was passiert, wenn? Meist wird geblockt: CREATE TABLE COMPRESS BASIC; ORA-00439: Funktion nicht aktiviert: Basic Compression Manchmal wird geloggt: dba_feature_usage_statistics Kein Beispiel für 11.2.0.3 Früher z.b. AWR-Reports 13 Wann brauche ich die EE? Hier lediglich die häufigsten Gründe: Parallelisierung notwendig z.b. bei Sicherung Indexerstellung Abfragen Partitionierung notwendig Hoher DELETE-Aufwand bei Altdaten Zu hohe Indexbäume De Facto: DB-Größe 1 TB oder mehr Online-Operationen erforderlich (z.b. Index Rebuilds) 14 Dierk Lenz 7

Diagnostics und Tuning Packs Ausschließlich für EE verfügbar Zusätzlich zu lizenzieren Also für SE weder Diagnose noch Tuning möglich? Das stimmt nicht! Basiswerkzeuge vorhanden Komfortabel mit 3rd-Party-Tools Z.B. HL-Monitoring Module und Orainfo von H&L 15 Mitgelieferte Werkzeuge (alle Editionen) SQL*Plus SQL Developer Enterprise Manager Database Control Recovery Manager (RMAN) Export/Import (Classic & Data Pump) Loader TKPROF 16 Dierk Lenz 8

Exkurs: Werkzeuge für Performance- Analysen Teil 1 17 Die Dokumentation Auf OTN verfügbar HTML und PDF Über HTML-Dokumente: epub- und Mobi- Formate für ipad usw. Online und Download Download ~ 1 GB Gehört zur Pflichtausstattung jedes Oracle Profis 18 Dierk Lenz 9

Wichtige Oracle-Handbücher Concepts Administrator s Guide Reference SQL Language Reference Performance Tuning Guide Utilities PL/SQL Packages and Types Reference 19 Mitgelieferte Werkzeuge relevant für Performance-Analysen Mehr oder weniger bekannte Werkzeuge Im folgenden eine subjektive Auswahl Ohne Ausnahme in der SE vorhanden 20 Dierk Lenz 10

SQL*Plus Vergleichbar mit vi unter Unix: Nicht besonders komfortabel Besitzt einige nette Features Überall verfügbar! Eingebaut: Zeitmessung (SET TIMING ON), Log-Datei schreiben (SPOOL), Analyse von SQL- Befehlen (SET AUTOTRACE ), 21 SQL*Plus AUTOTRACE Voraussetzungen: PLUSTRACE-Rolle und Zugriff auf PLAN_TABLE PLUSTRACE erstellen als SYS mit @?/sqlplus/admin/plustrce.sql GRANT plustrace TO PLAN_TABLE über Pulic Synonym auf SYS.PLAN_TABLE$ für alle verfügbar SET AUTOTRACE [ON TRACEONLY] TRACEONLY zeigt Ergebnisse des SQL-Befehls nicht an Nur Performance-Daten sichtbar 22 Dierk Lenz 11

SQL*Plus Demo 23 SQL Developer Einfache Möglichkeiten für Anzeige von Ausführungsplänen Messung von Ausführungszeiten Bearbeiten von Skripten Keine Automatisierung (Batchmodus) Navigation für DB-Objekte 24 Dierk Lenz 12

SQL Developer: Achtung! Java 7 nicht unterstützt 64 Bit unter Windows unterstützt Dringende Empfehlung: Aktuelle Version! Komfort Bugs bereinigt 25 SQL Developer Demo 26 Dierk Lenz 13

OraInfo Kostenloses Produkt von H&L Solutions Download auf www.orainfo.de DB- und Instanzinformationen SQL-Befehle Ausführungspläne 27 Tune the Application 28 Dierk Lenz 14

Motivation Riesiger Funktionsvorrat auch in der SE Viele Details nicht bekannt DB- und Anwendungsdesign mit gutem Hintergrundwissen besser als Featuritis 29 Das Fundament für gute Performance Kenne die Eigenheiten des Systems! Nutze Best Practices und verfügbares Know- How! Überprüfe Anwendungseigenschaften! 30 Dierk Lenz 15

SQL und PL/SQL für SE 31 SQL und PL/SQL für SE Lediglich einige Klauseln für SE nicht zugänglich Z.B. PARALLEL Einige zusätzliche Funktionalitäten verfügbar: Java XML Text Apex Locator (Subset von Spatial) 32 Dierk Lenz 16

Gewaltiger SQL-Sprachumfang Oracle Database SQL Language Reference: 1.630 Seiten (!) Das ist nicht alles: Z.B. Analytische Funktionen weiter erläutert in Oracle Database Data Warehousing Guide Kapitel 22: SQL for Analysis and Reporting Kapitel 23: SQL for Modeling Viele weitere Erläuterungen (z.b. Reguläre Ausdrücke) in Oracle Database Advanced Application Developer s Guide 33 Reguläre Ausdrücke Bekannt aus Unix-Werkzeugen (vi, sed, awk, ) Beschreibung von String-Pattern Wesentlich flexibler und umfangreicher als das bekannte LIKE-Pattern-Matching mit _ und % Einfaches Beispiel: Gesucht werden die Werte einer Spalte, die nicht ausschließlich aus Ziffern bestehen SELECT col FROM tab WHERE col <> REGEXP_SUBSTR(col, '\d*') 34 Dierk Lenz 17

PL/SQL setzt eins drauf! Oracle Database PL/SQL Language Reference: 762 Seiten Oracle Database PL/SQL Packages and Types Reference: 5.966 Seiten Ebenfalls weitere Infos in Oracle Database Advanced Application Developer s Guide 35 PL/SQL Bulk Operations Behandlung von Massendaten in PL/SQL Beispiel (ohne Bulk Operation): BEGIN dbms_random.seed('bulk Operations'); FOR i in 1..100000 LOOP INSERT INTO test_bulk_1 VALUES (i, MOD(i, 100) + 1, dbms_random.string('p', 100)); END LOOP; COMMIT; END; / Laufzeit ca. 20 sek 36 Dierk Lenz 18

PL/SQL Bulk Operations Mit FORALL-Klausel: DECLARE TYPE bulktabtype IS TABLE OF test_bulk_1%rowtype INDEX BY BINARY_INTEGER; bulktab bulktabtype; BEGIN dbms_random.seed('bulk Operations'); FOR i in 1..1000 LOOP FOR j in 1..100 LOOP bulktab(j).id1 := (i - 1) * 100 + j; bulktab(j).id2 := j; bulktab(j).c := dbms_random.string('p', 100); END LOOP; FORALL k IN bulktab.first..bulktab.last INSERT INTO test_bulk_1 VALUES bulktab(k); -- pck_se_util.logger('loop ' i); END LOOP; COMMIT; END; / Laufzeit ca. 12 sek 37 PL/SQL Native Compilation Session- bzw. Serverparameter plsql_code_type = interpreted native Beschleunigt PL/SQL-Code-Ausführung Längere Compile-Zeit View dba_plsql_object_settings 38 Dierk Lenz 19

PL/SQL Native Compilation Beispiel Fibonacci-Funktion: CREATE OR REPLACE FUNCTION fib(n PLS_INTEGER) RETURN PLS_INTEGER AS BEGIN IF n = 1 OR n = 2 THEN RETURN 1; ELSE RETURN fib(n - 2) + fib(n - 1); END IF; END; / Laufzeit Standard: 44 sek Laufzeit kompiliert: 19 sek 39 PL/SQL Native Compilation Genereller Tuning-Vorschlag: DB mit plsql_code_type = native erstellen! Problematisch: Häufige PL/SQL Compiles/Recompiles Dynamisch erzeugter Code Änderungen an Basisobjekten 40 Dierk Lenz 20

SQL Ausführungspläne 41 Ausführungspläne Sind das Ergebnis der Optimierung beim Parse-Vorgang von SQL-Befehlen Optimizer Für durchgeführte SQL-Befehle In der SGA abgelegt, über V$-Views abfragbar Können über EXPLAIN-Befehl in PLAN_TABLE generiert werden Können komplex werden Man sollte sie lesen können! 42 Dierk Lenz 21

Anzeige von Ausführungsplänen Manuell: Abfrage der PLAN_TABLE nach EXPLAIN PLAN-Befehl Benutzung von SQL Developer, TOAD, DBMS_XPLAN.DISPLAY_<xxx> HL-Monitoring Module 43 Allgemeines zu Ausführungsplänen Darstellung in Baumstruktur Erste Datenquelle: Von Wurzelknoten nach rechts oberster Eintrag bis keine Verzweigung mehr vorhanden Dann dem Pfad zurück folgen Erfordert Übung 44 Dierk Lenz 22

Optimizer-Kriterien für Ausführungspläne Row Set Datenmenge; entsteht durch Tabellenzugriff bzw. nach Operationen wie Joins Selektivität Größe der Untermenge eines Row Set (zwischen 0 und 1); bestimmt durch ein Prädikat (Bedingung) Kardinalität Anzahl der Rows in einem Row Set 45 Tabellenzugriff Full Table Scan: liest eine Tabelle physisch vom ersten bis zum letzten Block Multiblock Reads Table Access By Index Rowid: Zugriff über eine zuvor aus einem Index bestimmte Menge von Rowids Single Block Reads 46 Dierk Lenz 23

Indexzugriff Unique Scan: findet maximal eine Rowid (Gleichheit auf eindeutigem Index) Range Scan: findet eine zusammenhängende Menge von Rowids (Von-Bis-Suche bzw. nicht eindeutiger Index) Skip Scan: Auswertung eines Index für Non- Präfix-Teil Fast Full Scan: Multiblock Reads auf Leaf- Blockebene 47 Join-Operationen Verknüpfung zweier Unterergebnismengen (meist entsprechend einer Equi-Join-Bedingung) Nested-Loop-Join: Verschachtelte Schleife, meist Indexnutzung im inneren bzw. unteren Teil Hash-Join: Ohne Indexunterstützung bzw. bei großen Datenmengen Sort-Merge-Join: Alte Variante des nicht indexunterstützten Joins Sehr aufwändig, da beide Teilergebnisse vor dem Merge sortiert werden müssen Sehr effektiv für kleine Datenmengen 48 Dierk Lenz 24

Sortieren und Gruppieren Sortieren meist abschließend aufgrund von ORDER BY- Klauseln Gruppieren aufgrund von Gruppenfunktionen, optional GROUP BY-Klauseln Sort Group By: Zunächst Sortieren, dann Gruppieren Ergebnis sortiert (auch ohne ORDER BY) Hash Group By: Keine Sortierung Schneller Bei Kombination von GROUP BY und ORDER BY (gleiche Ausdrücke): Sort Group By Kein Hash Group By mit anschließendem Sort 49 Indexnutzung für ORDER BY Passender Index (alle Spalten der ORDER BY- Klausel, richtige Sortierreihenfolge) muss existieren Mindestens eine Indexspalte NOT NULL Andernfalls eventuell nicht alle Datensätze im Index Abwägung gegenüber alternativen Ausführungsplänen mit besserem Zugriff Standard-String-Sortierung: Binary Muss zu NLS_SORT passen Alternativ: funktionsbasierter Index 50 Dierk Lenz 25

Was bringt das Verständnis von Ausführungsplänen? Beurteilung: Ist das so sinnvoll? Werden die Datenquellen in der richtigen Reihenfolge verarbeitet? Werden Datenmengen richtig abgeschätzt? Falls eine der Antworten Nein ist: Sind die Statistiken aktuell? Welchen Fehler macht der Optimizer? Kann man ihm auf die Sprünge helfen? 51 Beeinflussung des Optimizers Datenmodell ANSI-Join-Syntax Hints Optimizer-Parameter 52 Dierk Lenz 26

Datenmodell Korrekte Verwendung von Datentypen DATE oder TIMESTAMP für Datum- und Zeitinformationen NUMBER für Zahlen Führende Nullen mit Formatmasken, nicht mit String-Typen erzeugen! usw. 53 Datenmodell Indizierung Fremdschlüssel indizieren Anzahl und Art der Indizes abhängig von Anwendung und Nutzung Mehrspaltige Indizes! Ausführungspläne ohne Tabellenzugriff 54 Dierk Lenz 27

ANSI-Join-Syntax Statt FROM x, y WHERE x.col = y.col ANSI-Join-Syntax FROM x INNER JOIN y ON (x.col = y.col) 55 ANSI-Join-Syntax Inner Joins [INNER] JOIN Outer Joins LEFT RIGHT FULL OUTER JOIN Join-Bedingungen ON (<cond>) USING (<col>) NATURAL JOIN Equi-Join für alle Spalten mit gleichem Namen Bitte nicht benutzen!!! 56 Dierk Lenz 28

ANSI-Join-Syntax Optimizer muss nicht selber zwischen Joinund Filter-Prädikaten unterscheiden Join-Reihenfolge vorgegeben Neue Möglichkeiten wie Full Outer Join Oracle empfiehlt Umstieg von Oracle- zu ANSI- Join-Syntax 57 Hints Direktiven an den Optimizer Form: Kommentar direkt hinter SELECT (bzw. DML-Befehl) Erstes Zeichen im Kommentar: + Beispiel: SELECT /*+ FULL(t) */ * FROM <tab> t; Werden grundsätzlich befolgt Ausnahme: Zugriff unmöglich oder Ergebnis wäre falsch Vorsicht: Hints in Anwendungen verhindern ggfs. neue Optimizer-Features 58 Dierk Lenz 29

Oft eingesetzte Hints ORDERED Joins werden in der Reihenfolge der FROM- Klausel ausgeführt LEADING Joins mit den spezifizerten Tabellen zuerst (NO_)USE_NL, (NO_)USE_HASH Ausschluss bzw. Erzwingen von Join-Strategien INDEX Benutzung eines bestimmten Index FULL Full Table Scan 59 Optimizer-Parameter optimizer_mode = all_rows first_rows first_rows_n (N = 1 10 100 1000) Generelles Ziel für den Optimizer Bildschirmapplikation vs. Batch/Report Arbeitsweise der Anwendung Forms-like (Rows werden sofort angezeigt) oder gepuffert (Rows werden alle geholt, dann die ersten angezeigt) optimizer_features_enable = <version> Ausschluss neuer Optimizer-Features U.a. wenn neue Features buggy 60 Dierk Lenz 30

Optimizer-Parameter optimizer_dynamic_sampling = N (N = 0..10) Dynamische Statistikberechnung für Objekte ohne Statistiken Default 2 (für optimizer_features_enable 10.0.0) optimizer_index_caching = N (N = 0..100) Annahme für Cache-Treffer bei Indexzugriff optimizer_index_cost_adj = N (N = 0..10000) Verschieben der Kosten von Index-Zugriffsplänen gegenüber FTS-Zugriffsplänen im Verhältnis N / 100 Default 100 61 Festschreiben von Ausführungsplänen Zwei Features Plan Stability Seit Oracle8i Mit 11g als Auslaufmodell beschrieben Auch als Stored Outlines bekannt SQL Plan Management Neue Methode ab 11g Integriert mit SQL Tuning Sets usw. Nicht für SE verfügbar! 62 Dierk Lenz 31

Stored Outlines Werden benutzt, sobald Session-Parameter use_stored_outlines = true # Kategorie DEFAULT oder use_stored_outlines = <category> Zum Erstellen wird CREATE ANY OUTLINE benötigt Erstellen mit CREATE OUTLINE Session-Parameter create_stored_outlines 63 Vorsicht! use_stored_outlines kein Systemparameter! Setzen über ALTER SESSION bzw. ALTER SYSTEM Einstellung nicht in der Parameterdatei! Aktivierung beim Instanzstart über Startup- Trigger 64 Dierk Lenz 32

Komprimierung mit SE 65 Komprimierung und Performance Komprimieren kostet Zeit Resultat lässt sich oft besser verwenden Beispiel: Sicherung über das Netzwerk Höherer CPU-Aufwand für Komprimierung Geringere Netzwerkbelastung Abwägen der Vor- und Nachteile Betrachtung weiterer Effekte Geringerer Platzverbrauch Höherer Aufwand beim Zurücksichern (Laufzeit!) 66 Dierk Lenz 33

Braucht man hierfür nicht die Advanced Compression Option? Einige Ausnahmen funktionieren mit SE: Indexkomprimierung Komprimierung von RMAN-Sicherungen 67 Indexkomprimierung Keine echte Komprimierung Weglassen von sich wiederholenden Teilschlüsseln in der Leaf-Blockebene CREATE INDEX COMPRESS <n> <n> max. Anzahl der Spalten (nicht eindeutiger Index) bzw. Anzahl Spalten - 1 (eindeutiger Index) 68 Dierk Lenz 34

Komprimierung von RMAN- Sicherungen Syntax: BACKUP AS COMPRESSED BACKUPSET BASIC-Komprimierung ohne ACO möglich Bessere Verfahren (bessere Komprimierung, weniger CPU-Last) in den ACO-Verfahren Vorsicht: Rücksicherung von komprimierten Backupsets kann mehr Zeit kosten 69 RMAN Blockkomprimierung oder das Überspringen von Blöcken! Gilt grundsätzlich für Backupsets Null Block Compression: Keine Sicherung von Blöcken, die nie Daten enthalten haben immer Unused Block Compression: Keine Sicherung von Blöcken, die aufgrund der Tablespace-Bitmap leer sind compatible 10.2.0 keine garantierten Restore Points locally-managed Tablespace full oder incremental level 0 Disk-Kanal oder Oracle Secure Backup 70 Dierk Lenz 35

Programmierempfehlungen 71 Array Binds Wie beim Thema PL/SQL Bulk Operations: Effizienzsteigerung beim Datentransfer zwischen Client und Server Sowohl für SELECTs (Fetches) als auch für DMLs Nutzung in vielen Umgebungen automatisiert 72 Dierk Lenz 36

Bindevariable vs. Literale Eingabewerte für SQL-Befehle Literal: WHERE kdnr = 4711 Bindevariable WHERE kdnr = :x SQL-Befehl wiederverwendbar Einsparung von Parse-Zeiten und Parse- Vorgängen Vorsicht bei nicht-gleichverteilten Daten 73 Cursors 74 Dierk Lenz 37

Cursor Sharing Möglichkeit zur künstlichen Erzeugung von BV- SQLs durch cursor_sharing = FORCE (Default EXACT) Ersetzen aller Literale durch generierte BVs vor dem Parsen Vorsicht: Kontrollverlust in der Anwendung Keine Einsparung bei der Parse-Infrastruktur Wert SIMILAR deprecated und gefährlich! 75 Adaptive Cursor Sharing Neuer Mechanismus in 11.2 zur Vermeidung von Bind Peeking-Fehlern Anderes Feature als cursor_sharing Wird automatisch in Betracht gezogen, wenn: Verwendung von Bindevariablen Möglicher Einfluss der BV-Werte auf Ausführungsplan aufgrund von Histogrammen Einige gute sowie einige schlechte Ausführungen Vorsicht: Neues Feature; einige Bugs z.b. in 11.2.0.2 76 Dierk Lenz 38

Adaptive Cursor Sharing Cursor mit den o.a. Eigenschaften markiert als Bind Sensitive Beobachtung der Ausführungen; Buchführung über gute, mittlere und schlechte Ausführungen (v$sql_cs_histogram) Wenn zu viele schlechte Ausführungen: Umstellung auf Bind Aware Ausführungsplan pro Klasse von Bindevariablen 77 Adaptive Cursor Sharing Abschaltbar mit _optimizer_extended_cursor_sharing = NONE _optimizer_extended_cursor_sharing_rel = NONE _optimizer_adaptive_cursor_sharing = FALSE Oder: Abschalten von Bind Peeking _optim_peek_user_binds = FALSE 78 Dierk Lenz 39

Das Oracle Wait Interface 79 Oracle Wait Interface Zwei Zustände für einen Oracle-Server-Prozess Aktiv (d.h. er nutzt die CPU) Inaktiv (d.h. er wartet auf etwas) Wartezustände unterschiedlichster Art Idle (nichts zu tun) Locks (Sperren, z.b. auf Datensatzebene) Latches (interne Sperren; meist extrem kurz) IO (Block muss gelesen oder geschrieben werden) u.v.m. 80 Dierk Lenz 40

Oracle Wait Interface Welche Wartezustände gibt es? v$event_name (> 1000 Einträge) Wer wartet auf was? SELECT sid, event, wait_time, seconds_in_wait, wait_class, blocking_instance, blocking_session, blocking_session_status, final_blocking_instance, final_blocking_session, final_blocking_session_status FROM v$session WHERE state = 'WAITING AND wait_class <> 'Idle' 81 Oracle Wait Interface Wartezustände der aktiven Sessions SELECT sid, s.username, s.program, e.event, e.wait_class, e.total_waits, e.total_timeouts, e.time_waited_micro FROM v$session s JOIN v$session_event e USING (sid) WHERE e.wait_class <> 'Idle' ORDER BY sid, e.time_waited_micro DESC 82 Dierk Lenz 41

Monitor the Application 83 Enterprise Manager? Praktisch alle Performance-relevanten Teile des EM stecken in den Diagnostics und Tuning Packs EM daher für Performance-Analyse in der SE nicht geeignet Welches Werkzeug stellt die relevanten und zugänglichen Teile der DB dar? 84 Dierk Lenz 42

Welche V$-Views sind von Interesse und dürfen benutzt werden? 85 V$-Views Komplette Aufzählung nicht machbar Auf den folgenden Seiten einige Beispiele In den anderen Kapiteln weitere Hinweise 86 Dierk Lenz 43

V$-Views (Beispiele) v$session Angemeldete Sessions inkl. aktuelle Wartezustände v$filestat IO-Zahlen auf Datendateiebene v$lock Sperrinformationen 87 V$-Views (Beispiele) v$sysstat Systemstatistiken v$system_event Wartezustände auf Systemebene v$event_histogram Wartezusände in Histogrammform 88 Dierk Lenz 44

Monitoring mit Historisierung am Beispiel HL-Monitoring Module 89 HL-Monitoring Module Demo 90 Dierk Lenz 45

Kein AWR? Statspack! 91 Was ist Statspack? Vorläufer von AWR Wird immer noch mitgeliefert Kann für alle Editionen genutzt werden Ausschließlich Text-Output Basiert auf dem regelmäßigen Abziehen der Werte aus diversen V$-Views ( Snapshot ) Report können für den Zeitraum zwischen zwei Snapshots erzeugt werden Zwischen den Snapshots darf kein Neustart der Instanz liegen (wg. Reset der V$-Views) 92 Dierk Lenz 46

Aufsetzen von Statspack Installation unter SQL*Plus (mit SYSDBA- Privilegien): @?/rdbms/admin/spcreate Wenn Scheduler-Jobs gewünscht: GRANT create job TO perfstat; 93 Statspack-Jobs BEGIN dbms_scheduler.create_job(job_name => 'SPJOB', job_type => 'STORED_PROCEDURE', job_action => 'statspack.snap', start_date => systimestamp, repeat_interval => 'FREQ=HOURLY;BYMINUTE=0,15,30,45;BYSECOND=0', enabled => TRUE); dbms_scheduler.create_job(job_name => 'SPPURGE', job_type => PLSQL_BLOCK', job_action => 'BEGIN statspack.purge(30); END;', start_date => systimestamp, repeat_interval => 'FREQ=DAILY;BYHOUR=3;BYMINUTE=0;BYSECOND=0', enabled => TRUE); END; / 94 Dierk Lenz 47

Statspack-Reports Auf dem DB-Server als PERFSTAT in SQL*Plus: @?/rdbms/admin/spreport Nach Eingabe einiger Parameter, z.b. für Startund Ende-Snapshot, wird eine Textdatei als Report erzeugt 95 Statspack Demo 96 Dierk Lenz 48

Exkurs: Werkzeuge für Performance- Analysen Teil 2 97 SQL-Trace Methode Nr. 1 zur Analyse von Anwendungsproblemen Zwei Phasen 1. Trace-Datei erzeugen 2. Trace-Datei analysieren Voraussetzung: Ablage und Bearbeitung auf dem DB-Server! 98 Dierk Lenz 49

SQL-Trace-Datei erzeugen Drei Methoden ALTER SESSION SET sql_trace = true; Event 10046 DBMS_MONITOR.SESSION_TRACE_ENABLE Unterschiedliche Wege für das gleiche Resultat 99 SQL-Trace-Datei ASCII-Textdatei mit generiertem Namen Wie heißt die Trace-Datei? Vor 11g: ORADEBUG (s.u.) Ab 11g: v$process.tracefile Namen für die Suche verändern: ALTER SESSION SET tracefile_identifier = '<name>'; 100 Dierk Lenz 50

ALTER SESSION SET sql_trace = true Gilt für aktuelle Session Keine Optionen Kein Einfluss von außen 101 Event 10046 Events: Steuerung von internen Features, Debug-Informationen, Grundform: ALTER SESSION SET EVENTS '<event> trace name context forever, level <n>' <event> = 10046 Level s. nächste Seite Werte kombinieren mit Bit-Oder 102 Dierk Lenz 51

Event-Level für 10046 Level Bedeutung Neue Syntax 1 SQL_TRACE aktivieren 4 Level 1 plus Capture von Binds bind=true 8 Level 1 plus Capture von Wait Events wait=true 16 STAT-Dumps für jede Ausführung plan_stat=all_executions 32 Keine STAT-Dumps plan_stat=never 64 Adaptive STAT-Dumps (Execution Time > ~1 min) plan_stat=adaptive 103 Alternative Event-Syntax ab 11.2.0.2 ALTER SESSION SET EVENTS 'sql_trace' ALTER SESSION SET EVENTS 'sql_trace binds=true' ALTER SESSION SET EVENTS 'sql_trace off' 104 Dierk Lenz 52

DBMS_MONITOR.SESSION_TRACE_ENABLE PL/SQL-API für SQL-Trace dbms_monitor.session_trace_enable( session_id IN BINARY_INTEGER, serial_num IN BINARY_INTEGER, waits IN BOOLEAN, binds IN BOOLEAN, plan_stat IN VARCHAR2) session_id/serial_num entsprechen sid/serial# aus v$session Wenn NULL: eigene Session! 105 DBMS_MONITOR.SESSION_TRACE_ENABLE waits/binds: wie Event-Level 8, 4 plan_stat: 'NEVER', 'FIRST_EXECUTION' oder 'ALL_EXECUTIONS' Standards: waits = TRUE binds = FALSE plan_stat = NULL = 'FIRST_EXECUTION' 106 Dierk Lenz 53

TKPROF Standardwerkzeug zur Analyse von SQL-Trace- Dateien Verwendung auf dem DB-Server Zugriff auf Trace-Verzeichnis Pre-11g: user_dump_dest Ab 11g: Trace-Verzeichnis im ADR Parameter anzeigen: Aufruf ohne Parameter Wichtigster Parameter: SORT 107 TKPROF Demo 108 Dierk Lenz 54

Trace Analyzer Erweitertes TKPROF Infos und Download: Oracle Support 224270.1 Installation trca.zip entpacken Im install-verzeichnis sqlplus / as sysdba @tacreate Achtung: Bei Tablespacenamen auf Groß- /Kleinschreibung achten 109 Trace Analyzer Trace-Datei analysieren in SQL*Plus (im trca/run-verzeichnis): @trcanlzr <tracefile> Angabe der Trace-Datei ohne Verzeichnis (Oracle Directory wird passend angelegt und genutzt) Zip-Datei mit Ergebnissen, enthält u.a. HTML- Report 110 Dierk Lenz 55

Trace Analyzer Demo 111 ORADEBUG Wenig dokumentierte SQL*Plus-Funktion Hilfreich für Spezialisten U.a. setzen von Events in anderen Sessions (nicht nur SQL-Trace) Aufruf: sqlplus / as sysdba SQL> oradebug 112 Dierk Lenz 56

ORADEBUG: SETxxxPID ORADEBUG binden an beliebigen Serverprozess Verschiedene Möglichkeiten: SETMYPID Eigener Prozess SETORAPID <pid> Prozess mit der Oracle-PID <pid> (v$process.pid) SETOSPID <spid> Prozess mit der OS-PID <spid> (v$process.spid) 113 ORADEBUG: Name der Trace-Datei In SQL*Plus: oradebug setxxxpid oradebug tracefile_name 114 Dierk Lenz 57

ORacle IO Numbers ORION Analyse des IO-Subsystems durch Erzeugung einer DB-ähnlichen künstlichen Last Vorsicht: Zerstörung der Inhalte der Devices bei Schreibtests Pre-11gR2: Download auf OTN Ab 11gR2: Integriert in Database-Installation Dokumentation im Performance Tuning Guide 115 Optimal Installieren und Konfigurieren 116 Dierk Lenz 58

Installation Installation von SE oder SE1 ohne große Auswahlmöglichkeiten Wenn möglich: Aktuelles Patch Set (z.b. 11.2.0.3) als Basis Zusätzlich neuestes PSU Auch für Clients! Beim Aufbau des Servers beachten: Patch Sets sind neue Installationen neben den bestehenden (ca. 1x pro Jahr) Planen: SPUs (früher CPUs) bzw. PSUs 1x pro Quartal Nächste vier Termine stehen jeweils fest 117 DB-Infrastruktur Oracle-Software benötigt spezielle Infrastruktur CPU-Leistung Hauptspeicher IO-Subsystem Anforderungen nicht für alle Anwendungsfälle gleich So viel Informationen wie möglich über Anwendungseigenschaften sind erforderlich 118 Dierk Lenz 59

Rechner für SE Nicht mit Kernen geizen! Vorsicht: Für serielle Prozesse auf Leistung der einzelnen Kerne achten! Hauptspeicher kann nicht schaden! Rechner unter 4 GB Hauptspeicher kaum sinnvoll; meist erheblich mehr Qualitativ hochwertige NICs Wichtig für DB-Performance: IO, IO, IO, 119 IO-Subsystem Leistung des Gesamtsystems bei DB- Anwendungen direkt abhängig vom IO- Subsystem Oft gemachte Fehler Disks irgendwie vom SAN RAID-5 Zu wenig Spindeln 120 Dierk Lenz 60

Basiskonfiguration: Parameter db_name = DBSE db_domain = hl.de db_create_file_dest = +DATA local_listener="(address=(protocol=ipc)(key=register))" audit_file_dest = /u01/app/oracle/admin/dbse/adump compatible = 11.2.0 control_file_record_keep_time = 100 db_block_size = 8192 db_cache_size = 400M shared_pool_size = 500M large_pool_size = 100M streams_pool_size = 100M java_pool_size = 100M pga_aggregate_target = 400M undo_management = auto undo_tablespace = tsundo undo_retention = 3600 control_management_pack_access = none log_checkpoint_interval = 0 log_checkpoint_timeout = 0 optimizer_index_caching = 90 optimizer_index_cost_adj = 25 plsql_code_type = native 121 Basiskonfiguration: Parameter db_block_size 8 KB gute Standardgröße für > 90% aller DBs Statt Änderung der Standardblockgröße eher Spezial-Tablespaces mit unterschiedlicher Blockgröße log_checkpoint_interval / log_checkpoint_timeout Erzeugen zusätzliche Checkpoints Regulierung der Checkpoint-Häufigkeit durch Größe der Redologs 122 Dierk Lenz 61

Basiskonfiguration: Parameter undo_retention Aufbewahrungszeit von Undo-Information in Sekunden Abwägung von Performance und Anwendungsstabilität Kleiner Wert = Schnellere Wiederbenutzung von Undo-Blöcken = Weniger Undo-Blöcke in der SGA = Bessere Performance ABER Snapshot Too Old -Fehler 123 Basiskonfiguration: Anpassung Memory-Parameter an die Gegebenheiten Vorhandenes Memory nutzen Kein Paging bzw. Swapping verursachen Vorgaben von Software-Herstellern bzw. gemachte Erfahrungen berücksichtigen Kontrolle der Einstellungen mit Monitoring 124 Dierk Lenz 62

Basiskonfiguration: AMM sga_target / memory_target von H&L nicht empfohlen sga_max_size erlaubt wg. Online- Möglichkeiten AMM teilt bei hauptsächlicher Nutzung von Literalen zu viele Shared Pool zu Buffer Cache zu klein! 125 Basiskonfiguration: AMM Vorsicht! Oracle korrigiert ab 11.2 shared_pool_size auch ohne AMM bei drohenden ORA-04031 Abhilfe: _memory_imm_mode_without_autosga = FALSE Führt jedoch zu ORA-04031 Besser: Shared Pool vergrößern Views v$sga_resize_ops bzw. v$memory_resize_ops beobachten (IMMEDIATE- Operationen) 126 Dierk Lenz 63

Basiskonfiguration: Redologs Redundanz wg. DB-Sicherheit Größe mindestens 100 MB Bei großer Transaktionslast auch (viel) größere Redologs Reduzierung der Checkpoint-Häufigkeit 127 RAC oder nicht RAC PROs RAC ist anerkannt bzgl. Hochverfügbarkeit Gute Cluster mit 4 Sockeln machbar Transparent für die Anwendungen CONs Aber: wie oft fällt ein Server heute wirklich aus? Alternative: Virtualisierung Komplexität steigt 128 Dierk Lenz 64

Editionswechsel Kein Problem: von SE zu EE EE-Installation Ausführen von catalog.sql und catproc.sql; evtl. PSU Skripte Optional utlrp.sql Vorgehensweise nicht übertragbar für SE- Downgrade Export/Import der Daten in neue DB notwendig! 129 Häufige Fehler: Zu viele Serverparameter Übernahme von alten Empfehlungen und Bug-Fixes Z.B. Event-Parameter Z.B. db_file_multiblock_read_count Oracle-Empfehlung seit 10g: aus der Parameterdatei entfernen! Keep it simple! 130 Dierk Lenz 65

Häufige Fehler: Automatisches Memory-Management pga_aggregate_target funktioniert i.a. sehr gut! sga_target nicht! (Dementsprechend auch memory_target nicht!) Überziehung der Größe des Shared Pools zu Lasten des Buffer Caches bei Literal- Anwendungen 131 Vielen Dank für Ihre Aufmerksamkeit! Dierk Lenz dierk.lenz@hl-services.de 132 Dierk Lenz 66