Johannes Ahrends Geschäftsführer CarajanDB GmbH

Ähnliche Dokumente
Johannes Ahrends Geschäftsführer CarajanDB CarajanDB GmbH

Johannes Ahrends Geschäftsführer CarajanDB GmbH CarajanDB GmbH

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Warum wird mein Index nicht benutzt?

Neue Features Oracle Database 12.2 Wann denn endlich?

Oracle 9i Einführung Performance Tuning

Datenbank Tuning. Patrick Schwanke

Performance für Oracle Anwendungen nicht nur für Oracle 11g

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Optimizer Statistiken und Adaptive Features in 12.2

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Linguistische Sorts und Vergleiche oder 'a'='ä' ist TRUE. DOAG 2015 Datenbank Dierk Lenz

Editions - Upgrade im laufenden Betrieb

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

Oracle Database 12c Was Sie immer schon über Indexe wissen wollten

10 Gründe warum Ihr Index nicht verwendet wird

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

Johannes Ahrends CarajanDB GmbH

Johannes Ahrends Geschäftsführer CarajanDB GmbH CarajanDB GmbH

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

TOAD und Performance Tuning

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

Kurs Oracle 9 i Einführung Performance Tuning Teil 5 Buffer Cache

Oracle 10g Einführung

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Statistiken unter Oracle9i Voraussetzung für effiziente SQL-Statements

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

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

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

Initialisierungsparameter wieso, weshalb, warum?

Tipps und Tricks in der Datenbankadministration

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

Memory-Drilldown von der SGA über die PGA zum Database Buffer Advisor

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

Quo vadis, DBA? Johannes Ahrends & Markus Flechtner

Partitionierung Indizes und Statistiken

Oracle Statistiken Ein Mythos in der Datenbank?

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

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

Performance Tuning mit Oracle 12c

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Unsichere Bindevariablen. Wilhelm Breßer Berater Dezember 2008

SQL Result Cache in Oracle 11g

Tuning im Wandel der Zeiten Johannes Ahrends Manager Presales Consulting Quest Software GmbH

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

<Insert Picture Here> Mehr Ergebnisse: Linguistische und Ähnlichkeitssuche mit SQL Carsten Czarski ORACLE Deutschland B.V. & Co KG

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

Üben von DDL und DML. Ergebnis:

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

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

3.3. Implementierung in SQL DDL-Grundlagen Constraint-Verzögerung Implementierungs-Strategien

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

Übersicht der wichtigsten MySQL-Befehle

Online Table Shrink. Freigabe von ungenutztem Speicherplatz. Autor: Ralf Durben, ORACLE Deutschland GmbH

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Neuerungen in Marco Patzwahl MuniQSoft GmbH Unterhaching

Erzeugung und Veränderung von Tabellen

Best Practice - ODBC

Foglight Performance Analysis for Oracle

Im Folgenden möchten wir Ihnen einige Beispiele aufzeigen, wie ALTER TABLE gemäß SQL92 verwendet wird:

Datenbank und Tabelle mit SQL erstellen

Grundlagen der Datenbanksysteme 2 (M-DB2) Dr. Karsten Tolle

DOAG Index Tuning

Einfache Administration von Oracle Datenbanken mit der neuen Toad 10 DBA Suite

Erhöhung der Manageability durch SQL-Profile

Inhalt. Dr. Frank Haney 1

Praktische SQL-Befehle

Materialized Views Praktischer Einsatz vor und in 12c

MIN oder MAX Bildung per B*Tree Index Hint

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Oracle 9i Einführung Performance Tuning

Performance Tuning


XML in Oracle 12c. Wolfgang Nast

Bibliografische Informationen digitalisiert durch

DB-Datenbanksysteme. DB SQL-DML 1 Mario Neugebauer

Statistikberechnung in großen Datenbanken mit regelmäßigen Ladevorgängen

Eine Einführung in MySQL

Urs Meier Art der Info Technical Info (Februar 2002) Aus unserer Projekterfahrung und Forschung

Willkommen zum DOAG Regionaltreffen

<Insert Picture Here> Verschlüsselung in der Datenbank

einfach. gut. beraten. Stabilisierung von Ausführungsplänen Baselines DOAG Konferenz + Ausstellung 2017 Nürnberg Klaus Reimers

Relationales Datenbanksystem Oracle

Johannes Ahrends Geschäftsführer CarajanDB GmbH CarajanDB GmbH

Johannes Ahrends CarajanDB GmbH CarajanDB GmbH

Oracle-Statistiken im Data Warehouse effizient nutzen

SQL,Teil 2: SELECT. W. Spiegel. Übersicht SELECT. Mehrfache Werte vermeiden: SELECT DISTINCT. Ausgabe ordnen: ORDER BY. Projektion.

Oracle Developer Monthly Datenbank-Update für Anwendungsentwickler

Oracle 9i Einführung. Performance Tuning. Kurs. Teil 8 Indizes. Universität Hannover. Installation. Index-Typen. Anhang.

Datenbanken und Oracle, Teil 2

Inhaltsverzeichnis. Einleitung

Übung PL/SQL Trigger Lösungen

Nützliche Oracle 12c Features für Data Warehousing DOAG BI, 8. Juni 2016 Dani Schnider, Trivadis AG

5.8 Bibliotheken für PostgreSQL

Tabellen und Indizes Reorganisieren, aber wann?

Transkript:

Johannes Ahrends Geschäftsführer CarajanDB GmbH

Vorstellung CarajanDB Ein Beispiel aus der Praxis und wer ist schuld? Index oder nicht Index das ist doch keine Frage, oder? Was kann der DBA tun? Was kann der Entwickler tun? 2

Experten mit über 30 Jahren Oracle Erfahrung Spezialisten für Backup & Recovery Hochverfügbarkeit Healthchecks Performance Optimierung Einsatz von Oracle Standard Edition Oracle in virtuellen Umgebungen und in der Cloud Oracle Migrationen (HW, Unicode, Konsolidierung, Standard Edition) Monitoring (Grid / Cloud Control, HLMM, Foglight, Spotlight) Schulung und Workshops (Oracle, Toad) 3

4

Forrester Research: Root of Database Performance Impact 90% Tuningpotential durch Optimierung einzelner Befehle 10% durch Anpassung der Hardware, OS und Datenbank! 30 % 60 % 6

7 Was fällt auf?

jawin11. db_cache_size=536870912 jawin11. java_pool_size=50331648 jawin11. large_pool_size=16777216 jawin11. pga_aggregate_target=1728053248 jawin11. sga_target=2566914048 jawin11. shared_io_pool_size=0 jawin11. shared_pool_size=1929379840 jawin11. streams_pool_size=0 *.memory_target=4g 8

Mindestens setzen: db_cache_size shared_pool_size Shared Pool kann im laufendenden Betrieb kaum freigegeben werden ALTER SYSTEM FLUSH SHARED_POOL 9

10

Ist dieser Index sinnvoll? CREATE INDEX idx_name ON personen (anrede, vorname, nachname); Abfrage 1: SELECT anrede, vorname, nachname FROM tuk.personen pe WHERE pe.nachname LIKE 'Wei_' AND pe.vorname = 'Martin' AND pe.anrede = 'Herr'; 1_select_index.sql 11

12

Abfrage 2: SELECT anrede, vorname, nachname FROM tuk.personen pe WHERE pe.nachname LIKE 'Wei_' AND pe.vorname = 'Martin' -- AND pe.anrede = 'Herr'; 13

14

SQL> SELECT anrede, vorname, nachname 2 FROM tuk.personen pe 3 WHERE pe.nachname LIKE 'wei_' 4 AND pe.vorname LIKE 'Martin'; ANRED VORNAME NACHNAME ----- -------------------- -------------------- Herr Martin Weiß Herr Martin Weis Herr Martin Weiz 3 Zeilen ausgewählt. 2_abfrage_ls.bat 15

16 Warum Full-Table-Scan?

17

Versuch einer Analyse: SQL> SELECT anrede, vorname, nachname 2 FROM tuk.personen pe 3 WHERE pe.nachname LIKE 'wei_' 4 AND pe.vorname LIKE 'Martin'; ANRED VORNAME NACHNAME ----- -------------------- -------------------- Herr Martin Weiß Herr Martin Weis Herr Martin Weiz 3 Zeilen ausgewählt. 18

19 ALTER SESSION SET nls_sort=binary_ci; Sortierung ist unabhängig von Groß- / Kleinschreibung aber abhängig von Akzenten Alternativen: binary_ai Case und Akzent insensitiv german_ai Deutsche Sortierung, Case und Akzent insensitiv ALTER SESSION SET nls_comp=linguistic; Filter verwenden die gleiche Funktion wie NLS_SORT, d.h. in diesem Fall ist die WHERE-Clausel unabhängig von Groß- / Kleinschreibung und von Akzenten Alternativen: BINARY oder ANSI

Entweder Linguistische Suche ausschalten oder Index auf Linguistische Suche CREATE INDEX idx_name2 ON personen (NLSSORT (vorname, 'nls_sort=binary_ci'), NLSSORT (nachname, 'nls_sort=binary_ci')); Aber jetzt sind z.b. keine Bitmapped Indizes auf den Spalten möglich 2c_nls_index.sql 20

Initialisierungsparameter: Cursor_sharing = FORCE SIMILAR)* EXACT Wandelt Literale in Bindevariablen um SELECT FROM personen p, auftraege a WHERE p.persid = a.persid AND p.vorname = 'Horst' AND p.nachname = 'Ortmann' AND a.aufstatus = 'G'; SELECT FROM personen p, auftraege a WHERE p.persid = a.persid AND p.vorname = :"SYS_B_0" AND p.nachname = :"SYS_B_1" AND a.aufstatus = :"SYS_B_2" 21 )* Nicht verwenden! Zu fehleranfällig

Was passiert, wenn ein Wert nicht gleich verteilt ist? Z.B. AUFTRAGSSTATUS Geliefert hoffentlich über 90% Storniert hoffentlich nur 1 2 % SELECT FROM personen p, auftraege a WHERE p.persid = a.persid AND a.aufstatus = 'G'; Wenn l_aufstatus = G ist, dann besser Full-Tables Scan Wenn l_aufstatus = S ist, dann besser Index Range Scan 22

Aber was ist mit Bindevariablen? SELECT FROM personen p, auftraege a WHERE p.persid = a.persid AND a.aufstatus = :l_aufstatus; Optimizer analysiert die Abfrage und erstellt u.u. einen anderen Ausführungsplan Beispiel von Christian Antognini, Autor des Buches Troubleshooting Oracle Performance) http://www.antognini.ch/publications 3_chris_bind1.bat 23

SELECT anrede, vorname, nachname, geburtstag FROM tuk.personen pe WHERE pe.nachname like 'Weisse%' and pe.anrede = 'Herr'; 4_abfrage_mb1.bat 4_abfrage_mb8.bat 24

25

26

db_file_multiblock_read_count Anzahl Blöcke die mit einem I/O beim table oder index scan gelesen werden Default 128 (ev. 64) Je höher der Wert umso wahrscheinlicher ein Full-Table-Scan optimizer_index_cost_adj Verhältnis zwischen Full-Table-Scan und Index Benutzung Default 100 Je geringer der Wert umso wahrscheinlicher ein Index Zugriff Schlecht bei hohen Clustering Faktoren! 27

SELECT p.persid, p.vorname, p.nachname, m.email FROM personen p, mail m WHERE p.persid = m.persid AND p.persid = :l_persid; Beide Tabellen persid als Primary Key! 5_select_mail.sql (TUK3) 28

29

CREATE TABLE MAIL ( PERSID VARCHAR2(10 BYTE), EMAIL VARCHAR2(50 BYTE), BEMERKUNG VARCHAR2(200 BYTE) ) TABLESPACE USERS; 30

SELECT DISTINCT anrede, vorname, nachname, geburtstag FROM tuk.kunden WHERE nachname LIKE 'Wei_' AND vorname = 'Martin' AND anrede = 'Herr'; 6_personen.sql 6_kunden.sql 31

32

33

34 SELECT DISTINCT anrede, vorname, nachname, geburtstag FROM tuk.kunden WHERE nachname LIKE 'Wei_' AND vorname = 'Martin' AND anrede = 'Herr';

Views sind gut um komplexe Befehle zu verstecken Kaskadierende Views sollten vermieden werden 35

Abhängige Spalten SELECT pe.anrede, pe.vorname, pe.nachname, ad.plz, ad.ort, ad.strasse FROM adressen ad, personen pe WHERE pe.persid = ad.persid AND pe.nachname = :nachname AND ad.plz = :plz AND ad.ort = :ort; 7_extended_stat1.sql (TUK3) 36

37

38

Erstellen von erweiterten Statistiken SELECT dbms_stats.create_extended_stats ( OWNNAME => 'TUK3', TABNAME => 'ADRESSEN', EXTENSION => '(PLZ,ORT)') FROM DUAL; BEGIN dbms_stats.gather_table_stats ( OWNNAME => 'TUK3', TABNAME => 'ADRESSEN',ESTIMATE_PERCENT => 100,METHOD_OPT => 'FOR ALL COLUMNS SIZE SKEWONLY',DEGREE => NULL,CASCADE => TRUE,NO_INVALIDATE => FALSE); END; 39

Löschen von erweiterten Statistiken BEGIN dbms_stats.drop_extended_stats( OWNNAME => 'TUK2', TABNAME => 'ADRESSEN', EXTENSION => '(PLZ,ORT)'); END; 40

41 Automatic Memory Management Fluch und Segen Mindestgrößen definieren! Serverparameter: cursor_sharing immer wieder gern genommen aber besser, der Entwickler benutzt Bindevariablen Bind Peeking beachten db_file_multiblock_read_count kleiner Wert optimizer_index_cost_adj nur Ausnahmsweise verändern Besser: Systemstatistiken regelmäßig aktualisieren Statistiken Histogramme auf kritische Spalten Ev. Extended Statistiken für abhängige Spalten

Benutzung von Bindevariablen Dadurch kein cursor_sharing = FORCE notwendig Literale verwenden, wo es sinnvoll ist Änderungen an der Umgebung protokollieren und dem DBA mitteilen Z.B. NLS_SORT bzw. NLS_COMP Verwendung von Funktionen vermeiden Besser BETWEEN als TO_CHAR bei Datumssuche Nicht zu viel verstecken spielen Keine View auf View auf View Datentypen beachten Keine unterschiedlichen Datentypen mit gleichem Namen 42

43 20. bis 22. November: DOAG Konferenz in Nürnberg

Johannes Ahrends www.carajandb.com Johannes.ahrends@carajandb.com