sys.dm_exec_query_resource_semaphores (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

返回有关 SQL Server 中当前查询资源信号灯状态的信息。 sys.dm_exec_query_resource_semaphores提供常规查询执行内存状态,并允许你确定系统是否可以访问足够的内存。 此视图补充从 sys.dm_os_memory_clerks 获取的内存信息,以提供服务器内存状态的完整图片。 sys.dm_exec_query_resource_semaphores为常规资源信号量返回一行,为小型查询资源信号量返回另一行。 小型查询信号灯有两个要求:

  • 请求的内存授予应小于 5 MB

  • 查询成本应小于 3 个成本单位

注意

若要从 Azure Synapse Analytics 或 Analytics 平台系统(PDW)调用此名称,请使用名称 sys.dm_pdw_nodes_exec_query_resource_semaphores。 Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

列名称 数据类型 描述
resource_semaphore_id smallint 资源信号量的非唯一 ID。 0 表示常规资源信号量,1 表示小型查询资源信号量。
target_memory_kb bigint 授予使用的目标 (KB)。
max_target_memory_kb bigint 最大潜在目标 (KB)。 对于小型查询资源信号量,该值为 NULL。
total_memory_kb bigint 资源信号量所持有的内存 (KB)。 如果系统内存压力不足,或者频繁授予强制最小内存,则此值可能大于 target_memory_kbmax_target_memory_kb 值。 总内存是可用内存和被授予内存的和。
available_memory_kb bigint 可用于新授予的内存 (KB)。
granted_memory_kb bigint 授予的总内存 (KB)。
used_memory_kb bigint 授予内存中实际使用的部分 (KB)。
grantee_count int 内存授予得到满足的活动查询数。
waiter_count int 等待内存授予得到满足的查询数。
timeout_error_count bigint 自服务器启动以来的超时错误总数。 对于小型查询资源信号量,该值为 NULL。
forced_grant_count bigint 自服务器启动以来的强制最小内存授予总数。 对于小型查询资源信号量,该值为 NULL。
pool_id int 此资源信号量所属资源池的 ID。
pdw_node_id int 适用于:Azure Synapse Analytics、Analytics Platform System (PDW)

此分发所在节点的标识符。

权限

对于 SQL Server 和 SQL 托管实例,需要 VIEW SERVER STATE 权限。

在SQL 数据库基本、S0S1 服务目标以及弹性池中的数据库、服务器管理员帐户、Microsoft Entra 管理员帐户或服务器角色的成员##MS_ServerStateReader##身份是必需的。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE 权限或 ##MS_ServerStateReader## 服务器角色中的成员身份。

SQL Server 2022 及更高版本的权限

要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。

注解

如果查询使用的动态管理视图中包括 ORDER BY 或聚合,则可能增加内存占用,进而产生需进行故障排除的问题。

使用 sys.dm_exec_query_resource_semaphores 进行故障排除,但不包括在将使用 SQL Server 的未来版本的应用程序中。

数据库管理员可以使用资源调控器功能在多个资源池之间分发服务器资源,最多可为 64 个池。 在 SQL Server 2012(11.x)及更高版本中,每个池的行为类似于小型独立服务器实例,需要 2 个信号灯。

另请参阅

与执行有关的动态管理视图和函数 (Transact-SQL)
sys.dm_exec_query_memory_grants (Transact-SQL)