{
  "slug": "hot-journal",
  "term": "Hot journal",
  "aliases": [
    "Hot rollback journal",
    "SQLite hot journal"
  ],
  "definition": "A hot journal is a SQLite rollback journal that requires replay to recover an interrupted database transaction.",
  "note": "SQLite's rollback-mode checks require an existing journal larger than 512 bytes, a valid nonzero header, no RESERVED lock on the database, and either an existing named super-journal or no super-journal name. The lock check distinguishes recovery work from a current writer's journal. SQLite obtains recovery locks and replays a hot journal before reading the database. [sqlite-locking] A leftover journal whose named super-journal was deleted at group commit is not hot. [sqlite-atomiccommit] See the distinction between journal files and recovery decisions. [hesela-wal] A disposable process-exit observation demonstrates journal retention after commit and rollback of unfinished writes; it is not a power-loss test. [hesela-journal-observation]",
  "status": "shipping",
  "advantages": [
    {
      "text": "Lets SQLite identify unfinished rollback-mode work and recover before serving database reads.",
      "citationIds": [
        "sqlite-locking"
      ]
    }
  ],
  "limitations": [
    {
      "text": "A journal filename alone does not establish hotness; its header, lock state and super-journal relationship matter.",
      "citationIds": [
        "sqlite-locking"
      ]
    },
    {
      "text": "Deleting or separating a hot journal from its database can remove information needed for recovery.",
      "citationIds": [
        "sqlite-locking"
      ]
    }
  ],
  "related": [
    "rollback-journal",
    "sqlite-super-journal",
    "crash-consistency",
    "write-ahead-log",
    "fsync"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "sqlite-locking",
      "title": "SQLite: File Locking And Concurrency In SQLite Version 3",
      "url": "https://sqlite.org/lockingv3.html",
      "accessed": "2026-10-14"
    },
    {
      "id": "sqlite-atomiccommit",
      "title": "SQLite: Atomic Commit In SQLite",
      "url": "https://sqlite.org/atomiccommit.html",
      "accessed": "2026-10-14"
    },
    {
      "id": "hesela-wal",
      "title": "Hesela: WAL, checkpoints and torn pages, SQLite commit scope",
      "url": "https://hesela.com/analyses/wal-checkpoints-torn-pages/#sqlite-commit-scope",
      "accessed": "2026-10-14"
    },
    {
      "id": "hesela-journal-observation",
      "title": "Hesela: SQLite journal-lifecycle observations, measured synthetic workload and explicit limits",
      "url": "https://hesela.dev/research/sqlite-journal-observation.json",
      "accessed": "2026-10-14"
    }
  ],
  "updated": "2026-10-14"
}
