LOGMGR_RESERVE_APPEND is a wait recorded when a thread needs to write a log record but there is no free space left in the transaction log. The thread first tries to grow the log file; if it cannot, and the database is in simple recovery (or behaving like it), it waits one second at a time hoping log truncation frees up space in the meantime.
In plain terms: your transaction log is full, and work is stalling in one-second increments while the engine looks for room.
Is It a Problem?
Always. This is not a tuning subtlety, it is the log running out of space at runtime. Even occasional occurrences mean the log is sized too tightly for the workload, autogrowth could not keep up (or failed outright), or something is preventing truncation. Left alone it escalates to error 9002, “the transaction log for database is full”, and writes start failing.
Common Causes
- Log file too small for the workload’s burst volume, with checkpoints (simple recovery) unable to clear space fast enough.
- Autogrowth failing: disk full, or growth increments so large they cannot complete in time.
- Something delaying truncation: an old active transaction, a long-running rebuild, or in full recovery a missing log backup (check
log_reuse_wait_descinsys.databases). - Percent-based autogrowth on a large log producing enormous, slow growth events.
What To Do
- Check
SELECT name, log_reuse_wait_desc FROM sys.databases;for the affected database. It names exactly what is blocking truncation. - Pre-size the log to cover your largest normal burst (biggest batch job, index maintenance, checkpoint interval) plus headroom, so growth is the exception.
- Set autogrowth to a fixed sensible increment and confirm the drive actually has space for it.
- In full recovery, verify log backups run frequently enough for your churn. In simple recovery, look for the long transaction holding the log active.
How To See It
Rank it against everything else with Get-WaitStatistics. Any appearance of LOGMGR_RESERVE_APPEND justifies an immediate look at log sizing and log_reuse_wait_desc, before it becomes a 9002 outage.
Part of the SQL Server Wait Types Library.
Related deep dive: WRITELOG Wait Type.
Leave a Reply