sys.dm_exec_query_optimizer_memory_gateways (Transact-SQL)

适用于: SQL Server 2016 (13.x) 及以后版本 Azure SQL 数据库Azure SQL 托管实例Microsoft Fabric 中的 SQL 数据库

返回用于减少并发查询优化的资源信号灯的当前状态。

类型 描述
pool_id int 资源调控器下的资源池 ID
name sysname 编译门名称(小型网关、中网关、大网关)
max_count int 并发编译的最大配置计数
active_count int 此门中当前活动的编译计数
waiter_count int 此门的服务员数
threshold_factor bigint 定义查询优化使用的最大内存部分的阈值因子。 对于小型网关,threshold_factor指示一个查询的最大优化器内存使用量(以字节为单位),然后才能在小型网关中获取访问权限。 对于中型和大型网关,threshold_factor显示此门可用的服务器内存总量部分。 计算门的内存使用阈值时,它用作除数。
threshold bigint 下一个阈值内存(以字节为单位)。 如果查询的内存消耗达到此阈值,则需要查询才能访问此网关。 如果不需要查询来获取对此网关的访问权限,-1
is_active bit 是否需要查询才能传递当前门。

权限

SQL Server 需要VIEW服务器状态权限。

Azure SQL 数据库 需要VIEWDATABASE数据库中的STATE许可。

SQL Server 2022 及更高版本的权限

需要 VIEW 服务器上的 SERVER PERFORMANCE STATE 权限。

注解

SQL Server 使用分层网关方法来减少允许的并发编译数。 使用三个网关,包括小型、中型和大网关。 网关有助于防止编译内存需求较大的使用者耗尽总体内存资源。

等待网关导致编译延迟。 除了编译延迟外,减少的请求还将具有关联的RESOURCE_SEMAPHORE_QUERY_COMPILE等待类型累积。 RESOURCE_SEMAPHORE_QUERY_COMPILE等待类型可能指示查询正在使用大量内存进行编译,并且内存已用尽。 或者,可能有足够的内存可用总体,但特定网关中的可用单位已用尽。 sys.dm_exec_query_optimizer_memory_gateways 的输出可用于排查内存不足无法编译查询执行计划的情况。

示例

A. 查看资源信号灯的统计信息

此 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;