Migration von Oracle zu PostgreSQL

Ähnliche Dokumente
Explain verstehen. Hans-Jürgen Schönig.

Performance Probleme aufspüren

Tuning von PostGIS mit Read- Only-Daten von OpenStreetMap

PostgreSQL auf vielen CPUs. Hans-Jürgen Schönig Hans-Jürgen Schönig

MySQL Performance Tuning für Entwickler

Indexing und Performance Tuning

ANFRAGEOPTIMIERUNG IN POSTGRESQL

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

Cassandra Query Language (CQL)

Grundlagen der PostgreSQL Administration

PostgreSQL in großen Installationen

PostgreSQL im Cluster. Hans-Jürgen Schönig Hans-Jürgen Schönig

SODA. Die Datenbank als Document Store. Rainer Willems. Master Principal Sales Consultant Oracle Deutschland B.V. & Co. KG

MySQL Cluster und MySQL Proxy

Die PostgreSQL Performance Schnelldiagnose

i2b2 Wizard Installation

PostgreSQL Ein Überblick

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

Oracle 9i Einführung Performance Tuning

QMF Tabelle Q.OBJECT_DATA in DB2

Tuning the Mobile Server

RavenDB, schnell und skalierbar

Introduction to Data and Knowledge Engineering. 6. Übung SQL

NoSQL mit Postgres 15. Juni 2015

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

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

Installation MySQL Replikationsserver

MySQL Queries on "Nmap Results"

Hibernate Das Praxisbuch für Entwickler

Markus Feichtinger. Power Systems. Der Weg zu POWER! 2009 IBM Corporation

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

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

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

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

Oracle ACFS / CloudFS zuverlässig nutzbar?

MySQL Replikation. Erkan Yanar linsenraum.de linsenraum.de

Projektbericht Gruppe 12. Datenbanksysteme WS 05/ 06. Gruppe 12. Martin Tintel Tatjana Triebl. Seite 1 von 11

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

Automatisierte Datenmigration mit dynamischen SQL

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

NoSQL mit PostgreSQL Swiss Postgres Conference Juni Hannu Krosing Harald Armin Massa

Chancen und Wachstumsfelder für PostgreSQL

Eine Reise durch den PostgreSQL Optimizer

Kopplung von Datenbanken

SQL Optimizer und SQL Performance

MySQL Administration. Seminarunterlage. Version 3.02 vom

SQL structured query language

Performante Verarbeitung großer Datenbanken am praktischem Beispiel

Datenbank-Refactoring mit LiquiBase

Inhaltsverzeichnis. Vorwort... 11

MySQL 101 Wie man einen MySQL-Server am besten absichert

Intern: Ceph Kurzeinführung in die verteile Storage-Lösung

Ablösung von Oracle-Datenbanken mit PostgreSQL oder MariaDB. Präsentation 23. Juni 2016

Oracle & Java HOW TO

2.3 - Das Verwaltungsmodul moveon installieren - SQL-Version

MySQL 5.1. Kristian Köhntopp

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

REGIONALES RECHENZENTRUM ERLANGEN [ RRZE ] Datenbanken. RRZE-Campustreffen, Silvana Reinert und Ali Güclü Ercin, RRZE

Martin Wunderli

PostgreSQL Wartungsstrategien

Oracle 9i Einführung Performance Tuning

Tag 7 Inhaltsverzeichnis

MySQL Performance Tuning für Entwickler

Steffen Hofmann Freie Universität Berlin ZEDAT Identity and Customer Management (ICM) Aktueller Stand Shibboleth IdP3

Migration von Exchange OnPremise zu O365: Warum lohnt sich das?

Installation von 3M KODIP-SF mit Fallerfassung Version Dezember 2016

Backup und PiTR mit MySQL

Harald Armin Massa. Hochverfügbarkeit mit PostgreSQL - ein Überblick. Swiss PG Day Rapperswil

DOAG 2013 HOCHVERFÜGBARKEIT EINER SINGLE-INSTANZ (AKTIV/PASSIV-FAILOVER) OHNE RAC

Grundlagen der PostgreSQL Administration. Timo Pagel

IP-Adressen Hyper-V Cluster

SchildNRW mit Anbindung an eine MySQL-Datenbank Stand Februar 2017 (Martin Roß)

Ora Education GmbH. Lehrgang: Oracle Application Server 10g R3: Administration

Performance-Prognosen im Test, trotz Datenschutzauflagen. Daniel Stein. DOAG November 2016

ER-Modelling mit ZMS: Das ZMS SQL DB-Objekt

Visualisierung in Informatik und Naturwissenschaften

PostgreSQL im praktischen Einsatz. Stefan Schumacher

Ora Education GmbH. Lehrgang: Oracle Application Server 10g R2: Administration II

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

Oracle Datenbanken Clonen. aber richtig. Wir kümmern uns!

MySQL High Availability. DOAG 2013 Datenbank. 14. Mai 2013, Düsseldorf. Oli Sennhauser

Problembehebung LiveUpdate

Willkommen. Datenbanken und Anbindung

FME Desktop. Data in Motion

APEX (Hoch) Verfügbar? Ernst Leber

Installationsanleitung für Haufe Advolux Kanzleisoftware ab Version 2.5 (Windows)

Kapitel 14. Objekt-relationales Mapping (ORM) mit Hibernate bzw. Java Persistance API (JPA) Prof. Dr. Wolfgang Weber Vorlesung Datenbanken

Skalierbare Webanwendungen

M5000 einfach ablösen durch T4/T5 LDoms und Solaris Zonen

Systemvoraussetzungen

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

samrestore - restore your SAM-FS files

Transkript:

Migration von Oracle zu PostgreSQL aus Sicht eines PostgreSQL-DBA Alvar C.H. Freude: Oracle zu PostgreSQL-Migration aus Sicht eines Postgres-DBA pgconf.de, 27. November 2015

Das Projekt ELSTER, beim Bayerischen Landesamt für Steuern Elektronische Steuererklärung Im Prinzip: der elektronische Briefkasten der Finanzämter Datenbanken bisher: Oracle; Umstellung auf PostgreSQL 2014/2015 Aufgaben: Planung, Installation, Konfiguration und Betrieb der DB-Infrastruktur Beratung der Entwickler, Durchführung der Migration

PostgreSQL-Setup Mehrere Umgebungen, laut Planung bestehend aus: PostgreSQL Master und mehrere Slaves via Streaming Replication (synchron!) pgpool-ii für Load-Balancing redundante Switches, zwei Rechenzentren, dicke Hardware Anwendungen (Java) in anderem Netz, connect via pgpool-ii bringen eigenen Pool mit

Richtige Tool-Wahl Oder: die drei besten Tipps für Tools zur Migration von Oracle nach Postgres: 1. Nehme Ora2Pg: http://ora2pg.darold.net/ 2. Schreibe kein eigenes Tool, nehme Ora2Pg 3. Nehme nicht die CLI-Version Deiner Lieblings-GUI, nehme Ora2Pg! Wirklich!

Selbstgebastelte Tools An Sicherheit grenzender Wahrscheinlichkeit immer schlechter langsamer weniger flexibel machen mehr Ärger! Ausnahmen bestätigen die Regel

Andere vorhandene Tools wie die SQL Workbench sind nicht primär zur Migration gemacht GUI, relativ schlecht Skriptbar Java auf dem DB-Server? Lieber nicht! Bloated & langsam, eingeschränkt, mögen auf den ersten Blick funktionieren, machen aber meist viel mehr Ärger

Viele Ora2Pg Features Nicht perfekt, aber oft: Migration ohne Nachbearbeitung Kann sehr viel, bei uns in keinem Fall Nachbearbeitung o.ä. nötig Inkl. (B)LOBs Hohe Performance Parallel lesen, schreiben, konfigurierbar Tipp: Wenn Oracle langsamer, in PG ausnahmsweise die Indexe VORHER anlegen

Trete die Entwickler! Bei ELSTER: verschiedene Teams entwickeln verschiedene Software Größtenteils extern => kaum Berührung mit Betrieb Aber: Betrieb sollte Migration durchführen Daher war sinnvoll: Wünsche, Vorschläge, Bitten, Vorgaben machen Java-Entwicklern Hilfe und Unterstützung bei PostgreSQL anbieten

Bitte alles am Stück! Entwickler liefern gerne 10 Skripte, nacheinander auszuführen Und am besten mit 3 verschiedenen Config-Files die in jeder neuen Version überschrieben werden. Kleinigkeiten sind wichtig: Nutze relative Pfade Fehler nicht ignorieren, sondern Skript abbrechen! Logging: Alles sauber protokollieren

Mache Lasttest! Echte Lasttests mit passenden Datenmengen In Produktion(sähnlicher Umgebung) Entwickler testen gerne nur mit ein paar Dutzend Daten ein Beispiel:

Der 3-Sekunden-Query UPDATE table1 SET Nach Migration aufgefallen: UUUPS, 150000 mal pro Tag läuft ein Query mit Dauer ~3 Sekunden. date =?, somesthing =?, some_other =?, [... lange Liste...] Total simpler Query: WHERE id =?;

WTF? Simpler Query mit WHERE auf Primary Key ist lahm?

Index ist da: PK > \d table1 Table "public.table1" Column Type Modifiers -------------------------+-----------------------------+---------------------------- id bigint not null [...] Indexes: id_pkey" PRIMARY KEY, btree (id)

Query Plan? Ist OK! > EXPLAIN (ANALYSE, BUFFERS) UPDATE table1 SET date = now() where id = 1; QUERY PLAN Update on table1 (cost=0.43..1.65 rows=1 width=635) (actual time=0.016..0.016 rows=0 loops=1) Buffers: shared hit=3 -> Index Scan using id_pkey on table1 (cost=0.43..1.65 rows=1 width=635) (actual time=0.015..0.015 rows=0 loops=1) Index Cond: (id = 1) Buffers: shared hit=3 Total runtime: 0.099 ms (6 rows)

WTF?!? Aber wir sehen in den Logs und Live: Query Lahm!

Des Rätsels Lösung ist Java final int[] parametertypes = { // date1=?, something1=?, otherk=?, date2=?, something2=?, something3=?, Types.TIMESTAMP, Types.VARCHAR, Types.DECIMAL, [...] // date2=?, date3=?, date4=?, something4=?, something5=? Types.TIMESTAMP, Types.TIMESTAMP, Types.TIMESTAMP, Types.BIGINT, Types.VARCHAR, }; // where ID=? Types.DECIMAL,

Oder in SQL: > EXPLAIN (ANALYSE, BUFFERS) UPDATE table1 SET date = now() WHERE ids = 1::NUMERIC; QUERY PLAN ---------------------------------------------------------------------------------- Update on teble1 (cost=0.00..219705.25 rows=29579 width=635) (actual time=2789.282..2789.282 rows=0 loops=1) Buffers: shared hit=261639 -> Seq Scan on table1 (cost=0.00..219705.25 rows=29579 width=635) (actual time=2789.277..2789.277 rows=0 loops=1) Filter: ((id)::numeric = 1::numeric) Rows Removed by Filter: 5902411 Buffers: shared hit=261639 Total runtime: 2789.378 ms (7 rows)

Workaround CREATE INDEX temp_performance id_numeric_idx ON table1 ( CAST(id AS NUMERIC) ); Anwendung kann nicht ohne weiteres schnell geändert und getauscht werden Also ein Workaround bis zum nächsten Release

Workaround Klappt! > EXPLAIN (ANALYSE, BUFFERS) UPDATE table1 SET date = now() WHERE puid_pk = 1::NUMERIC; QUERY PLAN ---------------------------------------------------------------------------------- Update on table1 (cost=297.55..16737.11 rows=29512 width=635) (actual time=0.051..0.051 rows=0 loops=1) Buffers: shared hit=3 -> Bitmap Heap Scan on table1 (cost=297.55..16737.11 rows=29512 width=635) (actual time=0.047..0.047 rows=0 loops=1) Recheck Cond: ((id)::numeric = 1::numeric) Buffers: shared hit=3 -> Bitmap Index Scan on temp_performance puid_pk_numeric_idx (cost=0.00..290.18 rows=29512 width=0) (actual time=0.039..0.039 rows=0 loops=1) Index Cond: ((puid_pk)::numeric = 1::numeric) Buffers: shared hit=3 Total runtime: 0.185 ms (9 rows)

Mache Performance-Tests mit Echtdaten Echtdaten oder anonymisierte Echtdaten Datenmenge Verteilung der Daten Spezielle Häufungen von Queries und Daten

Migration verifizieren! Es kann immer etwas schief gehen Also: Verifizieren, dass die Daten korrekt sind Verschiedene Möglichkeiten 1:1 Vergleich Prüfsummen über alle Daten manuelle Sichtprüfung

Viele Testdurchläufe machen Die Migration mit Echtdaten testen Laufzeit, Probleme, Wissen und Übung für den Ablauf Dann geht auch bei der endgültigen Migration nichts schief

Langsame Queries, langsame Anwendungen Viele Ursachen Oft das allgemein Übliche: schlechte Indexe; zu viele (teilweise ungenutzt), zu wenige, die falschen Gammel-Code, z.b. zu viele kleine Queries. ORM! Whuaaa! Falsches Datenmodell Schlecht verteilte Daten

Auf meinem Notebook ist s aber schneller!!! Typisch: Entwickler wundert sich: Anwendung in Test / Produktion lahm WTF!?! SQL-Full-Query-Log hilft: tausende kleine Queries: => Latenz ohne Ende über Netzwerk und mit pgpool!

Problem: pgpool und Load-Balancing Mit pgpool, Streaming Replication und Load-Balancing kann eine spätere Transaktion/Verbindung alte Daten sehen Auch bei synchroner Repliaktion Anwendung schreibt Daten; COMMIT => synchron received auf Slave Aber: nicht synchron replayed! Nächster Prozess sieht u.u. alte Daten! Automatische Tests schlagen fehl => Load Balancing deaktiviert

Fazit: insgesamt problemlos Erste Anwendungen seit über einem Jahr, kompletter ELSTER (Betrieb Bayern) seit halbem Jahr migriert: alles stabil. Insgesamt lief die Umstellung weitgehend problemlos Hohe Performance Hohe Stabilität In unserem Fall: Dicke Hardware fackelt Query-Probleme ab Hohe Lizenzkosten gespart.

Danke, noch Fragen? Alvar C.H. Freude http://alvar.a-blast.org/ http://blog.alvar-freude.de/ http://www.perl-blog.de/ @alvar_f