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

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Retorna informações sobre todas as consultas que solicitaram e estão aguardando uma concessão de memória ou ter recebido uma concessão de memória.Returns information about all queries that have requested and are waiting for a memory grant or have been given a memory grant. Consultas que não exigem uma concessão de memória não aparecerão nessa exibição.Queries that do not require a memory grant will not appear in this view. Por exemplo, classificar e operações de junção de hash têm concessões de memória para execução da consulta, enquanto consultas sem um ORDER BY cláusula não terá uma memória conceder.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.

No Banco de dados SQL do AzureAzure SQL Database, as exibições de gerenciamento dinâmico não podem expor informações que afetarão a contenção do banco de dados ou informações sobre outros bancos de dados aos quais o usuário tem acesso.In Banco de dados SQL do 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. Para evitar a exposição dessas informações, cada linha que contém dados que não pertencem ao locatário conectado será filtrada. Além disso, os valores nas colunas scheduler_id, wait_order, pool_id, group_id são filtrados; o valor da coluna está definido como 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.

Observação

Chamá-lo partir Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) ou Parallel Data WarehouseParallel Data Warehouse, use o nome sys.dm_pdw_nodes_exec_query_memory_grants.To call this from Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) or Parallel Data WarehouseParallel Data Warehouse, use the name sys.dm_pdw_nodes_exec_query_memory_grants.

Nome da colunaColumn name Tipo de dadosData type DescriçãoDescription
session_idsession_id smallintsmallint ID (SPID) da sessão em que esta consulta está em execução.ID (SPID) of the session where this query is running.
request_idrequest_id intint ID da solicitação.ID of the request. Exclusiva no contexto da sessão.Unique in the context of the session.
scheduler_idscheduler_id intint ID do agendador que está programando esta consulta.ID of the scheduler that is scheduling this query.
dopdop smallintsmallint Grau de paralelismo desta consulta.Degree of parallelism of this query.
request_timerequest_time datetimedatetime Data e hora quando esta consulta solicitou a concessão de memória.Date and time when this query requested the memory grant.
grant_timegrant_time datetimedatetime Data e hora quando a memória foi concedida a esta consulta.Date and time when memory was granted for this query. NULL se memória ainda não tiver sido concedida.NULL if memory is not granted yet.
requested_memory_kbrequested_memory_kb bigintbigint Quantidade total solicitada de memória em quilobytes.Total requested amount of memory in kilobytes.
granted_memory_kbgranted_memory_kb bigintbigint Total de memória realmente concedido em quilobytes.Total amount of memory actually granted in kilobytes. Poderá ser NULL se a memória ainda não tiver sido concedida.Can be NULL if the memory is not granted yet. Uma situação típica, esse valor deve ser igual requested_memory_kb.For a typical situation, this value should be the same as requested_memory_kb. Na criação de índices, o servidor pode permitir memória sob demanda adicional além da memória inicialmente concedida.For index creation, the server may allow additional on-demand memory beyond initially granted memory.
required_memory_kbrequired_memory_kb bigintbigint Memória mínima exigida para executar esta consulta em quilobytes.Minimum memory required to run this query in kilobytes. requested_memory_kb é igual ou maior do que esse valor.requested_memory_kb is the same or larger than this amount.
used_memory_kbused_memory_kb bigintbigint Memória física usada neste momento em quilobytes.Physical memory used at this moment in kilobytes.
max_used_memory_kbmax_used_memory_kb bigintbigint Máximo de memória física usada até este momento em quilobytes.Maximum physical memory used up to this moment in kilobytes.
query_costquery_cost floatfloat Custo de consulta estimado.Estimated query cost.
timeout_sectimeout_sec intint Tempo limite em segundos antes de esta consulta desistir da solicitação de concessão de memória.Time-out in seconds before this query gives up the memory grant request.
resource_semaphore_idresource_semaphore_id smallintsmallint ID não exclusivo do semáforo do recurso no qual esta consulta está aguardando.Non-unique ID of the resource semaphore on which this query is waiting.

Observação: Essa ID é exclusiva em versões do SQL ServerSQL Server anteriores ao 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. Essa alteração pode afetar a execução de consulta de solução de problemas.This change can affect troubleshooting query execution. Para obter mais informações, consulte "Comentários", posteriormente neste tópico.For more information, see the "Remarks" section later in this topic.
queue_idqueue_id smallintsmallint ID da fila de espera em que esta consulta aguarda concessões de memória.ID of waiting queue where this query waits for memory grants. NULL se a memória já tiver sido concedida.NULL if the memory is already granted.
wait_orderwait_order intint Ordem sequencial das consultas de espera dentro do especificado queue_id.Sequential order of waiting queries within the specified queue_id. Esse valor pode mudar para uma determinada consulta se outras consultas obtiverem concessões de memória ou tempo limite. NULL se a memória já tiver sido concedida.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 Candidato para a próxima concessão de memória.Candidate for next memory grant.

1 = Sim1 = Yes

0 = Não0 = No

NULL = Se a memória já tiver sido concedida.NULL = Memory is already granted.
wait_time_mswait_time_ms bigintbigint Tempo de espera em milissegundos.Wait time in milliseconds. NULL se a memória já tiver sido concedida.NULL if the memory is already granted.
plan_handleplan_handle varbinary(64)varbinary(64) Identificador para este plano de consulta.Identifier for this query plan. Use . DM exec_query_plan para extrair o plano XML real.Use sys.dm_exec_query_plan to extract the actual XML plan.
sql_handlesql_handle varbinary(64)varbinary(64) Identificador de texto Transact-SQLTransact-SQL desta consulta.Identifier for Transact-SQLTransact-SQL text for this query. Use DM exec_sql_text para obter o valor real Transact-SQLTransact-SQL texto.Use sys.dm_exec_sql_text to get the actual Transact-SQLTransact-SQL text.
group_idgroup_id intint ID do grupo de carga de trabalho em que esta consulta está sendo executada.ID for the workload group where this query is running.
pool_idpool_id intint ID do pool de recursos a que este grupo de carga de trabalho pertence.ID of the resource pool that this workload group belongs to.
is_smallis_small tinyinttinyint Quando definido como 1, indica que esta concessão usa o sinal do recurso pequeno.When set to 1, indicates that this grant uses the small resource semaphore. Quando definido como 0, indica que um sinal normal é usado.When set to 0, indicates that a regular semaphore is used.
ideal_memory_kbideal_memory_kb bigintbigint Tamanho, em quilobytes (KB), da concessão de memória para ajustar tudo na memória física.Size, in kilobytes (KB), of the memory grant to fit everything into physical memory. Ele tem como base a estimativa de cardinalidade.This is based on the cardinality estimate.
pdw_node_idpdw_node_id intint Aplica-se ao: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW), Parallel Data WarehouseParallel Data WarehouseApplies to: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW), Parallel Data WarehouseParallel Data Warehouse

O identificador para o nó que essa distribuição é no.The identifier for the node that this distribution is on.

PermissõesPermissions

Na SQL ServerSQL Server, requer VIEW SERVER STATE permissão.On SQL ServerSQL Server, requires VIEW SERVER STATE permission.
Em Banco de dados SQL do AzureAzure SQL Database, requer a permissão VIEW DATABASE STATE no banco de dados.On Banco de dados SQL do AzureAzure SQL Database, requires the VIEW DATABASE STATE permission in the database.

ComentáriosRemarks

Um cenário de depuração típico para tempo limite de consulta pode se parecer com este:A typical debugging scenario for query time-out may look like the following:

  • Verificar o uso de status de memória de sistema geral DM os_memory_clerks, DM os_sys_infoe vários contadores de desempenho.Check overall system memory status using sys.dm_os_memory_clerks, sys.dm_os_sys_info, and various performance counters.

  • Verificar se há reservas de memória de execução da consulta em DM os_memory_clerks onde type = 'MEMORYCLERK_SQLQERESERVATIONS'.Check for query-execution memory reservations in sys.dm_os_memory_clerks where type = 'MEMORYCLERK_SQLQERESERVATIONS'.

  • Verificar se há consultas aguardando1 para concessões que usam 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 Nesse cenário, o tipo de espera costuma ser RESOURCE_SEMAPHORE.1 In this scenario, the wait type is typically RESOURCE_SEMAPHORE. Para obter mais informações, confira sys.dm_os_wait_stats (Transact-SQL).For more information, see sys.dm_os_wait_stats (Transact-SQL).

  • Cache para consultas de pesquisa com concessões de memória usando DM exec_cached_plans (Transact-SQL) e . 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  
    
  • Além disso, examine consultas intensivo de memória usando . 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  
    
  • Se houver suspeita de uma consulta de fuga, examine o plano de execução de . DM exec_query_plan e texto em lote de 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.

Consultas que usam exibições de gerenciamento dinâmico que incluem ORDER BY ou agregações podem aumentar o consumo de memória e, portanto, contribuem para o solução do problema.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.

O recurso Administrador de Recursos permite que um administrador de banco de dados distribua recursos de servidor entre pools de recursos, até um máximo de 64 pools.The Resource Governor feature enables a database administrator to distribute server resources among resource pools, up to a maximum of 64 pools. Começando com SQL Server 2008SQL Server 2008, cada pool se comporta como uma instância de servidor independente pequena e requer 2 semáforos.Beginning with SQL Server 2008SQL Server 2008, each pool behaves like a small independent server instance and requires 2 semaphores. O número de linhas retornadas de DM exec_query_resource_semaphores pode ser até 20 vezes mais do que as linhas que são retornadas em 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).

Consulte tambémSee 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)
Funções e exibições de gerenciamento dinâmico relacionadas à execução (Transact-SQL)Execution Related Dynamic Management Views and Functions (Transact-SQL)