Поделиться через


sys.dm_exec_query_memory_grants (Transact-SQL)

Возвращает сведения о запросах, которым уже выделена память или которые все еще нуждаются в предоставлении памяти для выполнения. В данном представлении не будут отображены запросы, которым не нужна память.

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

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Имя столбца

Тип данных

Описание

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

Неуникальный идентификатор семафора ресурса, которого ожидает данный запрос.

Примечание

Данный идентификатор уникален в более ранних версиях SQL Server, чем SQL Server 2008.Данное изменение может повлиять на отладку выполнения запроса.Дополнительные сведения см. в подразделе «Примечания» далее в этом разделе.

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)