Partilhar via


sys.dm_exec_query_memory_grants (Transact-SQL)

Retorna informações sobre as consultas que obtiveram uma concessão de memória ou que ainda precisam da concessão para serem executadas. As consultas que não precisam aguardar uma concessão de memória não aparecerão nessa exibição.

Nome da coluna

Tipo de dados

Descrição

session_id

smallint

ID (SPID) da sessão em que esta consulta está em execução.

request_id

int

ID da solicitação. Exclusiva no contexto da sessão.

scheduler_id

int

ID do agendador que está programando esta consulta.

dop

smallint

Grau de paralelismo desta consulta.

request_time

datetime

Data e hora quando esta consulta solicitou a concessão de memória.

grant_time

datetime

Data e hora quando a memória foi concedida a esta consulta. NULL se memória ainda não tiver sido concedida.

requested_memory_kb

bigint

Quantidade total solicitada de memória em quilobytes.

granted_memory_kb

bigint

Total de memória realmente concedido em quilobytes. Poderá ser NULL se a memória ainda não tiver sido concedida. Em uma situação típica, este valor deveria ser igual a requested_memory_kb. Na criação de índices, o servidor pode permitir memória sob demanda adicional além da memória inicialmente concedida.

required_memory_kb

bigint

Memória mínima exigida para executar esta consulta em quilobytes. requested_memory_kb é maior ou igual a essa quantidade.

used_memory_kb

bigint

Memória física usada neste momento em quilobytes.

max_used_memory_kb

bigint

Máximo de memória física usada até este momento em quilobytes.

query_cost

float

Custo de consulta estimado.

timeout_sec

int

Tempo limite em segundos antes de esta consulta desistir da solicitação de concessão de memória.

resource_semaphore_id

smallint

ID não-exclusivo do sinal do recurso em que esta consulta está aguardando.

ObservaçãoObservação
Este ID é exclusivo em versões do SQL Server anteriores ao SQL Server 2008. Essa alteração pode afetar a execução de consulta de solução de problemas. Para obter mais informações, consulte "Comentários", posteriormente neste tópico.

queue_id

smallint

ID da fila de espera em que esta consulta aguarda concessões de memória. NULL se a memória já tiver sido concedida.

wait_order

int

Ordem seqüencial de consultas de espera dentro da queue_id especificada. Esse valor poderá ser alterado 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.

is_next_candidate

bit

Candidato para a próxima concessão de memória.

1 = Sim

0 = Não

NULL = Se a memória já tiver sido concedida.

wait_time_ms

bigint

Tempo de espera em milissegundos. NULL se a memória já tiver sido concedida.

plan_handle

varbinary(64)

Identificador para este plano de consulta. Use sys.dm_exec_query_plan para extrair o plano XML real.

sql_handle

varbinary(64)

Identificador de texto Transact-SQL desta consulta. Use sys.dm_exec_sql_text para obter o texto Transact-SQL real.

group_id

int

ID do grupo de carga de trabalho em que esta consulta está sendo executada.

pool_id

int

ID do pool de recursos a que este grupo de carga de trabalho pertence.

is_small

tinyint

Quando definido como 1, indica que esta concessão usa o sinal do recurso pequeno. Quando definido como 0, indica que um sinal normal é usado.

ideal_memory_kb

bigint

Tamanho, em quilobytes (KB), da concessão de memória para ajustar tudo na memória física. Ele tem como base a estimativa de cardinalidade.

Permissões

Requer a permissão VIEW SERVER STATE no servidor.

Comentários

Um cenário de depuração típico para tempo limite de consulta pode se parecer com este:

  • Verifique o status geral da memória do sistema usando sys.dm_os_memory_clerks, sys.dm_os_sys_info e vários contadores de desempenho.

  • Verifique se há reservas de memória de execução da consulta em sys.dm_os_memory_clerks, em que type = 'MEMORYCLERK_SQLQERESERVATIONS'.

  • Verifique se há consultas aguardando concessões que usam sys.dm_exec_query_memory_grants.

  • Além disso, examine as consultas que usam bastante memória utilizando sys.dm_exec_requests.

  • Se houver suspeita de uma consulta sem controle, examine o Plano de execução de sys.dm_exec_query_plan e o texto em lote de sys.dm_exec_sql_text.

As consultas que usam exibições de gerenciamento dinâmico com ORDER BY ou agregações podem aumentar o uso da memória e, dessa forma, contribuir para a solução do problema.

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 20 pools. No SQL Server 2008, cada pool se comporta como uma instância de servidor independente pequena e requer dois sinais. O número de linhas retornadas de sys.dm_exec_query_resource_semaphores pode ser até 20 vezes mais do que o retornado no SQL Server 2005.