sys.dm_exec_query_optimizer_memory_gateways (Transact-SQL)

Applies to: SQL Server 2016 (13.x) and later Azure SQL Database Azure SQL Managed Instance

Returns the current status of resource semaphores used to reduce concurrent query optimization.

Column Type Description
pool_id int Resource pool ID under Resource Governor
name sysname Compile gate name (Small Gateway, Medium Gateway, Big Gateway)
max_count int The maximum configured count of concurrent compiles
active_count int The currently active count of compiles in this gate
waiter_count int The number of waiters in this gate
threshold_factor bigint Threshold factor which defines the maximum memory portion used by query optimization. For the small gateway, threshold_factor indicates the maximum optimizer memory usage in bytes for one query before it is required to gain access in the small gateway. For the medium and big gateway, threshold_factor shows the portion of total server memory available for this gate. It is used as a divisor when calculating the memory usage threshold for the gate.
threshold bigint Next threshold memory in bytes. The query is required to gain access to this gateway if its memory consumption reaches this threshold. -1 if the query is not required to gain access to this gateway.
is_active bit Whether the query is required to pass the current gate or not.

Permissions

SQL Server requires VIEW SERVER STATE permission on the server.

Azure SQL Database requires the VIEW DATABASE STATE permission in the database.

Permissions for SQL Server 2022 and later

Requires VIEW SERVER PERFORMANCE STATE permission on the server.

Remarks

SQL Server uses a tiered gateway approach to reduce the number of permitted concurrent compilations. Three gateways are used, including small, medium, and big. Gateways help prevent the exhausting of overall memory resources by larger compilation memory-requiring consumers.

Waits on a gateway result in delayed compilation. In addition to delays in compilation, reduced requests will have an associated RESOURCE_SEMAPHORE_QUERY_COMPILE wait type accumulation. The RESOURCE_SEMAPHORE_QUERY_COMPILE wait type might indicate that queries are using a large amount of memory for compilation and that memory is exhausted. Alternatively, there might be sufficient memory available overall but available units in a specific gateway are exhausted. The output of sys.dm_exec_query_optimizer_memory_gateways can be used to troubleshoot scenarios where there was insufficient memory to compile a query execution plan.

Examples

A. View statistics on resource semaphores

What are the current optimizer memory gateway statistics for this instance of SQL Server?

SELECT [pool_id], [name], [max_count], [active_count],
       [waiter_count], [threshold_factor], [threshold],
       [is_active]
FROM sys.dm_exec_query_optimizer_memory_gateways;