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 |
Общий объем запрошенной памяти в килобайтах. |
||
granted_memory_kb |
bigint |
Общий объем фактически предоставленной памяти в килобайтах. Может быть значение NULL, если память еще не была предоставлена. Обычно это значение должно быть одинаковым с requested_memory_kb. Для создания индекса сервер может разрешить дополнительное предоставление по требованию памяти, объем которой выходит за рамки изначально предоставленной памяти. |
||
required_memory_kb |
bigint |
Минимальный объем памяти в килобайтах (КБ), необходимый для выполнения данного запроса. Значение requested_memory_kb равно этому объему или больше его. |
||
used_memory_kb |
bigint |
Используемый в данный момент объем физической памяти (в килобайтах). |
||
max_used_memory_kb |
bigint |
Максимальный объем используемой до данного момента физической памяти в килобайтах. |
||
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) |
Идентификатор для данного плана запроса. Чтобы извлечь фактический план XML, используйте представление sys.dm_exec_query_plan. |
||
sql_handle |
varbinary(64) |
Идентификатор текста Transact-SQL для данного запроса. Чтобы получить фактический текст Transact-SQL, используйте представление sys.dm_exec_sql_text. |
||
group_id |
int |
Идентификатор группы рабочей нагрузки, в которой выполняется данный запрос. |
||
pool_id |
int |
Идентификатор пула ресурсов, к которому принадлежит данная группа рабочей нагрузки. |
||
is_small |
tinyint |
Значение 1 означает, что для данной операции предоставления памяти используется малый семафор ресурса. Значение 0 означает использование обычного семафора. |
||
ideal_memory_kb |
bigint |
Объем, в килобайтах (КБ), предоставленной памяти, необходимый для размещения всех данных в физической памяти. Основывается на оценке количества элементов. |
Разрешения
Требуется разрешение 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.
Дополнительно изучите требующие большого объема памяти запросы с помощью представления sys.dm_exec_requests.
Если неконтролируемый запрос подозрителен, изучите план выполнения из представления 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)