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 |
此查詢正在等候之資源信號的非唯一識別碼。
|
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_clerks、sys.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 倍以上。