oracle tuning – teil 1 - ORBIT Gesellschaft für Applikations

Werbung
ORACLE TUNING – TEIL 1
_ Einführung & Allgemeines
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
PERFORMANCE TUNING: OVERVIEW
_ Schematische Darstellung der wichtigsten Einflussfaktoren
auf die Performance
Sessions
SQL
Blockgröße
Memory
I/O
Locks
Performance
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
SEGMENTS, EXTENTS UND BLOCKS
_ Übersicht
Tablespace
Segments
Extents
Blocks
Default: 8KB
Max: 32KB
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
Rows
SEGMENTS, EXTENTS UND BLOCKS
_ Datenbankobjekte (Tabellen, Indizes, Partitionen) werden
in Segmenten gespeichert
_ Segmente bestehen aus mindestens 1 Extent (Initial
Extent)
_ Extent Allocation Auto (>64K/<64M) oder Uniform
Allocation
_ Uniform Allocation kann Fragmentierung reduzieren (BigTables)
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
PCTFREE UND PCTUSED
_
PCTFREE gibt den für Updates zu
reservierenden Speicherplatz in
einem Block an
_
Verfügbarer Speicherplatz: Blocksize
– Overhead – PCTFREE
_
PCTUSED gibt an, zu wieviel Prozent
der Block nur gefüllt sein darf,
um neue Rows aufnehmen zu dürfen
_
Row-Chaining: Row muss über
mehrere Blöcke verkettet abgelegt
werden
_
Row-Migration: Row wird nach
Update in neuen Block verschoben,
wenn aktueller Block (inkl. PCTFREE)
das Update nicht aufnehmen kann
_
PCTFREE = 20%
High-Update-Tables = 40-50%
empfohlen
Low-Update-Tables =
5-10% empfohlen
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
PCTUSED = 40%
100% – PCTFREE – 1 Row
wird empfohlen
AUTOMATIC SEGMENT SPACE MANAGEMENT (ASSM)
_
ASSM stellt eine wesentlich einfachere und effizientere Segmentverwaltung
bereit. Insbesondere sind ausgedehnte Freelists nicht mehr nötig.
_
Vorteile ergeben sich insbesondere bei Datensätzen stark variierender
Größe.
_
Nachteilig ist allerdings die längere Antwortzeit bei Full Table Scans sowie
bei häufigen, parallelen Inserts.
 ASSM sollte bei OLAP-Datenbanken nicht benutzt werden.
 ASSM sollte bei OLTP-Datenbanken nur dann benutzt werden, wenn die
Einfügefrequenz nicht zu hoch ist.
_
Die Parameter PCTFREE und PCTUSED werden nicht mehr benötigt und
werden gar ignoriert, falls sie gesetzt sind.
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
MULTIPLE FREELISTS
_
Oracle verwaltet freie Blöcke unterhalb der Highwater-Mark (HWM) in
Freelists
_
Multiple-Freelists als Option bei “Heavy-Concurrent-User-DML”
_
Session verwendet nur eine der Freelists
_
Nicht mit ASSM verwendbar
CREATE TABLESPACE mssm_ts
DATAFILE '/u01/oradata/mssm_ts_01.dbf' SIZE 500M
SEGMENT SPACE MANAGEMENT MANUAL;
CREATE TABLE test (
pid number not null primary key
) STORAGE (freelists 5)
TABLESPACE mssm_ts;
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
DB_BLOCK_SIZE
_
Der Parameter „db_block_size“ definiert die Größe der Datenblöcke.
_
db_block_size

Muss ein ganzzahliges Vielfaches der Festplattenblockgröße sein

kann laut Donald Burleson nachträglich beim Reorganisieren der Datenbank verändert
werden

darf zwischen 2048 und 32768 Byte liegen

Default-Wert: 8192 Byte

Größere Werte
» erhöhen bei OLTP-Datenbanken die Wahrscheinlichkeit von Sperrsituationen
» Bei OLAP-Datenbanken führen sie jedoch zu schnelleren Abfragen

Kleinere Werte
» führen bei OLAP-Datenbanken zu unnötig häufigen Festplattenzugriffen
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
DB_FILE_MULTIBLOCK_READ_COUNT
_ Gibt an, wie viele Datenblöcke bei Full Table Scans gleichzeitig
und asynchron von der Festplatte gelesen werden können.
_ Für OLAP-Datenbanken sollte er hoch gesetzt werden.
_ Bei OLTP-Datenbanken kann ein zu hoher Wert den Optimizer
zu unnötig häufigen Full Table Scans verleiten.
_ Unter UNIX liest ORACLE grundsätzlich 64 KByte von der
Festplatte. Daher kann es sinnvoll sein, wenn das Produkt von
db_block_size und db_file_multiblock_read_count den Wert
65536 hat.
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
DB_WRITER_PROCESSES
_
Durch den Initialisierungsparameter db_writer_processes kann die Anzahl
der parallel laufenden DBWR-Prozesse definiert werden.
_
Aktivitäten des DBWR:
 Der Database Writer (DBWR), schreibt Änderungen an den Datenblöcken
in die Datendateien auf der Festplatte.
 Die Übertragung geänderter Datenblöcke aus dem Database Buffer in die
Datendateien erledigt der Prozess DBWR nahezu kontinuierlich.
 DBWR Schreibt ASYNCHRON, wenn
»
»
»
»
Die Anzahl der Dirty Buffers zu hoch ist
Zu wenig Platz im Buffer-Cache ist
Das Zeitintervall abgelaufen ist (3 s)
Der Logwriter einen CHECKPOINT auslöst (z.B. wegen Logfile-Switch)
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
SQL HARD UND SOFT PARSES
_
Jedes DDL/DML-Statement wird nach syntaktischem und semantischem Check in
“geparster” Form nach Bestimmung eines Execution Plans in die SQL-Area geladen
_
Dieser teils mit erheblichen Kosten verbundene Vorgang wird als “Hard-Parse” bezeichnet
_
Vor dem Parsing wird über einen Hashvergleich bestimmt, ob sich das Statement bereits in
der SQL-Area befindet. Wenn ja, kann der Aufwand für das Parsing eingespart werden, es
wird dann das bereits vorhandene Statement für das Execute verwendet (“Soft Parse”)
_
Wiederkehrende Statements sollten daher mit Bind-Variablen ausgeführt, um den Anteil
der Soft Parses zu erhöhen mehrfache Hard Parses zu vermeiden
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
INDEXE (B-TREE)
_
Die Blattknoten (Leaf) beinhalten Einträge, welche aus den indizierten Werten und der
zugehörigen rowid (Nummer des Datensatzes in der Tabelle) aufgebaut sind
_
Über den Wurzelknoten (Root) und die Zweigknoten (Branch) lässt sich der benötigte
Blattknoten (Leaf) in logarithmischer Laufzeit auffinden (Unique Scan)
_
Um Bereichanfragen effizent zu beantworten sind Blattknoten untereinander verkettet; alle
anderen Werte im Bereich (Range Scan) lassen sich sequentiell finden
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
TABLE ACCESS BY INDEX (ROWID)

Zeilen werden über physikalische Adresse (ROWID) ermittelt und die Blöcke gelesen

Diesem schnellsten Zugriff auf eine Tabelle via ROWID geht immer ein Index-Zugriff voraus
»
»
»
»
Index
Index
Index
Index
Unique Scan = Auffindung von einer ROWID im Index
Range Scan = Auffindung von mehr als einer ROWID im Index
Full Scan = Abruf aller ROWIDs aus dem Index, kann sortiert werden
Fast Full Scan = Abruf aller ROWIDs über Multiblock I/O, nicht sortierbar
SELECT * FROM sh.customers WHERE cust_id = 1;
SELECT * FROM sh.customers WHERE cust_id > 1 AND
cust_id < 10;
SELECT cust_id FROM sh.customers ORDER BY cust_id;
SELECT cust_id FROM sh.customers WHERE cust_id > 1;
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
NESTED LOOP, SORT MERGE JOIN UND HASH JOIN

Verknüpfung von zwei Ergebnismengen (bei Plan über mehrere Tabellen bzw. Indizes)

Nested Loop = Für jeden Satz der 1. Menge wird die 2. Menge durchsucht
(kostengünstig bei kleinen Ergebnismengen und Cartesian Products)

Sort Merge Join = Bei gleicher Sortierung des Join-Kriteriums beider Mengen
(kostengünstig bei zwei gleich geordneten Ergebnismengen nach Join-Kriterium)

Hash Join = Caching der kleineren Ergebnismenge, Berechnung eines Hash
(kostengünstig, bei kleiner mit großer Ergebnismenge, kleine Menge wird gepuffert
und gehasht)
SELECT cu.cust_last_name
FROM oe.customers cu, oe.orders od
WHERE cu.customer_id = od.customer_id;
SELECT * FROM sh.customers cu, sh.countries co
WHERE co.country_id = cu.country_id;
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
SUBQUERYS [NOT ]IN UND EXISTS
 Eine IN-Subquery muss für jede Zeile der äußeren Query
ausgeführt werden (Nested)
 Eine EXISTS-Subquery muss nur einmal ausgeführt werden
(Ausnahme: korrelierte Subquery)
 Standard-Joins sind generell meistens kostengünstiger als
Subquerys und sollten wenn möglich daher immer bevorzugt
werden
SELECT c1.customer_id FROM oe.customers c1
WHERE c1.customer_id IN
(SELECT customer_id FROM oe.customers c2);
SELECT c1.customer_id FROM oe.customers c1
WHERE EXISTS
(SELECT customer_id FROM oe.customers c2);
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
QUERY HINTS

Über Query-Hints kann das Verhalten des CBO positiv wie negativ beeinflusst werden

Die manuelle Beeinflussung der Plan-Erstellung kann Kosten für das SQL-Parsing
sparen

Ordered-Hint = Erzwingt die Verarbeitung der From-Klausel in angegebener
Reihenfolge
SELECT * FROM oe.customers cu, oe.orders od WHERE cu.customer_id = od.customer_id;
SELECT /*+ ordered */ * FROM oe.customers cu, oe.orders od
WHERE cu.customer_id = od.customer_id;
Entscheidung des CBO auf Basis der Statistik war hier richtig, Orders als Driving-Table zu nehmen (Count= 105)
Query-Hint erzwingt Customers als Driving-Table, hier negative manuelle Einflußnahme (Count = 319)
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
QUERY HINTS
Hint
Beschreibung
ALL_ROWS
Verwendung des CBO, optimaler Throughput
CACHE(table)
In Kombination mit Full, Tabelle wird im Buffer gecached
FIRST_ROWS(n)
Verwendung des CBO, schnelle Rückgabe erster Zeilen
FULL(table)
Veranlasst den CBO, für die Tabelle einen FTS
durchzuführen
INDEX(table index)
Zwingt den CBO, den angegebenen Index zu verwenden
INDEX_FFS(table index)
Zwingt den CBO, den Index mit Fast Full Scan zu
verwenden
NO_INDEX(table index)
Zwingt den CBO, den angegebenen Index nicht zu
verwenden
Eine vollständige Auflistung aller Hints ist verfügbar unter:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements006.htm#SQLRF50301
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
VORGEHENSWEISE BEIM TUNING
_
Schritte:

Tunen von Oben nach Unten (Top-Down)
» Anwendung vor SQL
» SQL vor Instanz

Stets dort tunen, wo die größte Einsparung liegt
» Wo sind die längsten Wartezeiten?
» Wo sind die längsten Antwortzeiten?

_
Wenn Ziel erreicht ist: Aufhören!!
Hilfsmittel:

Statspack
 Kostenfrei

AWR/ADDM
 muss gesondert lizensiert werden
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
SQL TUNING TIPPS

Function-based-Indexes nutzen, wenn Funktionen in Where-Bedingungen genutzt
werden

Partionierung, IOT und Bitmap-Indexes in Betracht ziehen

Bind-Variablen, Table-Aliase und FQN verwenden

Cursor-Loops vermeiden, SQL ist meist schneller als PL/SQL (Context-Switching)!

Distinct und Union sind kostenintensiv, Union All aber nicht!

Full-Table-Scans vermeiden, wenn < 40% der Zeilen betroffen sind

Kleine Tabellen, die FTS unterliegen, in den Keep-Pool des Buffer-Cache aufnehmen

EXISTS und NOT-EXISTS als Outer-Joins umschreiben

Temporäre Tabellen bei komplexen Unterabfragen in Betracht ziehen

Denormalisierung und Materialized Views bewusst einsetzen
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
ORACLE TUNING – TEIL 2
_ Einsatz von Automatischem SQL-Tuning
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
SQL-TUNING
 Schlecht laufende SQL-Statements können eine Applikation massiv
verlangsamen.
 Kommt es in der Applikation zu datenbankseitigen
Performanceproblemen, hat dies meist mit schlecht laufenden SQLStatements zu tun.
 Leider haben Entwickler oft zu wenig SQL-Tuning-Kenntnisse.
 DBAs haben meist zu wenig Kenntnisse bzgl. der Applikation.
 Klassische Verfahren sind das Erstellen und Analysieren von TraceFiles und die Analyse von sog. Ausführungsplänen. Beides setzt
einiges an Erfahrung voraus.
 An dieser Stelle setzen die Möglichkeiten des Automatischen SQLTunings von Oracle ein, die beide Seiten bei der Lösung von
Performanceproblemen unterstützen.
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
21
BEGRIFFE RUND UM DAS AUTOMATISCHE SQL-TUNING
 Automatic Tuning Optimizer (ATO)
 Query Optimizer
 SQL Tuning Advisor
 SQL Tuning Tasks
 SQL Tuning Sets
 SQL Profile
 Automatic Workload Repository (AWR)
Diese Begriffe und die damit verbundenen Funktionalitäten sind
zahlreichen Administratoren und Entwicklern nicht wirklich bekannt.
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
22
QUERY OPTIMIZER / AUTOMATIC TUNING OPTIMIZER
SQLStatements
Query Optimizer
Ausführungspläne
 Query Optimizer muss sich beeilen!
 Der sog. Automatic Tuning Optimizer
kann sich hingegen mehr Zeit lassen.
 Ein Expertensystem, das bei Bedarf
aufgerufen wird, längere Laufzeiten hat
und dem Anwender Tuning-Tipps inkl.
Skripts hierfür liefert.
Oracle-Datenbank
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
23
WIE SIEHT EIN SQL-AUSFÜHRUNGSPLAN AUS?
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
24
WIE KOMMT DIE DATENBANK ZU EINER ENTSCHEIDUNG?
 Die Datenbank muss viele Dinge entscheiden. Z.B.:
 Wird über einen Index (falls es einen passenden gibt) zugegriffen
oder lieber die ganze Tabelle gescannt.
 Wie werden Joins durchgeführt (z.B. Hash-Joins oder Nested
Loops)
 Um solche Entscheidungen treffen zu können, benötigt der Query
Optimizer Informationen, die sog. Statistiken, die im sog. Data
Dictionary abgelegt werden.
 Oracle erfasst Statistiken großenteils automatisch.
 Der Automatic Tuning Optimizer erfasst zahlreiche zusätzliche
Informationen, die mit den „normalen“ Statistiken nicht erfasst
werden. Das führt zu Verbesserungsvorschlägen und/oder besseren
Ausführungsplänen.
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
25
SQL-TUNING ADVISOR
 Das Werkzeug, mit dem der Automatic Tuning Optimizer dieses tut,
ist der SQL Tuning Advisor (Package DBMS_SQLTUNE).
 Der Anwender kann hiermit explizit SQL-Statements detailliert
untersuchen lassen.
 Meist sind dies Statements, von denen man festgestellt hat, dass sie
große Last auf der Datenbank verursachen und so ggf. die gesamte
Anwendung ausbremsen.
 Dies kann viele Gründe haben (z.B. fehlende Indizes,
Defragmentierung, veraltete Statistiken, suboptimale
Ausführungspläne).
 Die Statements werden an den SQL Tuning Advisor übergeben und
dieser prüft nun, welche Optimierungsmöglichkeiten es gibt.
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
26
SQL TUNING TASKS
 Zu diesem Zweck legt der SQL Tuning Advisor eine Aufgabendefinition (Task) in der Datenbank an, der die Untersuchung
vornehmen soll. Dies ist der sog. SQL Tuning Task .
Anlegen eines Tuning Tasks: DBMS_SQLTUNE.CREATE_TUNING_TASK
Ausführen eine Tuning Tasks: DBMS_SQLTUNE.EXECUTE_TUNING_TASK
Tuning-Bericht anzeigen: DBMS_SQLTUNE.REPORT_TUNING_TASK
Löschen eines Tuning Tasks: DBMS_SQLTUNE.DROP_TUNING_TASK
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
27
SQL TUNING TASKS UND SQL PROFILE
 Der Bericht, den der SQL Tuning Advisor mit Hilfe eines Tuning Tasks
erstellt, kann verschiedene Arten von Verbesserungsvorschläge
enthalten. Er enthält nicht nur Vorschläge sondern auch die Skripte,
mit denen man diese Vorschläge direkt umsetzt!
 SQL Tuning Advisor kann ein SQL-Statement nehmen und
verschiedene Ausführungsplanvarianten schlicht ausprobieren.
 Findet er einen Plan, der besser ist, als der der zur Zeit verwendet
wird, legt er ein sog. SQL Profil an.
 Ein SQL Profil enthält einige zusätzliche Statistiken zu einem SQLStatement.
 Meist ist es sinnvoll, einen vorgeschlagenes SQL Profil zu akzeptieren
DBMS_SQLTUNE.ACCEPT_SQL_PROFILE
 Mehrere SQL-Statements können zu einem sog. SQL Tuning Set
zusammengefasst und gemeinsam analysiert werden
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
28
NOCHMAL DIE BEGRIFFE IM ÜBERBLICK
SQL-Statement
Query Optimizer
Ausführungsplan
SQL Tuning Task
TuningVorschläge
SQL-Profil
SQL Tuning
Advisor
Automatic
Tuning Optimizer
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
29
SQL-TUNING IM ORACLE ENTERPRISE MANAGER
 Übersicht im Bereich „Performance“
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
30
SQL-TUNING IM ORACLE ENTERPRISE MANAGER
 Übersicht im Bereich „Top Aktivität“
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
31
SQL-TUNING IM ORACLE ENTERPRISE MANAGER
 Maske zu „SQL Tuning Advisor planen“
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
32
SQL-TUNING IM ORACLE ENTERPRISE MANAGER
 Lauf eines Tuning Tasks
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
33
SQL-TUNING IM ORACLE ENTERPRISE MANAGER
 Ergebnis des Tuning Tasks; in diesem Fall ein SQL Profil
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
34
SQL-TUNING IM ORACLE ENTERPRISE MANAGER
 Vergleich alter und neuer Ausführungsplan
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
35
AWR (AUTOMATIC WORKLOAD REPOSITORY)
 Oft ist es allerdings nicht im ersten Moment klar, welche SQLStatements für die Performanceprobleme zuständig sind. Hier kann
das sog. AWR (Automatic Workload Repository) weiterhelfen.
 Das AWR sammelt, wenn aktiviert, permanent zahlreiche Statistiken
zu aktiven Sessions, Zugriffen, Warteereignissen etc.
 Auf die Informationen des AWR kann über zahlreiche Dictionary Views
zugegriffen werden.
 Auf den Informationen des AWRs baut der sog. ADDM (Automatic
Database Diagnostic Monitor) auf. Der ADDM gibt einen Report mit
Empfehlungen zur DB aus.
 Ein Beispiel …
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
36
VIELEN DANK
_
für Ihre Aufmerksamkeit
 Falls Sie Fragen zu dieser Präsentation haben, sprechen Sie uns einfach
an.
 Ihre Ansprechpartner
Dr. Götz Gleitsmann
+49 228-95693-0
[email protected]
www.orbit.de
Frank Winter
+49 228-95693-0
[email protected]
www.orbit.de
© 2013 ORBIT Gesellschaft für Applikations- und Informationssysteme mbH | Präsentation vom 18.09.2013 | Autor
37
Herunterladen