sys.dm_exec_query_optimizer_memory_gateways (Transact-SQL)

适用于:SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库 Azure 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 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 Server 2014 中RESOURCE_SEMAPHORE_QUERY_COMPILE的内存使用情况