postgres lahmt im Vergleich zu mysql und Co.

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

postgres lahmt im Vergleich zu mysql und Co.

Beitrag von mistersixt » 12.04.2005 16:58:19

Moin moin,

ich habe ein paar Speed-Tests bei Datenbanken gemacht (alle Versionen unter Debian Sid), in den Foren liest man überall, dass postgres so schnell sei, aber das kann ich absolut nicht nachvollziehen, hier ein paar kleine Tests, wo per Textdatei Datensätze über das jeweilige Console-Tool gepumpt werden:

Code: Alles auswählen

(sqlite)
Adding 20000                             4.70 usr  9.04 sys 18.63 tot
Inserting 2000                           0.48 usr  0.81 sys  1.33 tot
Replacing 2000                           0.34 usr  0.69 sys  1.80 tot
Updating 2000                           29.43 usr 12.45 sys 44.69 tot

(sqlite (PRAGMA default_synchronous = NORMAL;))
Adding 20000                             5.23 usr  9.55 sys 432.93 tot
Inserting 2000                           0.53 usr  0.93 sys  46.43 tot
Replacing 2000                           0.38 usr  0.61 sys  33.58 tot
Updating 2000                           29.19 usr 13.40 sys  62.48 tot

(mysql)
Adding 20000                            0.26 usr 0.23 sys  3.33 tot
Inserting 2000                          0.02 usr 0.02 sys  0.43 tot
Replacing 2000                          0.03 usr 0.03 sys  0.65 tot
Updating 2000                           0.10 usr 0.04 sys 13.82 tot

(sapdb)
Adding 20000                            1.23 usr 1.68 sys 7.77 tot
Inserting 2000                          0.11 usr 0.19 sys 0.75 tot
Updating 2000 (with indices)            0.09 usr 0.31 sys 0.54 tot
Updating 2000 (without indices)         0.17 usr 0.22 sys 0.49 tot

(postgres (fsync = off))
Adding 20000                            0.65 usr 0.25 sys  9.46 tot
Inserting 2000                          0.04 usr 0.04 sys  0.73 tot
Updating 2000 (with indices)            0.09 usr 0.09 sys 26.54 tot
Updating 2000 (without indices)         0.08 usr 0.03 sys 25.54 tot

(postgres standard (fsync = true))
Adding 20000                            0.57 usr 0.33 sys 43.42 tot
Inserting 2000                          0.11 usr 0.05 sys  4.82 tot
Updating 2000 (with indices)            0.05 usr 0.02 sys 27.43 tot
Updating 2000 (without indices)         0.05 usr 0.03 sys 26.30 tot
Schlimmer als die Tests zeigten sich dann an konkreten Beispielen, wo ich einige 100 oder sogar 1000 Replaces pro Sekunde mache, der Test-PC ist beim postgres nicht mehr zu gebrauchen (hatte einen Load von 10, nachdem ich 10 parallele Verbindungen zum postmaster aufgemacht habe, selbst ein vi ging nicht mehr auf). mysql bei gleicher Aktivität und 8 Threads steckt das locker weg, auf dem PC lässt sich locker vernünftig weiterarbeiten.

Weiss Jemand ein paar Tuning-Tips für postgres oder lahmt das wirklich so sehr? Soll Version 8 viel schneller sein als 7.4.7 ? Any ideas are welcome ;) !

Grüsse, mistersixt.
--
System: Debian Bookworm, 6.5.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 4.0 Ghz., Radeon RX 5700 XT, 16 GB Ram, XFCE

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 12.04.2005 17:21:57

servus,

natürlich kommt jede datenbank mit gewissen default einstellungen der parameter usw. usw.

d.h. einmal mysql und einmal postgresql version x nehmen und dann testen ist eher wie birnen und äpfel vergleichen ....

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 12.04.2005 17:55:16

habe was ausgegraben ...
http://www.linux-magazin.de/Artikel/aus ... mysql.html

ist allerdings nichts über version 8 von postgresql ... aber ich denke so 100% objektiv sagen welche datenbank wo besser ist kann man nicht - ist meine meinung ... :wink:

metacyborg
Beiträge: 48
Registriert: 19.12.2004 18:20:01

Beitrag von metacyborg » 12.04.2005 18:43:06

ich kann aus eigener erfahrung sagen, das mysql schnell ist, aber sobald das datenmodell anspruchsvoll wird sehr viel mehr arbeit erforderlich ist und das abarbeiten der nötigen programmschritte die performance gehörig drückt. (keine views, keine subselects). kenne neben mysql noch informix und oracle aus der praxis, könnte mir aber vorstellen, das postgresql bei steigender komplexität auch besser handhabbar ist als mysql.

schwierig ist ausserdem zu sagen, wie es sich bei deinen datensätzen mit keys und indices verhält. da kann man selbst innerhalb einer datenbank schon extreme performanceunterschiede erzeugen.

mfg

m

Benutzeravatar
mistersixt
Beiträge: 6601
Registriert: 24.09.2003 14:33:25
Lizenz eigener Beiträge: GNU Free Documentation License

Beitrag von mistersixt » 13.04.2005 06:17:57

meandtheshell hat geschrieben:servus,

natürlich kommt jede datenbank mit gewissen default einstellungen der parameter usw. usw.

d.h. einmal mysql und einmal postgresql version x nehmen und dann testen ist eher wie birnen und äpfel vergleichen ....
Ich meine nicht, dass ich hier Äpfel mit Birnen vergleiche: bei den Tests mache ich die absolut einfachsten SQL-Statements, keine Subselects, kein komplexen Abfragen, nix. Und ich habe an den offensichtlichen Parametern (fsync=false bei postgres zum Beispiel) gedreht. Und trotzdem ist postgres miserabel langsam, quasi nicht zu gebrauchen. Alle Tests mit den DB-Versionen, die mit Sid kommen, Kernel-2.6.11-1-k7.

Hat keiner eine weitere Idee?

Gruss, mistersixt
--
System: Debian Bookworm, 6.5.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 4.0 Ghz., Radeon RX 5700 XT, 16 GB Ram, XFCE

kleiner
Beiträge: 28
Registriert: 16.04.2005 13:41:32

Beitrag von kleiner » 19.04.2005 19:31:11

Soweit ich pgsql und mySQL kenne ist mySQL doch eher für einfache Sachen entworfen, pgsql geht deutlich souveräner mit komplizierteren Sachen um. Ich denke auch, dass man die DB danach wählen sollte, was man machen will. Und bei der Aktion, die Du als Testkriterium genommen hast, wird mySQL wohl einfach schneller sein. Bei komplexeren Anfragen wird pgsql gewinnen und bei ganz wenigen Datensätzen, die nicht komplex sind, wird die einfache Textdatei sogar noch schneller sein. Also die DB nach den Anforderungen wählen.
Deswegen stimme ich zu, es ist Äpfel mit Birnen vergleichen.

P.S.: Ich kenne beide nicht so besonders.

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 21.04.2005 14:35:21

Kleines Beispiel: wenn du nen INSERT unter Postgres machst, dann baut der um jeden INSERT automatisch ne Transaktion, ausser du hast selbst eine aufgemacht und mehrere SQL-Befehle eingebaut. Das kostet Zeit.
Habe @work z.B. ein Skript mal geaendert, dass die kompletten INSERTs nun in einer einzigen Transaktion gekapselt sind statt einer Transaktion pro INSERT. Wenn ich mich richtig erinner, war das Programm danach ca. um Faktor 10 schneller.
Mysql kann meines Wissens keine Transaktionen, was dann natuerlich erheblich schneller geht.
MySQL is meines Wisens auch ne Datenbank, die speziell auf SELECTs optimiert ist. Leider fehlen MySQL aber viele Dinge, die oben schon angesprochen wurden.
Ach ja, man kann auch bei Postgres einige Parameter in der Konfiguration anpassen, was teils einiges mehr an Performance bringt.

metacyborg
Beiträge: 48
Registriert: 19.12.2004 18:20:01

Beitrag von metacyborg » 22.04.2005 04:40:14

nepos hat geschrieben:Mysql kann meines Wissens keine Transaktionen, was dann natuerlich erheblich schneller geht.
seit version 4.1 gibt es dan tabellentyp InnoDB, der unterstützt transaktionen. per default werden aber immer MyISAM tabellen angelegt, die keine transaktionen unterstützen. die optimierungsstrategie bei MySQL liegt, wenn ich mich an den vortrag von zak greant richtig erinnere darin, dass jede neue version von MySQL alle aktionen, die unter vorherigen versionen möglich waren auch noch mindestens genau so schnell ausführt. eine gewichtung auf bestimmte features scheint es dabei nicht zu geben.

mfg

m

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 22.04.2005 14:47:19

Ah ok, dann wuerd ich aber auch sagen, wenn du den gleichen Test auf InnoDB-Tabelle loslaesst, wird das schon ein gutes Stueck langsamer sein.
Ausserdem brauchen Tabellen im InnoDB-Format - wenn ich mich richtig erinnere - 3x soviel Plattenplatz.

Antworten