2009-07-21 14 views
13

Wir hatten eine Anwendung läuft mit MySql. Wir fanden heraus, dass MySql für unsere App nicht geeignet war, nachdem wir herausfanden, dass es einige der GIS-Funktionen von PostGIS nicht unterstützt (Anmerkung: mysql unterstützt nur die Suche nach minimum-bounding-Rechteck-GIS).Warum ist PostgreSQL unter Windows so langsam?

Also haben wir unsere DB in PostgreSQL geändert. Wir haben dann herausgefunden, dass Postgresql 8.2 unter Windows im Vergleich zu Mysql 5.1 so viel langsamer ist. Mit langsamer, meine ich etwa 4-5 mal langsamer.

Warum ist das? Gibt es etwas in der Konfiguration, das wir ändern müssen?

fand ich einige Kommentare von anderen Websites wie this:

UPDATE: Wir fanden, dass die Ursache für die Langsamkeit aufgrund der BLOB ist, dass wir in die DB einfügen. Wir müssen in der Lage sein, BLOB mit einer anhaltenden Rate von 10-15 MB/s einzufügen. Wir verwenden die lo_read und lo_write von libpq für jedes BLOB, das wir einfügen/lesen. Ist das der beste Weg? Hat jemand Pgsql für das Einfügen von großen BLOB mit einer hohen Rate verwendet?

EDIT: Ich habe gehört, dass PgSql vor kurzem auf Windows portiert wurde. Könnte dies einer der Gründe sein?

+1

1. Die neueste Version ist 8.4 (veröffentlicht in diesem Monat) - Upgrade, Test, Bericht. 2. Diese "anderen Websites" ist das offizielle Mailinglisten-Archiv des PostgreSQL-Projekts. Auf der anderen Seite ist das Posting, auf das Sie verlinken, sehr alt und erwähnt eine sehr alte und nicht mehr unterstützte Version (8.0). –

Antwort

21

Es gibt Fälle, in denen PostgreSQL unter Windows einen zusätzlichen Overhead im Vergleich zu anderen Lösungen verursacht, aufgrund von Kompromissen bei der Portierung.

Zum Beispiel verwendet PostgreSQL einen Prozess pro Verbindung, MySQL verwendet einen Thread. Unter Unix ist dies normalerweise kein wahrnehmbarer Leistungsunterschied, aber unter Windows ist das Erstellen neuer Prozesse sehr teuer (aufgrund des fehlenden fork() Systemaufrufs). Aus diesem Grund ist die Verwendung von persistenten Verbindungen oder einer Verbindung Pooler viel wichtiger unter Windows bei Verwendung von PostgreSQL.

Ein anderes Problem, das ich gesehen habe, ist, dass früher PostgreSQL unter Windows standardmäßig dafür sorgt, dass Schreibvorgänge den Schreibcache durchlaufen - auch wenn es batteriegepuffert ist. AFAIK, MySQL tut dies nicht, und es wird die Schreibleistung stark beeinflussen. Nun, das ist tatsächlich erforderlich, wenn Sie eine nicht sichere Hardware haben, z. B. ein günstiges Laufwerk. Wenn Sie jedoch einen batteriegepufferten Schreibcache haben, möchten Sie dies in regulären fsync ändern. Moderne Versionen von PostgreSQL (sicherlich 8.3) verwenden stattdessen standardmäßig open_datasync, wodurch dieser Unterschied beseitigt werden sollte.

Sie erwähnen auch nichts darüber, wie Sie die Konfiguration der Datenbank abgestimmt haben.Standardmäßig ist die mit PostgreSQL ausgelieferte Konfigurationsdatei sehr konservativ. Wenn Sie dort nichts geändert haben, müssen Sie unbedingt einen Blick darauf werfen. Es gibt einige Tuning-Hinweise, die unter PostgreSQL wiki verfügbar sind.

Um weitere Details zu geben, müssen Sie viel mehr Details genau angeben, was langsam läuft und wie Sie Ihre Datenbank abgestimmt haben. Ich würde eine E-Mail an die pgsql-general-Mailingliste vorschlagen.

+0

Sie haben Recht. Nachdem ich die Standardkonfiguration ein wenig geändert habe, wurde es ein bisschen schneller. – sivabudh

+0

Wie sieht die neueste Version auf Windows für Leistung aus? Würde sich deine Antwort heute viel ändern? –

+0

Während sich die Performance definitiv verbessert hat, bleiben die architektonischen Lücken bestehen. –

7

Während der Windows-Port von PostgreSQL relativ neu ist, ist mein Verständnis, dass es etwa genauso gut funktioniert wie die anderen Versionen. Aber es ist definitiv ein Hafen; Fast alle Entwickler arbeiten hauptsächlich oder ausschließlich unter Unix/Linux/BSD.

Sie sollten wirklich 8.2 unter Windows nicht ausführen. Meiner Meinung nach war 8.3 das erste Windows-Release, das wirklich produktionsbereit war. 8.4 ist noch besser. 8.2 ist sowieso ziemlich veraltet, und Sie werden mehrere Vorteile ernten, wenn Sie es schaffen, zu aktualisieren.

Eine andere Sache, die man beachten sollte, ist Tuning. PostgreSQL erfordert mehr Tuning als MySQL, um eine optimale Leistung zu erzielen. Sie können in Erwägung ziehen, einen der mailing lists für Hilfe mit mehr als grundlegenden Optimierungen zu posten.

+1

PostgreSQL erfordert mehr Tuning als MySQL: Tatsächlich hat es unter einer sehr konservativen Konfiguration der Speicherauslastung gelitten. Ich weiß nicht, ob das immer noch so ist, aber normalerweise ist das der erste Verdächtige. –

0

PostgreSQL ist bereits zu einem bestimmten Zeitpunkt langsamer als MySQL (es ist tatsächlich schneller, wenn Sie eine lächerlich große Datenbank haben). Nur zur Info, das ist nicht Ihr Problem, aber denken Sie daran.