Hier ist ein Teil meines Checkpoint-Logs:
2014-03-26 11:51:29.341 CDT,,,18682,,532854fc.48fa,4985,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 15047 buffers (1.4%); 0 transaction log file(s) added, 0 removed, 30 recycled; write=68.980 s, sync=1.542 s, total=70.548 s; sync files=925, longest=0.216 s, average=0.001 s",,,,,,,,,""
2014-03-26 11:56:05.430 CDT,,,18682,,532854fc.48fa,4987,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 16774 buffers (1.6%); 0 transaction log file(s) added, 0 removed, 31 recycled; write=72.542 s, sync=17.164 s, total=89.733 s; sync files=885, longest=3.812 s, average=0.019 s",,,,,,,,,""
2014-03-26 12:01:21.650 CDT,,,18682,,532854fc.48fa,4989,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 14436 buffers (1.4%); 0 transaction log file(s) added, 0 removed, 33 recycled; write=122.350 s, sync=5.212 s, total=127.676 s; sync files=924, longest=3.740 s, average=0.005 s",,,,,,,,,""
2014-03-26 12:06:25.028 CDT,,,18682,,532854fc.48fa,4991,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 13277 buffers (1.3%); 0 transaction log file(s) added, 0 removed, 29 recycled; write=126.217 s, sync=5.733 s, total=131.991 s; sync files=894, longest=1.859 s, average=0.006 s",,,,,,,,,""
2014-03-26 12:10:41.958 CDT,,,18682,,532854fc.48fa,4993,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 20765 buffers (2.0%); 0 transaction log file(s) added, 0 removed, 28 recycled; write=88.015 s, sync=10.818 s, total=98.872 s; sync files=881, longest=2.690 s, average=0.012 s",,,,,,,,,""
Mir ist aufgefallen, dass unsere Datenbank manchmal sehr langsam ist - Sie sehen eine sehr große Anzahl von normalerweise kurzen Abfragen, die viel länger als jetzt hängen bleiben. Es passiert regelmäßig ohne einen klaren Schuldigen.
Frage: Könnte Checkpoint dies verursachen? Was passiert in der "Synchronisierungs" -Phase des Checkpoints?
quelle
Spülen der schmutzigen OS - Dateisystempuffer verursacht durch Überschreiten
dirty_bytes
oderdirty_ratio
wird ein Vordergrundsperrbetrieb!Das Kernel - tunables
dirty_bytes
,dirty_background_bytes
,dirty_ratio
,dirty_background_ratio
unddirty_centisecs
Steuer Spülen von schmutzigen OS - Dateisystem - Puffern auf der Festplatte.dirty_bytes
ist die Schwelle in Bytes,dirty_ratio
ist die Schwelle als Verhältnis des gesamten Speichers.dirty_background_bytes
unddirty_background_ratio
sind ähnliche Schwellenwerte, aber das Leeren erfolgt im Hintergrund und blockiert andere Lese- / Schreibvorgänge erst, wenn es abgeschlossen ist.dirty_centisecs
ist, wie viele Zentisekunden vergehen können, bevor ein Flush ausgelöst wird.Vor kurzem wurden die Standardeinstellungen für diese Tunables unter Linux gesenkt, da die Speichergröße für moderne Maschinen dramatisch zugenommen hat. Selbst Verhältnisse von 5 und 10% für
dirty_background_ratio
unddirty_ratio
auf einem 256-GB-Computer können ein E / A-System überfluten.Das Einstellen
dirty_background_bytes
oderdirty_background_ratio
Löschen von verschmutzten Puffern im Hintergrund ist schwierig. Glücklicherweise können Sie diese Einstellungen anpassen, ohne PostgreSQL oder den Host anhalten zu müssen, indem Sie neue Werte in die entsprechenden Dateien einfügen:Zum Beispiel, um die Anzahl der verschmutzten Bytes festzulegen, die eine Hintergrundbereinigung auslösen. Wenn Sie einen batteriegepufferten verwenden, Kondensator-backed, oder Flash - Speicher - RAID - Karte (Sie tun möchten , dass Ihre Daten im Falle eines Crashs zu halten, nicht wahr?) Starten durch Abstimmung
dirty_background_bytes
auf 1/2 der Schreib - Cache - Puffergröße unddirty_bytes
zu 3/4 dieser Größe. Überwachen Sie Ihr E / A-Profil mit iostats, und wenn weiterhin Latenzprobleme auftreten, bedeutet dies, dass die Schreiblast Ihrer Datenbank die Cache-Leerungen des Dateipuffers immer noch überfordert. Verringern Sie die Werte, bis sich die Latenz verbessert, oder überlegen Sie, Ihr E / A-Subsystem zu aktualisieren. FusionIO-Karten und SSDs sind zwei Möglichkeiten für extremen E / A-Durchsatz.Viel Glück!
quelle