sys.dm_exec_query_memory_grants (Transact-SQL)sys.dm_exec_query_memory_grants (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure нетAzure Synapse Analytics (хранилище данных SQL) нетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Возвращает сведения обо всех запросах, которые запросили и ожидающих предоставления памяти или был предоставлен предоставления памяти.Returns information about all queries that have requested and are waiting for a memory grant or have been given a memory grant. Запросы, которые не нуждаются в предоставлении памяти будет отсутствовать в этом представлении.Queries that do not require a memory grant will not appear in this view. Например, для сортировки и операции хэш-соединения имеют временно предоставляемый буфер памяти для выполнения запроса, во время запросов без ORDER BY предложение не будет временно предоставляемого буфера памяти.For example, sort and hash join operations have memory grants for query execution, while queries without an ORDER BY clause will not have a memory grant.

Динамические административные представления в среде База данных SQL AzureAzure SQL Database не могут предоставлять информацию, которая может повлиять на автономность базы данных, или информацию о других базах данных, к которым имеет доступ пользователь.In База данных SQL AzureAzure SQL Database, dynamic management views cannot expose information that would impact database containment or expose information about other databases the user has access to. Чтобы избежать раскрытия этих сведений, все строки, содержащие данные, не принадлежащие к подключенному клиенту, фильтруются. Кроме того, значения в столбцах scheduler_id, wait_order, pool_id, group_id фильтруются; значение столбца равно значение NULL.To avoid exposing this information, every row that contains data that doesn't belong to the connected tenant is filtered out. In addition, the values in the columns scheduler_id, wait_order, pool_id, group_id are filtered; the column value is set to NULL.

Примечание

Вызывать его из Azure Synapse Analytics (хранилище данных SQL)Azure Synapse Analytics (SQL DW) или Параллельное хранилище данныхParallel Data Warehouse, используйте имя sys.dm_pdw_nodes_exec_query_memory_grants.To call this from Azure Synapse Analytics (хранилище данных SQL)Azure Synapse Analytics (SQL DW) or Параллельное хранилище данныхParallel Data Warehouse, use the name sys.dm_pdw_nodes_exec_query_memory_grants.

Имя столбцаColumn name Тип данныхData type ОписаниеDescription
session_idsession_id smallintsmallint Идентификатор (SPID) сеанса, в котором выполняется данный запрос.ID (SPID) of the session where this query is running.
request_idrequest_id intint Идентификатор запроса.ID of the request. Уникален в контексте сеанса.Unique in the context of the session.
scheduler_idscheduler_id intint Идентификатор планировщика, который планирует данный запрос.ID of the scheduler that is scheduling this query.
степень параллелизмаdop smallintsmallint Степень параллелизма данного запроса.Degree of parallelism of this query.
request_timerequest_time datetimedatetime Дата и время обращения запроса за предоставлением памяти.Date and time when this query requested the memory grant.
grant_timegrant_time datetimedatetime Дата и время, когда запросу была предоставлена память.Date and time when memory was granted for this query. Возвращает значение NULL, если память еще не была предоставлена.NULL if memory is not granted yet.
requested_memory_kbrequested_memory_kb bigintbigint Общий объем запрошенной памяти в килобайтах.Total requested amount of memory in kilobytes.
granted_memory_kbgranted_memory_kb bigintbigint Общий объем фактически предоставленной памяти в килобайтах.Total amount of memory actually granted in kilobytes. Может быть значение NULL, если память еще не была предоставлена.Can be NULL if the memory is not granted yet. Для типичной ситуации, это значение должно быть таким же, как requested_memory_kb.For a typical situation, this value should be the same as requested_memory_kb. Для создания индекса сервер может разрешить дополнительное предоставление по требованию памяти, объем которой выходит за рамки изначально предоставленной памяти.For index creation, the server may allow additional on-demand memory beyond initially granted memory.
required_memory_kbrequired_memory_kb bigintbigint Минимальный объем памяти в килобайтах (КБ), необходимый для выполнения данного запроса.Minimum memory required to run this query in kilobytes. requested_memory_kb соответствует или превышает это значение.requested_memory_kb is the same or larger than this amount.
used_memory_kbused_memory_kb bigintbigint Используемый в данный момент объем физической памяти (в килобайтах).Physical memory used at this moment in kilobytes.
max_used_memory_kbmax_used_memory_kb bigintbigint Максимальный объем используемой до данного момента физической памяти в килобайтах.Maximum physical memory used up to this moment in kilobytes.
query_costquery_cost floatfloat Ожидаемая стоимость запроса.Estimated query cost.
timeout_sectimeout_sec intint Время ожидания данного запроса в секундах до отказа от обращения за предоставлением памяти.Time-out in seconds before this query gives up the memory grant request.
resource_semaphore_idresource_semaphore_id smallintsmallint Неуникальный идентификатор семафора ресурса, которого ожидает данный запрос.Non-unique ID of the resource semaphore on which this query is waiting.

Примечание. Этот идентификатор уникален в версиях SQL ServerSQL Server ранее SQL Server 2008SQL Server 2008.Note: This ID is unique in versions of SQL ServerSQL Server that are earlier than SQL Server 2008SQL Server 2008. Данное изменение может повлиять на устранение проблем в запросах.This change can affect troubleshooting query execution. Дополнительные сведения см. в подразделе «Замечания» далее в этом разделе.For more information, see the "Remarks" section later in this topic.
queue_idqueue_id smallintsmallint Идентификатор ожидающей очереди, в которой данный запрос ожидает предоставления памяти.ID of waiting queue where this query waits for memory grants. Значение NULL, если память уже предоставлена.NULL if the memory is already granted.
wait_orderwait_order intint Последовательный порядок ожидающих запросов в пределах указанного queue_id.Sequential order of waiting queries within the specified queue_id. Это значение можно изменить для конкретного запроса, если другие запросы отказываются от предоставления памяти или истечения времени ожидания. Значение NULL, если память уже предоставлена.This value can change for a given query if other queries get memory grants or time out. NULL if memory is already granted.
is_next_candidateis_next_candidate bitbit Является следующим кандидатом на предоставление памяти.Candidate for next memory grant.

1 = да1 = Yes

0 = нет0 = No

NULL = память уже предоставлена.NULL = Memory is already granted.
wait_time_mswait_time_ms bigintbigint Время ожидания в миллисекундах.Wait time in milliseconds. Значение NULL, если память уже предоставлена.NULL if the memory is already granted.
plan_handleplan_handle varbinary(64)varbinary(64) Идентификатор для данного плана запроса.Identifier for this query plan. Используйте sys.dm_exec_query_plan извлечь фактический план XML.Use sys.dm_exec_query_plan to extract the actual XML plan.
sql_handlesql_handle varbinary(64)varbinary(64) Идентификатор текста Transact-SQLTransact-SQL для данного запроса.Identifier for Transact-SQLTransact-SQL text for this query. Используйте sys.dm_exec_sql_text Чтобы получить фактический Transact-SQLTransact-SQL текста.Use sys.dm_exec_sql_text to get the actual Transact-SQLTransact-SQL text.
group_idgroup_id intint Идентификатор группы рабочей нагрузки, в которой выполняется данный запрос.ID for the workload group where this query is running.
pool_idpool_id intint Идентификатор пула ресурсов, к которому принадлежит данная группа рабочей нагрузки.ID of the resource pool that this workload group belongs to.
is_smallis_small tinyinttinyint Значение 1 означает, что для данной операции предоставления памяти используется малый семафор ресурса.When set to 1, indicates that this grant uses the small resource semaphore. Значение 0 означает использование обычного семафора.When set to 0, indicates that a regular semaphore is used.
ideal_memory_kbideal_memory_kb bigintbigint Объем, в килобайтах (КБ), предоставленной памяти, необходимый для размещения всех данных в физической памяти.Size, in kilobytes (KB), of the memory grant to fit everything into physical memory. Основывается на оценке количества элементов.This is based on the cardinality estimate.
pdw_node_idpdw_node_id intint Применяется к: Azure Synapse Analytics (хранилище данных SQL)Azure Synapse Analytics (SQL DW), Параллельное хранилище данныхParallel Data WarehouseApplies to: Azure Synapse Analytics (хранилище данных SQL)Azure Synapse Analytics (SQL DW), Параллельное хранилище данныхParallel Data Warehouse

Идентификатор для узла, это распределение является на.The identifier for the node that this distribution is on.

РазрешенияPermissions

На SQL ServerSQL Server, требуется VIEW SERVER STATE разрешение.On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
В База данных SQL AzureAzure SQL Database необходимо разрешение VIEW DATABASE STATE для базы данных.On База данных SQL AzureAzure SQL Database, requires the VIEW DATABASE STATE permission in the database.

ПримечанияRemarks

Обычный сценарий отладки для времени ожидания запроса может выглядеть следующим образом:A typical debugging scenario for query time-out may look like the following:

  • Проверьте общую систему памяти состояние с помощью sys.dm_os_memory_clerks, sys.dm_os_sys_infoи различных счетчиков производительности.Check overall system memory status using sys.dm_os_memory_clerks, sys.dm_os_sys_info, and various performance counters.

  • Проверьте для резервирования памяти выполнения запроса в sys.dm_os_memory_clerks где type = 'MEMORYCLERK_SQLQERESERVATIONS'.Check for query-execution memory reservations in sys.dm_os_memory_clerks where type = 'MEMORYCLERK_SQLQERESERVATIONS'.

  • Поиск запросов, ожидающих1 предоставления с помощью sys.dm_exec_query_memory_grants.Check for queries waiting1 for grants using 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  
    

    1 В этом случае типом ожидания, как правило, является RESOURCE_SEMAPHORE.1 In this scenario, the wait type is typically RESOURCE_SEMAPHORE. Дополнительные сведения см. в разделе sys.dm_os_wait_stats (Transact-SQL).For more information, see sys.dm_os_wait_stats (Transact-SQL).

  • Введите строку поиска кэша для запросов на предоставление памяти с помощью sys.dm_exec_cached_plans (Transact-SQL) и sys.dm_exec_query_plan (Transact-SQL)Search cache for queries with memory grants using sys.dm_exec_cached_plans (Transact-SQL) and 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.Further examine memory-intensive queries using 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.If a runaway query is suspected, examine the Showplan from sys.dm_exec_query_plan and batch text from sys.dm_exec_sql_text.

Запросы, использующие динамические административные представления, которые включают ORDER BY или статистические выражения могут увеличить потребление памяти и таким образом устранить проблемы, устранения неполадок.Queries that use dynamic management views that include ORDER BY or aggregates may increase memory consumption and thus contribute to the problem they are troubleshooting.

Регулятор ресурсов позволяет администратору базы данных распределять ресурсы сервера между пулами ресурсов, используя до 64 пулов.The Resource Governor feature enables a database administrator to distribute server resources among resource pools, up to a maximum of 64 pools. Начиная с версии SQL Server 2008SQL Server 2008, каждый пул ведет себя как небольшой независимый экземпляр сервера и требует двух семафоров.Beginning with SQL Server 2008SQL Server 2008, each pool behaves like a small independent server instance and requires 2 semaphores. Число строк, возвращаемых из sys.dm_exec_query_resource_semaphores может быть до 20 раз, чем количество строк, возвращаемых в SQL Server 2005 (9.x)SQL Server 2005 (9.x).The number of rows that are returned from sys.dm_exec_query_resource_semaphores can be up to 20 times more than the rows that are returned in SQL Server 2005 (9.x)SQL Server 2005 (9.x).

См. такжеSee Also

sys.dm_exec_query_resource_semaphores (Transact-SQL) sys.dm_exec_query_resource_semaphores (Transact-SQL)
sys.dm_os_wait_stats (Transact-SQL) sys.dm_os_wait_stats (Transact-SQL)
Динамические административные представления и функции, связанные с выполнением (Transact-SQL)Execution Related Dynamic Management Views and Functions (Transact-SQL)