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

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL DatabaseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database

Возвращает сведения обо всех запросах, которые были запрошены и ожидают предоставления памяти или предоставил предоставление памяти.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 Data Warehouse) или Параллельное хранилище данныхParallel Data Warehouse , используйте имя sys. dm_pdw_nodes_exec_query_memory_grants.To call this from Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) 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.
dopdop 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. Чтобы извлечь фактический план XML, используйте представление sys.dm_exec_query_plan.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. Чтобы получить фактический текст Transact-SQLTransact-SQL, используйте представление sys.dm_exec_sql_text.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 Идентификатор узла, на котором находится данное распределение.The identifier for the node that this distribution is on.

Применимо к: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse) ,Параллельное хранилище данныхParallel Data WarehouseApplies to: Azure Synapse Analytics (Хранилище данных SQL)Azure Synapse Analytics (SQL Data Warehouse), Параллельное хранилище данныхParallel Data Warehouse
reserved_worker_countreserved_worker_count bigintbigint Количество зарезервированных рабочих потоков.Number of reserved worker threads.

Область применения: SQL ServerSQL Server (начиная с SQL Server 2016 (13.x);SQL Server 2016 (13.x)) и База данных SQL AzureAzure SQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2016 (13.x);SQL Server 2016 (13.x)) and База данных SQL AzureAzure SQL Database
used_worker_countused_worker_count bigintbigint Число рабочих потоков , используемых в данный момент.Number of worker threads used at this moment.

Область применения: SQL ServerSQL Server (начиная с SQL Server 2016 (13.x);SQL Server 2016 (13.x)) и База данных SQL AzureAzure SQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2016 (13.x);SQL Server 2016 (13.x)) and База данных SQL AzureAzure SQL Database
max_used_worker_countmax_used_worker_count bigintbigint Максимальное число рабочих потоков , использованных до этого момента.Maximum number of worker threads used up to this moment.

Область применения: SQL ServerSQL Server (начиная с SQL Server 2016 (13.x);SQL Server 2016 (13.x)) и База данных SQL AzureAzure SQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2016 (13.x);SQL Server 2016 (13.x)) and База данных SQL AzureAzure SQL Database
reserved_node_bitmapreserved_node_bitmap bigintbigint Битовая карта узлов NUMA, в которых зарезервированы рабочие потоки .Bitmap of NUMA nodes where worker threads are reserved.

Область применения: SQL ServerSQL Server (начиная с SQL Server 2016 (13.x);SQL Server 2016 (13.x)) и База данных SQL AzureAzure SQL Database.Applies to: SQL ServerSQL Server (Starting with SQL Server 2016 (13.x);SQL Server 2016 (13.x)) and База данных SQL AzureAzure SQL Database

Разрешения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 , каждый пул ведет себя как небольшой независимый экземпляр сервера и требует 2 семафора.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)
Руководство по архитектуре потоков и задачThread and Task Architecture Guide