Skip to main content
sys.dm_exec_query_memory_grants (Transact-SQL)
 

ПРИМЕНЯЕТСЯ К: даSQL Server (начиная с 2008) даБаза данных SQL Azure нетХранилище данных SQL Azure нетParallel Data Warehouse

Возвращает сведения обо всех запросах, которые запросили и ожидающих предоставления памяти или были присвоены предоставления памяти. В этом представлении не будут отображены запросы, которые не нуждаются в предоставлении памяти. Например, для сортировки и операции хэш-соединения имеют выделения памяти для выполнения запроса во время запросов без ORDER BY предложение не будет предоставлять памяти.

Динамические административные представления в среде База данных SQL Azure не могут предоставлять информацию, которая может повлиять на автономность базы данных, или информацию о других базах данных, к которым имеет доступ пользователь. Чтобы избежать предоставления этих сведений, все строки, содержащие данные, не принадлежащие к подключенному клиенту, фильтруются. Кроме того, значения в столбцах scheduler_id, wait_order, pool_id, group_id фильтруются; значение столбца имеет значение NULL.

System_CAPS_ICON_note.jpg Примечание


Вызывать его из Хранилище данных SQL Azure или Параллельное хранилище данных, используйте имя sys.dm_pdw_nodes_exec_query_memory_grants.

Имя столбцаТип данныхDescription
session_idsmallintИдентификатор (SPID) сеанса, в котором выполняется данный запрос.
идентификатор_запросаintИдентификатор запроса. Уникален в контексте сеанса.
scheduler_idintИдентификатор планировщика, который планирует данный запрос.
DoPsmallintСтепень параллелизма данного запроса.
request_timeдаты и времениДата и время обращения запроса за предоставлением памяти.
grant_timeдаты и времениДата и время, когда запросу была предоставлена память. Возвращает значение NULL, если память еще не была предоставлена.
requested_memory_kbbigintОбщий объем запрошенной памяти в килобайтах.
granted_memory_kbbigintОбщий объем фактически предоставленной памяти в килобайтах. Может быть значение NULL, если память еще не была предоставлена. Типичные ситуации, это значение должно быть таким же, как requested_memory_kb. Для создания индекса сервер может разрешить дополнительное предоставление по требованию памяти, объем которой выходит за рамки изначально предоставленной памяти.
required_memory_kbbigintМинимальный объем памяти в килобайтах (КБ), необходимый для выполнения данного запроса. requested_memory_kb соответствует или превышает это значение.
used_memory_kbbigintИспользуемый в данный момент объем физической памяти (в килобайтах).
max_used_memory_kbbigintМаксимальный объем используемой до данного момента физической памяти в килобайтах.
query_costчисло с плавающей запятойОжидаемая стоимость запроса.
timeout_secintВремя ожидания данного запроса в секундах до отказа от обращения за предоставлением памяти.
resource_semaphore_idsmallintНеуникальный идентификатор семафора ресурса, которого ожидает данный запрос.

 Примечание: этот идентификатор уникален в версиях SQL Server , более ранних чем SQL Server 2008. Данное изменение может повлиять на устранение проблем в запросах. Дополнительные сведения см. в подразделе «Замечания» далее в этом разделе.
queue_idsmallintИдентификатор ожидающей очереди, в которой данный запрос ожидает предоставления памяти. Значение NULL, если память уже предоставлена.
wait_orderintПоследовательный порядок ожидающих запросов в указанной queue_id. Это значение может изменяться для заданного запроса, если другие запросы отказываются от предоставления памяти или получают ее. Значение NULL, если память уже предоставлена.
is_next_candidateбитЯвляется следующим кандидатом на предоставление памяти.

1 = да

0 = нет

NULL = память уже предоставлена.
wait_time_msbigintВремя ожидания в миллисекундах. Значение NULL, если память уже предоставлена.
plan_handlevarbinary(64)Идентификатор для данного плана запроса. Используйте sys.dm_exec_query_plan чтобы извлечь фактический план XML.
sql_handlevarbinary(64)Идентификатор текста Transact-SQL для данного запроса. Используйте sys.dm_exec_sql_text Чтобы получить фактический Transact-SQL текста.
идентификатор_группыintИдентификатор группы рабочей нагрузки, в которой выполняется данный запрос.
pool_idintИдентификатор пула ресурсов, к которому принадлежит данная группа рабочей нагрузки.
is_smalltinyintЗначение 1 означает, что для данной операции предоставления памяти используется малый семафор ресурса. Значение 0 означает использование обычного семафора.
ideal_memory_kbbigintОбъем, в килобайтах (КБ), предоставленной памяти, необходимый для размещения всех данных в физической памяти. Основывается на оценке количества элементов.
pdw_node_idintПрименяется к: Хранилище данных SQL Azure,Параллельное хранилище данных

Идентификатор узла, который это распределение.

необходимо разрешение VIEW SERVER STATE на сервере.

Обычный сценарий отладки для времени ожидания запроса может выглядеть следующим образом:

  • Проверьте общую систему памяти состояние с помощью sys.dm_os_memory_clerks, sys.dm_os_sys_infoи различных счетчиков производительности.

  • Проверьте резервирование памяти выполнения запроса в sys.dm_os_memory_clerks где type = 'MEMORYCLERK_SQLQERESERVATIONS'.

  • Поиск запросов, ожидающих предоставления памяти с помощью sys.dm_exec_query_memory_grants.

    --Find all queries waiting in the memory queue  
    SELECT * FROM sys.dm_exec_query_memory_grants where grant_time is null  
    
  • Поиск кэша для запросов на предоставление памяти с помощью sys.dm_exec_cached_plans (Transact-SQL) и sys.dm_exec_query_plan (Transact-SQL)

    -- retrieve every query plan from the plan cache  
    USE master;  
    GO  
    SELECT * FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle);  
    GO  
    
    
  • Дополнительно изучите требующие много памяти запросы с помощью sys.dm_exec_requests.

    --Find top 5 queries by average CPU time  
    SELECT TOP 5 total_worker_time/execution_count AS [Avg CPU Time],  
    Plan_handle, query_plan   
    FROM sys.dm_exec_query_stats AS qs  
    CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)  
    ORDER BY total_worker_time/execution_count DESC;  
    GO  
    
    
  • Если неконтролируемый запрос подозрителен, изучите план выполнения из sys.dm_exec_query_plan и текст пакета из sys.dm_exec_sql_text.

Запросы, использующие динамические административные представления и содержащие предложение ORDER BY или статистические функции, могут увеличить потребление памяти и таким образом усугубить проблему, которую призваны устранить.

Регулятор ресурсов позволяет администратору базы данных распределять ресурсы сервера между пулами ресурсов, используя до 64 пулов. Начиная с версии SQL Server 2008, каждый пул ведет себя как небольшой независимый экземпляр сервера и требует двух семафоров. Число строк, возвращаемых из sys.dm_exec_query_resource_semaphores может быть до 20 раз больше, чем количество строк, возвращаемых в SQL Server 2005.

sys.dm_exec_query_resource_semaphores (Transact-SQL)
Динамические административные представления и функции (Transact-SQL), связанные с выполнением