한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Game-Lag-Whitepaper › L12 Datenbank

Checkpoint und Log-Flush Checkpoint / log flush stalls

Ursachen-ID db-checkpoint · Hauptzuständig DB-Infrastruktur (Infrastrukturteam)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Schreibt die DB in regelmäßigen Abständen die Änderungen aus dem Arbeitsspeicher gebündelt auf den Datenträger, werden Queries in diesem Moment langsam.

Warum Aufgelaufene Änderungen werden regelmäßig auf den Datenträger geschrieben → Folge Der Datenträger ist in diesem Moment ausgelastet, Queries verzögern sich → Auf dem Bildschirm Speichern und Laden werden in festen Abständen langsam

Symptome
Input-Lag, Ruckeln
Faktoren
Latenz
Wer ist betroffen
Ganzer Server, Nur eine bestimmte Funktion
Wann
In festen Abständen
Zuständigkeit
Hauptzuständig DB-Infrastruktur (Infrastrukturteam)
Aufgaben Infrastrukturteam
Checkpoints in kleine Schritte aufteilen und gleichmäßig verteilen, Transaktionslog (Redo-Log, WAL) großzügig bemessen, schnelle Datenträger einsetzen.
Im Graphen
Spitzen in festen Abständen · DB-Query-Latenz, Disk-Schreibvolumen
Wo nachsehen
PostgreSQL: Checkpoint-Zeitpunkte und geschriebene Buffer im Log von log_checkpoints (in neueren Versionen standardmäßig an), Anzahl der Checkpoints (ab 17 num_timed und num_requested in pg_stat_checkpointer, bis 16 checkpoints_timed und checkpoints_req in pg_stat_bgwriter) und checkpoint_warning-Warnungen prüfen. MySQL: im Abschnitt LOG von SHOW ENGINE INNODB STATUS die Differenz zwischen Log sequence number und Last checkpoint at prüfen. Disk-Schreibvolumen und Schreiblatenz des Servers darüberlegen
Spricht dafür
Spitzen der Query-Latenz fallen mit Checkpoint-Zeitpunkten zusammen, gleichzeitig schießen Disk-Schreibvolumen und Schreiblatenz hoch. Gibt es in PostgreSQL deutlich mehr angeforderte Checkpoints (num_requested) als zeitgesteuerte (num_timed), erreicht WAL oft max_wal_size, und Checkpoints werden vorgezogen
Spricht dagegen
Spitzen in einem Rhythmus ohne Bezug zu den Checkpoint-Zeitpunkten: Backup oder Batch-Job (dk-backup, db-batch)
Prüfmittel
Mit Infrastruktur-Tools prüfbar (ohne Spielcode)
Mehr dazu
Ist das Transaktionslog, das die Änderungen aufnimmt (Redo-Log bei MySQL, WAL bei PostgreSQL), zu klein, muss die DB bei jedem vollen Log hastig einen Checkpoint durchziehen. Der Schreibdurchsatz bricht dann immer wieder kurz stark ein.

Quellen

  1. WAL Configuration (PostgreSQL Documentation) PostgreSQL
    Checkpoint standardmäßig alle 5 Minuten oder alle 1 GB WAL (max_wal_size), teuer, weil alle Dirty Pages geschrieben werden. checkpoint_completion_target verteilt die Schreibvorgänge und vermeidet I/O-Spitzen. Ist der Checkpoint-Abstand kürzer als checkpoint_warning, steht im Log eine Warnung, max_wal_size zu erhöhen
  2. Configuring Buffer Pool Flushing MySQL
    Ist das Redo-Log voll, sinkt der Durchsatz durch einen hastigen (sharp) Checkpoint kurzzeitig; adaptives Flushing verteilt die Schreibvorgänge gleichmäßig
  3. Error Reporting and Logging (PostgreSQL Documentation) PostgreSQL
    log_checkpoints: protokolliert je Checkpoint die geschriebenen Buffer und die Dauer, standardmäßig an
  4. The Cumulative Statistics System (PostgreSQL Documentation) PostgreSQL
    num_timed (zeitgesteuerte Checkpoints) und num_requested (angeforderte Checkpoints) in pg_stat_checkpointer
  5. PostgreSQL 17 Release Notes PostgreSQL
    pg_stat_checkpointer neu eingeführt, Checkpoint-Spalten aus pg_stat_bgwriter dorthin verschoben
  6. The Cumulative Statistics System (PostgreSQL 16 Documentation) PostgreSQL
    Bis 16 checkpoints_timed und checkpoints_req in pg_stat_bgwriter
  7. InnoDB Standard Monitor and Lock Monitor Output MySQL
    Abschnitt LOG: aktuelle Log Sequence Number und Position des letzten Checkpoints

Verwandte Ursachen

Gleiche Schicht: L12 Datenbank

Ursachen aus anderen Schichten mit demselben Symptom (Input-Lag)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen