Johannes Ahrends CarajanDB GmbH. www.carajandb.com 2013 CarajanDB GmbH



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

Johannes Ahrends Geschäftsführer CarajanDB GmbH

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

Informatik 12 Datenbanken SQL-Einführung

MIN oder MAX Bildung per B*Tree Index Hint

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

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

Oracle 9i Einführung Performance Tuning

SAP Memory Tuning. Erfahrungsbericht Fritz Egger GmbH & Co OG. Datenbanken sind unsere Welt

Performance in der Oracle Datenbank von Anfang an

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

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

Die bisher bereits bekannten Aggregatsfunktionen MIN, MAX, SUM, AVG, COUNT, VARIANCE und STDDEV wurden um FIRST und LAST erweitert.

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

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

Fragen zur GridVis MSSQL-Server

Stapelverarbeitung Teil 1

Ein Ausflug zu ACCESS

INSTALLATIONSANLEITUNG der Version 2.1 (Jänner 2014)

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

SQL Optimizer und SQL Performance

SQL structured query language

Universität Duisburg-Essen Informationssysteme Prof. Dr.-Ing. N. Fuhr. Praktikum Datenbanken / DB2 Woche 8: Trigger, SQL-PL

Labor 3 - Datenbank mit MySQL

Prozessarchitektur einer Oracle-Instanz

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

3 Richtlinienbasierte Verwaltung und Multi-Server- Administration

SQL Performance - Tips Do's & Don'ts

Performance Tools. für alle Editionen

TimeSafe Leistungserfassung

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

Options- und Freitext-Modul Update-Anleitung

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Metadaten

MSSQL Server Fragen GridVis

Dokumentation zur Anlage eines JDBC Senders

Oracle 9i Einführung Performance Tuning

Effiziente Administration Ihrer Netzwerkumgebung

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Well-Balanced. Performance Tuning

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

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

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

IV. Datenbankmanagement

SEMINAR Modifikation für die Nutzung des Community Builders

OP-LOG

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

IT-Symposium

Avira Management Console Optimierung für großes Netzwerk. Kurzanleitung

HOWTO Update von MRG1 auf MRG2 bei gleichzeitigem Update auf Magento CE 1.4 / Magento EE 1.8

PostgreSQL unter Debian Linux

Anti-Botnet-Beratungszentrum. Windows XP in fünf Schritten absichern

Performance Tuning

Professionelle Seminare im Bereich MS-Office

MySQL Performance Tuning für Entwickler

Hilfe zur Urlaubsplanung und Zeiterfassung

SolarWinds Engineer s Toolset

Artikel Schnittstelle über CSV

Apache HBase. A BigTable Column Store on top of Hadoop

OPERATIONEN AUF EINER DATENBANK

Referenzielle Integrität SQL

4D Server v12 64-bit Version BETA VERSION

pro4controlling - Whitepaper [DEU] Whitepaper zur CfMD-Lösung pro4controlling Seite 1 von 9

Prozedurale Datenbank- Anwendungsprogrammierung

SOLISYON GMBH CHRISTIAN WOLF, BENJAMIN WEISSMAN. Optimierung von Abfragen in MS SQL Server DWH-Umgebungen

SQL-Injection. Seite 1 / 16

Dokumentation QuickHMI-Schnittstelle für Oracle Datenbanken

Laborübung - Task Manager (Verwalten von Prozessen) in Windows Vista

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

euro-bis Import von Bestellungen aus Buch- und Aboauskunft Stand

Firebird Database Cache Buffer

SQL (Structured Query Language) Schemata Datentypen

Das Einzelplatz-Versionsupdate unter Version Bp810

Das neue Volume-Flag S (Scannen erforderlich)

IBM Informix Tuning und Monitoring

DBS ::: SERIE 5. Join Right Semi- Join Left Semi-Join Projektion Selektion Fremdschlüssel. Kreuzprodukt

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

Installation Wawi SQL in Verbindung mit Microsoft SQL Server 2008 R2 Express with management Tools

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

C# - Einführung in die Programmiersprache Arbeiten mit ADO.NET. Leibniz Universität IT Services Anja Aue

Grundlagen der Informatik 2

Formular»Fragenkatalog BIM-Server«

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

White Paper. Konfiguration und Verwendung des Auditlogs Winter Release

Anwenderdokumentation AccountPlus GWUPSTAT.EXE

Datenbanktechnologie mit praktischen Übungen in MySQL und PHP

7. Übung - Datenbanken

Datenexport aus JS - Software

-Bundle auf Ihrem virtuellen Server installieren.

OKB Die MS SQL-Volltextsuche für organice SQL einrichten

Access Grundlagen für Anwender. Susanne Weber. 1. Ausgabe, 1. Aktualisierung, Juni 2013

ÖVSV Mitglieder-Datenbank. Benutzerhandbuch Version 1.2.1

IBM DB2 für Linux/Unix/Windows Monitoring und Tuning

Whitepaper. Produkt: combit Relationship Manager / address manager. FILESTREAM für Microsoft SQL Server aktivieren

SQL-Optimizer und Optimierung bei DB2

SMARTtill Server mit Manager

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

ORA.LogMiner. Nach Bestelleingang erhalten Sie eine Rechnung mit ausgewiesener Mehrwertsteuer und Informationen über die Zahlungsweise.

Transkript:

Johannes Ahrends CarajanDB GmbH

CarajanDB Warum ist eine Anwendung langsam? Beispiele von echten Performanceproblemen 2

Experten mit über 20 Jahren Oracle Erfahrung Firmensitz in Erftstadt bei Köln Spezialisten für Oracle Datenbank Administration Hochverfügbarkeit (RAC, Data Guard, Failsafe, etc) Einsatz der Oracle Standard Edition Oracle Migrationen (HW, Unicode, Konsolidierung, Standard Edition) Replikation (Goldengate, SharePlex, Dbvisit) Performance Tuning Schulung und Workshops (Oracle, Toad) 3

Ungünstig programmiert Verarbeitung zu aufwändig Es werden zu viele Daten gelesen Datenverarbeitung zu langsam Datenselektion zu aufwändig Änderung der Daten zu kompliziert Datenbank zu langsam Unterdimensionierte Hardware Zu viel Last Falsch konfigurierte Datenbank 4

Subjektive Ursachen Schlechtes Wetter Persönliche Probleme Neue Softwareversion Früher war alles besser Objektive Ursachen Datenmenge hat zugenommen Fehler durch Batchverarbeitung Falscher Ausführungsplan Falsche Statistiken 5

Forrester Research 6

1. Parsen der Anweisung Ermitteln, ob identische Anweisung bereits im Library Cache vorliegt Syntax und Semantik der Anweisung prüfen Evtl. Sperren von verwendeten Objekten Erstellen des Ausführungsplans und Abspeichern im Library Cache 2. Ausführen ausgewählte Zeilen ermitteln 3. Abrufen Ermitteln, ob betroffene Elemente bereits im Database Buffer Cache vorliegen ggfs. Daten aus den Datenfiles in den Database Buffer Cache laden zurückgeben der Daten an den Benutzer-Prozess 8

1. Parsen der Anweisung Ermitteln, ob identische Anweisung bereits im Library Cache vorliegt Syntax und Semantik der Anweisung prüfen Evtl. Sperren von verwendeten Objekten Erstellen des Ausführungsplans und Abspeichern im Library Cache 2. Ausführen Lesen der Daten (aus Undo-Segmenten, Database Buffer Cache oder Datenfiles) Sperren auf zu ändernde Zeilen setzen Protokollieren der Änderungen im Redolog Buffer Erstellen des "Before Image" im Undo Segment und Änderung an den Originaldaten im Database Buffer Cache vornehmen Before Images ebenfalls im Redolog Buffer protokollieren Markieren der geänderten Blöcke als "dirty" 9

Wiederverwendung von Befehlen Parsen wird eingespart Gleicher Ausführungsplan Nur bei identischen Befehlen (gleicher Hash-Value) Beispiel: Nicht wiederverwendbar (Literale): SELECT vorname, nachname FROM personen WHERE nachname = 'Meier'; Wiederverwendbar (Bindevariable): SELECT vorname, nachname FROM personen WHERE nachname = :nachname; Bindevariablen werden erst zur Laufzeit hinzugefügt 10

Über Statistiken werden die Plankosten ermittelt. Tabellen und Indizes werden überwacht ( MONITORING ) und automatisch neu analysiert, wenn sich mehr als 10% der Daten seit der letzten Analyse geändert hat. Die Statistiken sollten immer aktuell sein! Genutzt werden: Tabellenstatistiken Spaltenstatistiken Indexstatistiken Systemstatistiken (CPU, Memory, I/O) Server Parameter (init.ora) 11

Der Oracle Optimizer entscheidet aufgrund der Statistiken, auf welche Art das Statement abgearbeitet werden soll. Es wird ein Ausführungsplan erstellt. Alle beteiligten Objekte und die Reihenfolge der Abarbeitung sind dort beschrieben. Der Ausführungsplan wird ausgeführt. 12

Beinhaltet die Ausführung des Statements Unterscheidung zwischen: Ermitteln eines exemplarischen Ausführungsplans wenn ich diesen Befehl jetzt ausführen würde, was würde für ein Plan benutzt Befehl: explain Plan for Tools (Toad, SQL-Developer, Oracle Enterprise Manager) Enthält die Umgebung, unter der ich den Plan aufrufe Tatsächlicher Ausführungsplan V$SQL_PLAN V$SQL_PLAN_STATISTICS Natürlich nur für bereits ausgeführte Befehle Nur im Cache (ev. über Tools separat abgespeichert) 13

SQL> @rdbms/admin/utlxpls.sql PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- Plan hash value: 1342056138 --------------------------------------------------------------------------------------------- Id Operation Name Rows Bytes Cost (%CPU) Time --------------------------------------------------------------------------------------------- PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- 0 SELECT STATEMENT 3583 328K 386 (3) 00:00:05 * 1 HASH JOIN 3583 328K 386 (3) 00:00:05 * 2 HASH JOIN 700 56700 103 (4) 00:00:02 3 MERGE JOIN 700 37800 89 (5) 00:00:02 4 TABLE ACCESS BY INDEX ROWID STATUS 5 170 2 (0) 00:00:01 5 INDEX FULL SCAN PK_STATUS 5 1 (0) 00:00:01 * 6 SORT JOIN 700 14000 87 (5) 00:00:02 * 7 TABLE ACCESS FULL AUFTRAEGE 700 14000 86 (4) 00:00:02 8 TABLE ACCESS FULL PERSONEN 10000 263K 14 (0) 00:00:01 9 TABLE ACCESS FULL POSITIONEN 353K 4482K 281 (2) 00:00:04 --------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("a"."aufid"="po"."aufid") 2 - access("p"."persid"="a"."persid") 6 - access("s"."statusid"="a"."aufstatus") filter("s"."statusid"="a"."aufstatus") 7 - filter(to_char(internal_function("a"."aufdatum"),'dd.mm.yyyy')='10.08.2007') 25 Zeilen ausgewõhlt. 14

15

16

Diätdatenbank ( Online Abnehmen ) Neuer Kunde klagt über massive Probleme: Server mit 16 Cores fast permanent zu 100 % ausgelastet Grund: Ende Dezember wurde ein neuer Anwender in Betrieb genommen Administrator beklagt sich bei Facebook mit einigen Screenshots des Servers (!) 18

CPU Load Ende 2013 Anfang 2014 19

Remote Login mit Teamviewer Check der wesentlichen Datenbank Parameter Keine Auffälligkeiten Ermitteln der derzeitigen Statistikdaten (Statspack) Anschließend DBA zum Mittagessen geschickt Weiterer Snapshot der Statistikdaten 20

Index auf einer Tabelle fehlte 21

SQL> SELECT p.vorname, p.nachname, a.plz, a.ort FROM personen p INNER JOIN adressen a ON (p.persid = a.persid) WHERE p.nachname like 'M%' AND p.vorname = 'Karl-Gustav-Theodor'; Langsam oder schnell? 22

Schnell wenn: Wenig Datensätze (z.b. Testsystem mit 100 Sätzen) Indizierung des Vornamens Langsam wenn: Viele Datensätze (Produktion!!!) Indizierung des Nachnamens und Vornamens (Zusammengesetzter Index) 23

Neue Anwendung für Krankheitsgruppen Anwender bemängeln lange Laufzeiten für Anpassung der Daten Auffällig: SQL> DELETE FROM partner WHERE id=:id; Persid ist Primärschlüssel! Langsam oder schnell? 24

25

Warum werden so viele Datensätze gelesen? Tabelle partner hat abhängige Datensätze (Master Detail) Kein Index auf den Foreign Key: Table Lock auf die Detail Tabelle, wenn Update auf Primary Key der Master Tabelle Updates auf den Primary Key sind selten Index auf Foreign Key nicht erforderlich Aber: DELETE FROM Master Tabelle FULL TABLE SCAN auf die Detail Tabelle 26

Abfragen der Versichertendaten langsam Index oder nicht? SQL> CREATE INDEX idx_name ON personen (vorname, nachname); 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 27

28

29

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. 30

Versuch einer Analyse: PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------------- Plan hash value: 1826680655 ------------------------------------------------------------------------------- Id Operation Name Rows Bytes Cost (%CPU) Time ------------------------------------------------------------------------------- 0 SELECT STATEMENT 1 25 275 (2) 00:00:04 1 SORT ORDER BY 1 25 275 (2) 00:00:04 * 2 TABLE ACCESS FULL PERSONEN 1 25 274 (1) 00:00:04 ------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - filter("pe"."nachname" LIKE 'wei_' AND NLSSORT("PE"."VORNAME",'nls_sort=''BINARY_CI''') =HEXTORAW('6D617274696E00') ) 31

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 32

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')); 33

Einsatz in der Schweiz Ende 2012 Anwendung überwacht Mobilfunksender Bei 3000 überwachten Servern ca. 15 Minuten pro Report Bei 9000 überwachten Servern Abbruch des Reports nach 60 Minuten bzw. 80 Minuten Laufzeit Datenbankgröße ca. 20 GByte (5,6 GB Tabellen; 6,5 GB Indizes) 34

Statspack Report SQL ordered by Elapsed Time DB/Inst: NCDBP/NCDBP Snaps: 19907-19909 Elapsed Elapsed Time Time (s) Executions per Exec (s) %Total %CPU %IO SQL Id ---------------- -------------- ------------- ------ ------ ------ ------------- 3,011.8 1 3,011.85 61.5 98.8 1.1 bx7m7493x4fbu Module: perl.exe SELECT COUNT(DISTINCT h.guid) as host_count, COUNT(DISTINCT fav.app_id) as app_c ount, COUNT(DISTINCT fav.vuln_id) as vuln_count FROM host h INNER JOIN (SELECT h s.guid, NVL(ROUND(AVG(CASE WHEN hs.host_score = 0 THEN NULL ELSE hs.host_score E ND), 0), 0) as host_score, MAX(hs.audit_id) as audit_id, hs.vne_id, hs.host_guid Elapsed Time: 3.011,8(s) = ca. 50 Minuten 35

Abfrage: SELECT COUNT(DISTINCT ) call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 13.87 13.88 0 5 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 1 2962.56 2997.92 29645 966964990 0 1 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 3 2976.44 3011.81 29645 966964995 0 1 disk: 29645 = 232 Mbyte query: 966964995 = 7.399 Gbyte = ca. 7.4 Terabyte (für eine 20 GB große Datenbank) 36

Anwendung ursprünglich für SQL-Server geschrieben Daraus folgt: SQL-Server standardmäßig Index-Organized-Tabellen Oracle standardmäßig Heap Tabellen Kein Index auf die abgefragte Spalte 37

Nicht zu komplexe Tabellenstrukturen (zu viele Spalten) Möglichst wenig Änderung in der Tabellenstruktur (ALTER TABLE ADD/DROP COLUMN) Möglichst immer Primary Key Foreign Keys benennen und indizieren 38

Analysieren der SQL-Befehle Wird ein Index benutzt Gibt es die Möglichkeit für zusammengesetzte Indizes Was ist mit abhängigen Spalten (z.b. Postleitzahl, Ort) Anwender bei Abfragen leiten, um bestimmte, indizierte Spalten zu benutzen Vermeiden von Full-Table-Scans Bewusste Verwendung von Variablen und Literalen Literale bei Spalten mit wenigen Ausprägungen (z.b. Auftragsstatus) Variablen bei üblichen Spalten (z.b. Vorname, Artikel, ) 39

Regelmäßige Health-Checks Gibt es Tabellen ohne Index Wie gut ist der Cache ausgelastet Erstellung von Baselines für kritische SQL-Befehle Festlegen des Ausführungsplans Backups zu lastarmen Zeiten planen Möglich konstante Konfiguration keine dynamisch veränderbaren Parameter, z.b. sga_target, memory_target Permanente Performanceüberwachung 40

Eine optimale Konfiguration kann nur gelingen, wenn Architekten, Entwickler und Administratoren zusammenarbeiten Fingerpointing führt zu nichts! 41

johannes.ahrends@carajandb.com www.carajandb.com www.carajandb.com/blogs