sys.dm_exec_query_memory_grants

返回已经获得内存授予的查询的有关信息,或仍需执行内存授予的查询的有关信息。无需等待内存授予的查询将不会出现在此视图中。

列名

数据类型

说明

session_id

smallint

正在运行查询的会话 ID (SPID)。

request_id

int

请求的 ID。在会话的上下文中是唯一的。

scheduler_id

int

正在计划查询的计划程序的 ID。

dop

smallint

查询的并行度。

request_time

datetime

查询请求内存授予的日期和时间。

grant_time

datetime

向查询授予内存的日期和时间。如果尚未授予内存,则此值为 NULL。

requested_memory_kb

bigint

请求的内存总量 (KB)。

granted_memory_kb

bigint

实际授予的内存总量 (KB)。如果尚未授予内存,该值可以为 NULL。在典型情况下,该值应与 requested_memory_kb 相同。创建索引时,除了初始授予的内存外,服务器还允许增加按需分配的内存。

required_memory_kb

bigint

运行查询所需的最小内存 (KB)。requested_memory_kb 等于或大于该值。

used_memory_kb

bigint

此刻使用的物理内存 (KB)。

max_used_memory_kb

bigint

到此刻为止所用的最大物理内存 (KB)。

query_cost

float

估计查询开销。

timeout_sec

int

查询放弃内存授予请求前的超时时间(秒)。

resource_semaphore_id

smallint

查询正在等待的资源信号量的非唯一 ID。

注意注意
此 ID 在早于 SQL Server 2008 的 SQL Server 版本中是唯一的。此更改会对故障排除查询执行造成影响。有关详细信息,请参阅本主题后面的“备注”部分。

queue_id

smallint

查询等待内存授予时所在等待队列的 ID。如果已授予内存,则为 NULL。

wait_order

int

等待查询在指定的 queue_id 中的顺序。如果其他查询获得内存授予或超时,则给定查询的该值可以更改。如果已授予内存,则为 NULL。

is_next_candidate

bit

下一个内存授予的候选对象。

1 = 是

0 = 否

NULL = 已授予内存。

wait_time_ms

bigint

等待时间(毫秒)。如果已授予内存,则为 NULL。

plan_handle

varbinary(64)

查询计划的标识符。使用 sys.dm_exec_query_plan 可提取实际的 XML 计划。

sql_handle

varbinary(64)

查询的 Transact-SQL 文本标识符。使用 sys.dm_exec_sql_text 可获取实际的 Transact-SQL 文本。

group_id

int

在其中运行此查询的工作负荷组的 ID。

pool_id

int

该工作负荷组所属的资源池的 ID。

is_small

tinyint

如果设置为 1,则指示此授予使用小型资源信号量。如果设置为 0,则指示使用常规信号量。

ideal_memory_kb

bigint

将所有内容存放在物理内存中所需的内存授予的大小(以 KB 为单位)。这基于基数估计。

权限

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

注释

查询超时的典型调试情况可能如下所示:

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

数据库管理员可以使用资源调控器功能在多个资源池之间分发服务器资源,最多可为 20 个池。在 SQL Server 2008 中,每个池都类似于一个小型的独立服务器实例并且要求 2 个信号量。从 sys.dm_exec_query_resource_semaphores 中返回的行数可比 SQL Server 2005 中返回的行数多 20 倍。