SQLTRACE_INCREMENTAL_FLUSH_SLEEP Wait Type in SQL Server

SQLTRACE_INCREMENTAL_FLUSH_SLEEP is recorded by a background thread sleeping between checks for SQL Trace data that needs flushing to a trace file. Because the default trace runs on practically every instance (it is the lightweight always-on trace that records events like file growths and DDL), this thread exists and sleeps everywhere, accumulating wait time around the clock.

It is the trace subsystem’s equivalent of the lazy writer’s nap schedule.

Is It a Problem?

No. It is a timer loop on the benign filter list, and its total tracks uptime rather than tracing overhead. Even instances that never run user traces accumulate it via the default trace.

Real tracing overhead questions concern active rowset traces (Profiler) and wide server-side traces, which surface under TRACEWRITE, a genuinely actionable wait with its own page. Do not confuse the two: TRACEWRITE can throttle a server; this sleep timer cannot.

Common Causes

  • The default trace being enabled (standard and recommended).
  • Any file-based traces existing, active or idle.

What To Do

  1. Filter it out; our Get-WaitStatistics script excludes it by default.
  2. Keep the default trace on; it costs almost nothing and our autogrowth history tooling reads from it.
  3. For trace overhead concerns, look at TRACEWRITE and sys.traces instead.

How To See It

Rank waits with Get-WaitStatistics; it is filtered as noise there, and safely ignored in raw output.


Part of the SQL Server Wait Types Library.
Related deep dive: ASYNC_NETWORK_IO Wait Type.

Comments

Leave a Reply

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