Ich bin mir bewusst, dass schnellere Festplatten als die von mir verwendeten helfen, aber das Einsetzen dauert länger und ich versuche, einige Notfallmaßnahmen zu ergreifen, um die Festplatten-E / A zu verringern. atop meldet die DSK-Nutzung fast ständig im roten Bereich. Dies ist für Postgres 8.3.
Meine Einstellung für shared_buffers liegt bei 24 MB, obwohl der Server über 16 GB RAM verfügt, die nicht voll ausgelastet sind. Mein erster Gedanke war, der Datenbank so viel RAM wie möglich zu geben, aber ich bin mir nicht sicher, wie ich das machen soll (dies ist ein dedizierter Datenbankserver).
Jede Lösung, die keinen Neustart erfordert, ist vorzuziehen, aber ich nehme an, was ich an dieser Stelle bekommen kann.
Vielen Dank!
linux
postgresql
hard-drive
Harel
quelle
quelle
shared_buffers
die Konfigurationsdatei postgresql.conf zu vergrößern . Diese Änderung erfordert einen Neustart. Möglicherweise müssen Sie auch den Wert/proc/sys/kernel/shmmax
davor erhöhen .Antworten:
Die Einstellung "shared_buffers" von 24 MB ist die konservative Standardeinstellung. Ich würde sagen, dass sie für eine dedizierte Datenbank mit 16 GB verfügbarem RAM erheblich höher sein muss. Aber ja, Sie müssen den Server neu starten, um die Größe zu ändern. http://wiki.postgresql.org/wiki/Performance_Optimization ist ein guter Ausgangspunkt für Richtlinien zur Leistungskonfiguration. Sinnvoller erscheint es, die shared_buffers auf 4GB oder 6GB zu setzen.
Beachten Sie, dass Sie unter Linux die Einstellung kernel.shmmax sysctl anpassen müssen (in /etc/sysctl.conf oder indem Sie einfach / proc / sys / kernel / shmmax schreiben), um einen Block dieses viel gemeinsam genutzten Speichers zuzuweisen. Wenn Sie keinen Fehler erhalten, der angibt, wie viel angefordert wurde, müssen Sie kernel.shmmax höher einstellen.
Da Sie über viel Arbeitsspeicher verfügen, sollten Sie auch in Betracht ziehen, den Standardwert für work_mem höher festzulegen, damit Sortierungen und Hashes (group / order / distinct usw.) eher im Arbeitsspeicher als in temporären Dateien ausgeführt werden. Dazu muss der Server nicht neu gestartet werden. Aktualisieren Sie einfach die Konfigurationsdatei, laden Sie den Dienst neu, und neue Sitzungen erhalten die neue Einstellung. Der Standardarbeitsspeicher für eine Sitzung ist 1 MB. Sie können das Maximum berechnen, das gleichzeitig verwendet werden darf,
work_mem * max_client_connections
und die Auswirkungen abschätzen.Sie sollten außerdem effective_cache_size erhöhen, um dem Planer anzuzeigen, dass der Kernel-FS-Layer wahrscheinlich viele Seiten im Speicher außerhalb der gemeinsam genutzten Puffer von postgresql zwischenspeichert.
usw. usw. Ich hoffe, das bringt Sie zu einem guten Start.
quelle
Hängen Sie die Festplatten mit noatime wieder ein
quelle
Abgesehen von den hier gegebenen Vorschlägen möchten Sie möglicherweise auch Ihre Einstellungen für die automatische Vakuumpumpe überprüfen. Standardmäßig wird es nach ungefähr 50 Aktualisierungen ausgelöst, und wenn Ihre Datenbank viele Aktualisierungen / Einfügungen ausführt, kann dies eine unnötige Anzahl von Vakuumanweisungen auslösen, die viele E / A-Vorgänge verursachen.
quelle
Sehen Sie hier mehr .
quelle
Wenn die diskio von postgresql sehr hoch ist, sollten Sie die ausgeführten Anweisungen überprüfen, insbesondere auf Anweisungen, die eine "Sortierung auf der Festplatte" durchführen, und die richtigen Indizes festlegen.
Suchen Sie einfach bei Google nach "Postgresql Performance Tuning" (Leistungsoptimierung für Postgresql).
quelle