Auswirkungen auf die Leistung, wenn PostgreSQL so eingestellt wird, dass alle Anweisungen protokolliert werden

8

PostgreSQL 9.2.2 unter Windows 7 64-Bit.

Die Einstellung log_statementin der postgresql.confDatei gibt an, welche Anweisungen protokolliert werden sollen (keine, DDL, datenmodifizierend oder alle). Inwieweit log_statement = 'all'verschlechtert die Einstellung die Leistung? Ich habe gelesen, dass dies die Leistung erheblich verringert, aber diese Behauptungen stammen aus älteren Artikeln. Wie viel Leistungsverlust sollte ich also im Vergleich dazu erwarten log_statement = 'none'?

bwDraco
quelle

Antworten:

12

Wie fast alles andere hängt es von Ihrer Hardware, Konfiguration und Arbeitslast ab.

Wenn Sie nur wenige teure Anweisungen ausführen, macht dies kaum einen Unterschied. Wenn Sie viele kleine einfache Anweisungen ausführen, macht dies einen größeren Unterschied.

Wenn sich Ihre Protokolle auf demselben Dateisystem oder sogar nur auf derselben Festplatte wie die Datenbank befinden, macht die Protokollierung einen größeren Unterschied als wenn die Protokolle auf einer separaten Festplatte gespeichert werden. Obwohl die Protokolle nicht explizit erstellt fsync()und nacheinander geschrieben werden, konkurrieren sie immer noch mit der Hauptdatenbank um E / A.

Noch wichtiger ist, dass einige Dateisysteme (insbesondere ext3) alle Daten löschen , wenn eine Datei erstellt wird fsync(), sodass die Protokollschreibvorgänge eher zufälligen E / A-Vorgängen als sequentiellen E / A-Vorgängen entsprechen und jedes Festschreiben verlangsamen. IIRC Dies ist kein Problem bei ext4 oder xfs.

Dies hängt auch davon ab, ob Sie das Anweisungs-Timing aktiviert haben, welche Protokollierungsmethode Sie verwenden und vieles mehr.

Die beste Option ist es, es mit einer Simulation Ihrer tatsächlichen Arbeitsbelastung zu vergleichen und zu sehen.

Craig Ringer
quelle
Protokollierung bei stderr als reine Textdatei auf derselben Festplatte. Das Timing der Anweisungen ist deaktiviert. Der Protokollierungskollektor ist aktiviert. Der Server ist gelegentlich häufigen, mäßig komplexen Abfragen ausgesetzt.
bwDraco
@DragonLord: Das Timing der Anweisungen macht einen großen Unterschied. für CPU-Last.
Erwin Brandstetter