POSTGRESQL: Migration Oracle / Postgres
Oracle und Postgres sind sich in so mancher Hinsicht recht ähnlich. Darum sieht man jetzt auch viele Projekte, in denen von Oracle zu Postgres migriert wird. Für viele Anwendungen ist Postgres mehr als ausreichend. Nun... Entsprechend vorbereitet, klappt das auch recht gut, wenn einem nicht ein bestimmtes Datentypen/Index-Problem um die Ohren fliegt und das beim Lasttest dann auch nicht auffällt, weil man genau die URL zufälligerweise nicht getestet hat ;-)
Das sieht dann z.B. so aus:
test=> EXPLAIN SELECT * FROM tab1 JOIN tab2 ON tab2.rel2objects=tab1.relation_id WHERE tab2.oid=7929;
QUERY PLAN
Hash Join (cost=4.11..42522.51 rows=64 width=573)
Hash Cond: (("outer".relation_id)::text = ("inner".object_assign)::text)
-> Seq Scan on tab3 (cost=0.00..34034.29 rows=1131129 width=77)
-> Hash (cost=4.11..4.11 rows=1 width=496)
-> Index Scan using idx_tab2 on tab2 (cost=0.00..4.11 rows=1 width=496)
Index Cond: (oid = 7929)
(6 rows)
Der Hash Join (was mehr oder weniger ein Full Table Scan ist) zeigt es schon: Die Datenbank erwartet Kosten zwischen 4.11 und 42522.51 und beim Seq. Scan sehen wir das über 1,1 Mio. Datensätze durchgegrast werden. Für eine Webapplikation nicht so ganz gut. Und warum ist das so? Wir haben doch entsprechende Indizies, aber die DB nimmt sie nicht her! Hmmm... Bei Oracle war der Execution Plan einwandfrei. Bauen wir die Query mal wie folgt um:
test=> EXPLAIN SELECT * FROM tab1 JOIN tab2 ON tab2.rel2objects::integer=rel_o.relation_id WHERE tab2.oid=7929;
QUERY PLAN
Nested Loop (cost=0.00..13.53 rows=18 width=573)
-> Index Scan using idx_tab2 on tab2 (cost=0.00..4.11 rows=1 width=496)
Index Cond: (oid = 7929)
-> Index Scan using idx_tab1 on tab1 (cost=0.00..9.15 rows=18 width=77)
Index Cond: (("outer".object_assign)::integer = tab3.relation_id)
(5 rows)
Alles was ich geändert habe, ist der Integer-Cast (... tab2.rel2objects::integer=...). Der Witz an der Sache ist, das rel2objects vom Datentyp Varchar ist und relation_id ist ein Integer. Damit werden für Postgres die Indizies wertlos. Ein expliziter Cast tut Not. Und wie man sieht, ist der Ausführungsplan nun schon erheblich besser. Oracle hat die gleiche Query hingegen ganz anders behandelt. Das Casten war hier kein Thema. Die Oracle bekommt allerdings die totale Krise, wenn die Optimizer Statistiken nicht stimmen. Das stört die Postgres nicht so stark. Allerdings wird diese wiederum sauer, wenn die Datentypen beim Join nicht exakt stimmen. Auch int, int4 und int8 sind für die Postgres nicht gleich und würde auch hier eventl. vorhandene Indizies nicht verwenden. Es hilft also nur, den Ausführungsplan zu checken, um sich vor bösen Überraschungen bei der Migration einigermaßen zu schützen.
Posted at 12:00vorm. Mai 30, 2006 by cetixx in Tipps | Kommentare [0]
Today's Links
Planung eines Newton Reflektors auf Dobson Montierung
hackers playground... windows
Posted at 12:00vorm. Mai 30, 2006 by cetixx in Links | Kommentare [2]
Today's Links
Rebol Programming For The Absolute Beginner
LAMEOnJ - The Open Source LAME symmetric Java MP3 encoder API
Google:maps - JSP Taglibrary für GoogleMaps
JavaOne 2006 in 444 Photos
Eight places to find music
Bilder in Photoshop schnell begradigen
SVNDuplicate - Wer ein SVN Repository schnell duplizieren möchte, dem hilft dieses Programm weiter.
Photovault Image Organizer - Open Source Programm zu verwalten von Photos.
Posted at 11:00nachm. Mai 27, 2006 by cetixx in Links | Kommentare [0]
Today's Links
SwingSet - An open source Java toolkit containing data-aware replacements for many of the standard Java Swing components.
Posted at 11:00nachm. Mai 19, 2006 by cetixx in Links | Kommentare [0]
JavaOne 2006: Java zum Entwicklen von AJAX Anwendungen?
Die Lösung heißt: Google Web Toolkit oder GWT. Vorgestellt auf der diesjährigen JavaOne Konferenz. Die Demos sehen ziemlich gut aus. Und das Beste: Auch der Back-Button funktioniert damit, was bei AJAX Anwendungen ja nicht zwangsweise funktioniert. Java Entwickler mit AJAX Ambitionen sollten sich das Toolkit mal anguggen. Mehr dazu auch hier.
Posted at 10:00nachm. Mai 19, 2006 by cetixx in News | Kommentare [0]
Today's Links
Sprajax - Ein Open Source Security Scanner für AJAX Anwendungen
Favicon von einem Bild erzeugen
Flood Maps - Was passiert, wenn der Meeresspiegel um 7m ansteigt? Hier kann man's mit Hilfe von Google Maps anguggen.
Installing packages across multiple hosts with CFEngine
Google: Finden statt Suchen
Whiliam Shatner präsentiert den Commodore VC20 Video
Directory Synchronize - Ein nettes Java Utility das Verzeichnisse abgleicht.
Mehrere Internet Explorer-Versionen ohne Installation
Add-Links für Web 2.0 Dienste - Wer Social Bookmarking Links auf seiner Homepage unterstützen möchte, sollte diese Seite mal besuchen.
Linux Tips: take control of your bash_history
Aerith - Dieses Java Swing Mashup kombiniert drei Webservices: Google Maps, Flickr und Yahoo's geocoding webservice. Ziemlich coole Anwendung. Hoffe, der Source Code kommt bald raus.
Posted at 12:00vorm. Mai 19, 2006 by cetixx in Links | Kommentare [0]
Außerirdische ;-)
"Eines will ich Ihnen mal sagen: Mit Außerirdischen, die nicht weitergekommen sind als Microsoft und Apple, will ich persönlich nix zu tun haben."
Prof. Harald Lesch in der Sendung Alpha Centauri "Was gibt es Neues über Außerirdische?" und den Film Independence Day.
Posted at 11:00nachm. Mai 18, 2006 by cetixx in General | Kommentare [0]
The 46 Best-ever Freeware Utilities...
Der Autor hat die Liste auf den neuesten Stand gebracht.
Posted at 10:00nachm. Mai 18, 2006 by cetixx in News | Kommentare [0]
Neues Sonnensystem
Astronomen haben ein neues Sonnensystem entdeckt. Eventl. ist ein Planet mit Wasser dabei.
Posted at 10:00nachm. Mai 18, 2006 by cetixx in News | Kommentare [0]
Plantronics VoIP Telefon
Von Plantronics gibt es jetzt einen Headset für VoIP Telefonie, der sowohl mit Computern als auch mit Mobiltelefonen über Bluethooth arbeitet.
Posted at 09:00nachm. Mai 18, 2006 by cetixx in General | Kommentare [0]
JavaOne 2006: Sun ändert die Lizenz
Sun hat die Java Distributionslizenz geändert. Damit können nun Linux Distributionen wie Debian oder Ubuntu das Sun Java SDK direkt einbinden. Mehr dazu auf der jdk-distros Seite auf java.net.
Posted at 11:00vorm. Mai 17, 2006 by cetixx in News | Kommentare [0]
JavaOne 2006
Das Event des Jahres für Java Entwickler hat begonnen. Auf der JavaOne Webseite gibts wie jedes Jahr wieder einige interessante Webcasts.
Posted at 11:00vorm. Mai 17, 2006 by cetixx in News | Kommentare [0]
Today's Links
Ajax RSS reader - Mit Hilfe von Ajax einen RSS Reader basteln.
Html Validator Firefox Extension - Damit läßt sich HTML-Code ganz easy aus dem Browser heraus prüfen.
Firefox 1.5 CCK (Client Customization Kit) Wizard - Wer Firefox seinen Bedürfnissen anpassen möchte...
Ophcrack
2 - The fastest Windows password cracker
jMaki
- Ein freies JavaScript-Wrapper-Framework. Damit lassen sich
JavaScript-Widgets in einen JSP- oder JSF-Tag packen, um so
JavaScript-Komponenten wie Teile der Java-Programmiersprache
behandeln zu können.
Prevent
Caching of Javascript Files
Sun Developer Network - AJAX Developer Resource Center
Sun Developer Network - JavaScript Technology und Java
How to launch external applications from java - Arbeiten mit der ProcessBuilder Klasse
Howto setup an OpenLDAP PGP keyserver
Posted at 12:00vorm. Mai 17, 2006 by cetixx in Links | Kommentare [0]
Today's Links
DVD-Audio Tools - Wer seine eigene Audio-DVD unter Linux erstellen möchte, findet hier vielleicht das Richtige.
Xapian is designed to be a highly adaptable toolkit to allow developers to easily add advanced indexing and search facilities to their own applications.
Posted at 01:30vorm. Mai 09, 2006 by cetixx in Links | Kommentare [0]
IM1.TV
Ein neuer Musiksender startet über Sat Ende Mail. Mehr Infos auf der Webseite von IM1.TV
.
Posted at 01:00vorm. Mai 09, 2006 by cetixx in Arts | Kommentare [0]