COMMIT_TABLE Wait Type in SQL Server

COMMIT_TABLE is recorded when a thread waits for access to the in-memory portion of the hidden commit table (sys.syscommittab) that underpins Change Tracking. Every transaction that modifies a change-tracked table adds a row to this structure, and the storage engine touches it from several directions: transaction commits, checkpoints, and the periodic automatic cleanup that trims old entries.

No Change Tracking, no meaningful COMMIT_TABLE waits; the wait is effectively a Change Tracking tax meter.

Is It a Problem?

It can be. The known bottleneck pattern is Change Tracking enabled on many tables combined with a workload of many small transactions updating them: every one of those commits queues at the same shared structure. Cleanup falling behind makes the table bigger and the contention worse, and there have been documented cases of syscommittab cleanup problems compounding this.

If this wait ranks on your server, Change Tracking’s scope and hygiene are the questions.

Common Causes

  • Change Tracking on many tables with high-frequency small transactions.
  • Auto cleanup falling behind, letting syscommittab grow (retention period too long for the churn, or cleanup errors in the error log).
  • Checkpoints and commits contending during load bursts.

What To Do

  1. Inventory the scope: sys.change_tracking_tables shows what is tracked; ask which tables genuinely need it.
  2. Check cleanup health: retention settings per database, and sys.dm_tran_commit_table size trends; a forever-growing commit table means cleanup is losing.
  3. Reduce the transaction churn where possible (batch small updates) or narrow tracking to the tables consumers actually read.
  4. If Change Tracking is load-bearing at scale, evaluate whether the consumers could move to a design with less per-commit overhead.

How To See It

Rank it against everything else with Get-WaitStatistics; any real presence points directly at Change Tracking scope and cleanup.


Part of the SQL Server Wait Types Library.
Related deep dive: LCK_M_X, LCK_M_S, and LCK_M_U Wait Types.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *