{
  "slug": "checkpoint-starvation",
  "term": "Checkpoint starvation",
  "aliases": [
    "SQLite WAL checkpoint starvation"
  ],
  "definition": "Checkpoint starvation is sustained inability to finish or reset a database log checkpoint because the required progress conditions keep being obstructed.",
  "note": "In SQLite WAL, retained reader snapshots can constrain backfill and recycling while later writes continue. [sqlite-wal] Our two-case observation separates a pinned transaction from an idle open connection; it is not a production failure-rate study. [hesela-observation] A PASSIVE result can report busy=0 with fewer checkpointed frames than current log frames. [sqlite-checkpoint-pragma]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "A large WAL file alone does not identify starvation; file length can remain high after progress.",
      "citationIds": [
        "sqlite-wal"
      ]
    }
  ],
  "related": [
    "database-checkpoint",
    "write-ahead-log",
    "sqlite-wal-end-mark"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "sqlite-wal",
      "title": "SQLite: Write-Ahead Logging, sections 2, 6 and 11",
      "url": "https://www.sqlite.org/wal.html",
      "accessed": "2026-10-14"
    },
    {
      "id": "sqlite-checkpoint-pragma",
      "title": "SQLite: PRAGMA wal_checkpoint, three-column result",
      "url": "https://www.sqlite.org/pragma.html#pragma_wal_checkpoint",
      "accessed": "2026-10-14"
    },
    {
      "id": "hesela-readers",
      "title": "SQLite WAL checkpoint starvation: success is not completion",
      "url": "https://hesela.com/analyses/sqlite-wal-checkpoint-starvation/",
      "accessed": "2026-10-14"
    },
    {
      "id": "hesela-observation",
      "title": "Hesela: measured SQLite WAL-reader observations and limits",
      "url": "https://hesela.dev/research/sqlite-wal-readers.json",
      "accessed": "2026-10-14"
    }
  ],
  "updated": "2026-10-14"
}
