RESOURCE_SEMAPHORE_QUERY_COMPILE means a query is waiting for memory needed at compile time. This is different from RESOURCE_SEMAPHORE, the runtime grant wait, where a plan is already compiled and queuing for execution memory.
SQL Server throttles concurrent compiles through memory gateways: an unlimited lane for cheap compiles, then progressively narrower gates for medium and large ones. A query whose compilation needs serious memory has to get through a gate with very few slots, and when those slots are taken, it waits here before it can even start compiling.
Is It a Problem?
Short bursts can happen after restarts, failovers, and deployments, when the plan cache is cold and everything compiles at once. It becomes a real issue when the wait is persistent during normal hours, because that means a steady stream of expensive compilations is fighting for the big-gateway slots, and user queries stall before execution even begins.
Common Causes
- Monster queries (huge IN lists, sprawling ORM-generated statements, many-join views on views) that are enormously expensive to compile.
- Plan cache churn: ad hoc query text variation forcing the same logical query to recompile endlessly.
- Cache-flushing events, memory pressure or configuration changes, triggering mass recompilation.
- Overall memory pressure shrinking what is available for compilation.
What To Do
- Find the expensive compiles:
sys.dm_exec_query_stats(plan generation stats) and the plan cache will show the biggest, most-recompiled offenders. - Simplify the worst queries; compile cost scales with query complexity, and breaking a giant statement into steps often removes the gateway problem outright.
- Improve plan reuse: parameterise the ad hoc patterns (forced parameterization for a targeted database can help) so the same text stops recompiling.
- Check memory health overall; page life expectancy dips and
RESOURCE_SEMAPHOREalongside this wait mean the box is squeezed everywhere, not just at compile.
How To See It
Use Get-WaitStatistics to rank it, then correlate with compile activity and plan cache behaviour.
Part of the SQL Server Wait Types Library.
Related deep dive: RESOURCE_SEMAPHORE.
Leave a Reply