sys.dm_exec_query_memory_grants (Transact-SQL)
傳回已取得記憶體授權或是仍然需要記憶體授權來執行的查詢。 不需要等候記憶體授權的查詢將不會出現在此檢視中。
在 Windows Azure SQL 資料庫,動態管理檢視不可以公開可能會影響資料庫內含項目的資訊或公開有關使用者可存取之其他資料庫的資訊。 為了避免公開此資訊,包含不屬於連接租用戶之資料的每個資料列都會被篩選出來。 另外,資料行 scheduler_id、wait_order、pool_id、group_id 的值也會被篩選出來;資料行值設定為 NULL。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure 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_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 倍以上。