2016-12-10 3 views
9

Mit langsamen Abfrageprotokollierung aktiviert, sehen wir eine Menge von COMMIT s dauert mehr als mehrere Sekunden in unserer Produktionsdatenbank abzuschließen. Bei der Untersuchung sind dies in der Regel einfache Transaktionen: eine Zeile holen, UPDATE die Zeile, COMMIT. Die SELECT s und UPDATE s in diesen bestimmten Transaktionen werden nicht als langsam protokolliert. Gibt es etwas, was wir tun können, oder Werkzeuge, die wir verwenden können, um den Grund für diese langsamen Commits herauszufinden? Wir laufen auf einer SSD und streamen zu einem Slave, wenn das einen Unterschied macht.Debugging langsam Postgresql 9.3 COMMITs

+2

Streaming zum Nachbau könnte einen großen Unterschied machen. Ist die synchrone Replikation aktiviert? Wenn dies der Fall ist, kann dies leicht zu verzögerten Commits führen. Sie können bestätigen, dass dies die Ursache ist, indem Sie die synchrone Replikation vorübergehend deaktivieren (Einstellung 'synchronous_standby_names = '' oder' synchronous_commit = 'local''). –

+0

Beide Einstellungen werden auf den Standardwert gesetzt, was, wie ich die Dokumente verstehe, synchron_commit bedeutet ist bereits "lokal". –

+1

Probieren Sie 'log_lock_waits = true' aus, um zu sehen, ob Ihre Schreibvorgänge strittig sind. – teppic

Antwort

0

Postgres-Commits sind synchron. Dies bedeutet, dass sie warten, bis die WAL-Schreibvorgänge abgeschlossen sind, bevor sie zum nächsten übergehen. Sie können die WAL-Einstellungen in der Konfigurationsdatei anpassen, um dies anzupassen.

Sie können die Commit-Ebene auf asynchrone Sitzung/Benutzerlevel oder datenbankweit mit dem synchronen_commit in der Konfigurationsdatei festlegen.

Auf der Datenbankseite.

Saugen Sie Ihre Tabellen ab und aktualisieren Sie die Statistiken. Dies wird tote Tupel loswerden, da es viele Aktualisierungen geben wird.

VACUUM ANALYZE 
Verwandte Themen