2016-07-09 7 views
0

Also wie ich oben gesagt habe: Ich habe ein ziemlich großes, aber recht einfaches Skript, das eine einzelne JSON-Datei von einer Website erhält, entschlüsselt und dann speichert die Daten in eine PostgreSQL-Datenbank. Es dauert ungefähr 4 bis 5 Minuten, um vollständig zu beenden (ungefähr 300 000 Aufzeichnungen) auf meinem Computer (i3M CPU, Laptop) aber dauert ungefähr 10-15 Mal länger, um das gleiche auf dem Server zu tun, den ich gerade gemietet habe.

Der dedizierte Server hat eine Intel Xeon Quad (3Ghz) CPU, und auf einem allgemeinen Niveau viel bessere Spezifikationen mit viel besseren Internetzugang, also bin ich mir ziemlich sicher, dass es nichts damit zu tun hat. Es läuft das neueste Debian, Apache/2.4.10, PHP Version 5.6.22-0, PostgreSQL 9.5.
Ich habe versucht, die Einstellungen und Module aus den WAMP-Einstellungen zu kopieren, dachte mir, es ist meine Hilfe. Leider nicht. Ich bin mir nicht sicher, welche Informationen bei der Lösung dieses Problems helfen könnten, aber ich bin mehr als glücklich, auf eine der Fragen zu antworten.
Ich bin fast überzeugt, dass es etwas mit einer Option zu tun hat, die ich hätte überspringen müssen, so würde jede Hilfe sehr geschätzt werden.

PHP Skript viel langsamer auf dem Server als auf WAMP localhost

PS: WAMP verwendet: 2.4.17 Apache, 5.6.16 PHP, 9.5 PostgreSQL.

+2

könnte besser sein zu fragen in http://serverfault.com/ – Jeff

Antwort

1

Leistungsprobleme können durch viele Dinge verursacht werden.

  • Zunächst bin ich ziemlich sicher (?) Ihr lokaler PC hat eine SSD-Festplatte, während der Server möglicherweise auf "Standard-SAS-Laufwerke" läuft. Dies kann einen großen Unterschied machen, wenn es darum geht, Sachen auf die Festplatte zu schreiben/zu lesen. Speziell für "Random-IO" (dh viel Selects mit Bedingungen und einen "kleinen" dbbuffer)
  • Haben Sie einen "root" -Server oder eine gemietete VM? Wenn es sich um eine VM handelt, sollten Sie Ihre Ressourcen mit anderen VMs teilen. (Vor allem der Zugriff auf den SAS-Disks, sondern auch CPU-Zeit)
  • Sie einige Skripte schreiben sollte auf „identifizieren“, um den Engpass:

    • ein PHP-Skript generieren, die so viel CPU- verwendet Power wie möglich, fügen Sie einige Millionen Iterationen hinzu, vergleichen Sie die Ergebnisse. (Raten Sie, das ist nicht das Problem)
    • Generieren Sie ein PHP Scirpt, das massive DISK-IO verwendet - vergleichen Sie die Ergebnisse für thausands von Iterationen.
    • Generieren Sie ein PHP-Skript, das eine große Menge an Speicher verwendet - vergleichen Sie es erneut. (Vorsicht bei der Verwendung von zu viel Speicher wird dazu führen, dass Daten auf die Festplatte geschrieben werden, die das Ergebnis "zerstören")
    • Wenn Sie jetzt keinen (unerwarteten) Unterschied feststellen, haben Sie Hardware- eliminiert. Probleme. - Wiederholen Sie den Task für schwere Datenbanklasten, um herauszufinden, ob die Datenbank möglicherweise falsch konfiguriert ist. Manchmal ist es nur eine einfache "Boolesche" Flagge, die starke Auswirkungen auf die Leistung haben kann.

    +1

    Vielen Dank für Ihren Kommentar, ich habe viel gelernt, während Sie die Schritte, die Sie geschrieben haben. Ich musste die postsgresql Conf-Datei konfigurieren und es ist jetzt viel schneller. – watsta

    1

    Um die Antwort von dognose zu erweitern, finde ich, dass die Optimierung Ihres DB-Zugriffs einen großen Unterschied in der Leistung machen kann.

    Es könnte interessant sein zu sehen, was mit der Laufzeit passiert, wenn Sie die DB-Abfragen auskommentieren. Dies wird Ihnen sagen, wie viel der Laufzeit für die DB ausgegeben wird.

    Wenn die Datenbank viel Zeit benötigt, versuchen Sie, Ihre Anfragen zu verarbeiten. Anstatt eine einzelne Einfügung gleichzeitig an die Datenbank zu senden, versuchen Sie, sie in einer Variablen zu halten und mehr als 50 bis 100 Einfügungen (oder mehr) in einem Stapel zu senden. Je nachdem, wie Sie Ihre DB-Verbindung einrichten, kann für jede Anforderung ein erheblicher Overhead entstehen.

    +0

    Danke, ich werde auf jeden Fall versuchen, die Anfragen zu verarbeiten, daran habe ich noch nie gedacht. – watsta

    +0

    Das Arbeiten mit Batches ist sehr wichtig, wenn Sie etwas wie "Hibernate" verwenden - sonst senden Sie Millionen von dummen Select-Abfragen. – dognose