Share via


sys.dm_exec_query_memory_grants (Transact-SQL)

傳回已取得記憶體授權或是仍然需要記憶體授權來執行的查詢。 不需要等候記憶體授權的查詢將不會出現在此檢視中。

資料行名稱

資料類型

說明

session_id

smallint

執行此查詢的工作階段識別碼 (SPID)。

request_id

int

要求的識別碼。 在工作階段的內容中是唯一的。

scheduler_id

int

排程此查詢的排程器識別碼。

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

此查詢正在等候之資源信號的非唯一識別碼。

[!附註]

在 SQL Server 2008 之前的 SQL Server 版本中,此識別碼是唯一的。 這項變更可以影響疑難排解的查詢執行。 如需詳細資訊,請參閱本主題後面的<備註>一節。

queue_id

smallint

此查詢等候記憶體授權時所在的等候中佇列識別碼。 如果已經授與記憶體,則為 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

這個查詢執行所在工作負載群組的識別碼。

pool_id

int

這個工作負載群組所屬資源集區的識別碼。

is_small

tinyint

設定為 1 時,表示此授與使用小型資源信號。 設定為 0 時,表示使用一般信號。

ideal_memory_kb

bigint

授與的記憶體大小 (以 KB 為單位),可將所有東西配置到實體記憶體。 這是以基數估計值為基礎。

Permissions

需要伺服器的 VIEW SERVER STATE 權限。

備註

查詢逾時的一般偵錯狀況可能如下所示:

  • 使用 sys.dm_os_memory_clerkssys.dm_os_sys_info 以及各種效能計數器檢查整個系統記憶體狀態。

  • 在 type = 'MEMORYCLERK_SQLQERESERVATIONS' 所在的 sys.dm_os_memory_clerks 中檢查執行查詢的記憶體保留。

  • 使用 sys.dm_exec_query_memory_grants 檢查等候授權的查詢。

  • 使用 sys.dm_exec_requests 進一步檢查需要大量記憶體的查詢。

  • 如果懷疑有失控查詢,請從 sys.dm_exec_query_plan 檢查執行程序表,並從 sys.dm_exec_sql_text 檢查批次文字。

使用包含 ORDER BY 或彙總之動態管理檢視的查詢,有可能會增加記憶體耗用量,但也因此可協助它們正在進行疑難排解的問題。

資源管理員功能可讓資料庫管理員在資源集區間散發伺服器資源,最多可達 64 個集區。 從 SQL Server 2008 開始,每個集區的行為都像是一個小型的獨立伺服器執行個體,而且需要 2 個信號。從 sys.dm_exec_query_resource_semaphores 傳回的資料列數目最多可達 SQL Server 2005 中所傳回之資料列的 20 倍以上。

請參閱

參考

sys.dm_exec_query_resource_semaphores (Transact-SQL)

執行相關的動態管理檢視和函數 (Transact-SQL)