sys.dm_exec_query_optimizer_memory_gateways (Transact-SQL)

适用于: SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库Azure SQL 托管实例

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

类型 描述
pool_id int Resource Governor下的资源池 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 SERVER STATE 权限。

Azure SQL数据库需要数据库中的 VIEW DATABASE 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;   

另请参阅

动态管理视图和函数 (Transact-SQL)
与执行有关的动态管理视图和函数 (Transact-SQL)
如何使用 DBCC MEMORYSTATUS 命令监视 SQL Server 2005 SQL Server2014 中RESOURCE_SEMAPHORE_QUERY_COMPILE大型查询编译等待的内存使用情况