CLR_MANUAL_EVENT Wait Type in SQL Server

CLR_MANUAL_EVENT is recorded when a task performing CLR execution waits for a manual-reset event to be signalled. In practice it is mostly CLR worker threads standing by for work, the manual-reset sibling of CLR_AUTO_EVENT, and it appears wherever CLR integration is active, including through the engine’s internal CLR use (spatial types, hierarchyid, and friends).

Idle threads on synchronisation primitives, in other words.

Is It a Problem?

Almost never, and long waits are expected. It belongs on the benign filter list, and totals track uptime and CLR thread counts rather than workload health. Instances with zero user assemblies still accrue it through internal CLR features.

The single exception mirrors CLR_AUTO_EVENT: if you run your own unsafe assemblies using ManualResetEvent for cross-thread coordination, waits here can reflect your code’s signalling behaviour, and only then does the number describe something you own. Safe assemblies: ignore entirely.

Common Causes

  • Idle CLR worker threads on any CLR-enabled instance.
  • Internal engine features hosted in CLR.
  • Custom unsafe assemblies doing manual-reset signalling (rare).

What To Do

  1. Filter it out; our Get-WaitStatistics script excludes it by default.
  2. If you own unsafe assemblies whose behaviour maps to this wait, review their threading design, not the server.
  3. No server-side action exists or is needed.

How To See It

Rank waits with Get-WaitStatistics, where it is filtered as background noise.


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

Comments

Leave a Reply

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